on master help sign in
Subtree merged in JSONTestSuite
commit8cd2b5ada64af39319583002d94d45520ea0875a authorBryan O'Sullivan <bryano@fb.com> dateFri 28 Oct 2016, 14:23 (10 years ago) parent3156204af9a796
938 files changed+63977
tests/JSONTestSuite/LICENSE+21 tests/JSONTestSuite/README.md+50 tests/JSONTestSuite/parsers/test-AppleJSONSerialization/bin/test-AppleJSONSerialization tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.pbxproj+260 tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-AppleJSONSerialization.xcscheme+91 tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization/main.swift+34 tests/JSONTestSuite/parsers/test_Bash_JSON/JSON.sh+208 tests/JSONTestSuite/parsers/test_Freddy_20160830/bin/test_Freddy tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.pbxproj+300 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprint+30 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcscheme+91 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSON.swift+95 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONDecodable.swift+177 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONEncodable.swift+83 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONEncodingDetector.swift+110 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONLiteralConvertible.swift+130 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONParser.swift+907 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONParsing.swift+126 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONSerializing.swift+43 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONSubscripting.swift+705 tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/main.swift+37 tests/JSONTestSuite/parsers/test_Freddy_20161018/bin/test_Freddy tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.pbxproj+300 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprint+30 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcscheme+91 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSON.swift+98 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONDecodable.swift+186 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONEncodable.swift+83 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONEncodingDetector.swift+110 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONLiteralConvertible.swift+134 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONParser.swift+918 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONParsing.swift+126 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONSerializing.swift+54 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONSubscripting.swift+613 tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/main.swift+40 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/bin/test_Freddy_2_1_0 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.pbxproj+300 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprint+30 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcscheme+91 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSON.swift+95 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONDecodable.swift+151 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONEncodable.swift+83 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONEncodingDetector.swift+110 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONLiteralConvertible.swift+130 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONParser.swift+903 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONParsing.swift+126 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONSerializing.swift+43 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONSubscripting.swift+643 tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/main.swift+37 tests/JSONTestSuite/parsers/test_JSONKit/JSONKit.h+251 tests/JSONTestSuite/parsers/test_JSONKit/JSONKit.m+3065 tests/JSONTestSuite/parsers/test_JSONKit/bin/test-JSONKit tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.pbxproj+252 tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-JSONKit.xcscheme+91 tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit/main.m+73 tests/JSONTestSuite/parsers/test_Json.NET/Program.cs+46 tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/Newtonsoft.Json.dll tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/System.Runtime.Serialization.Primitives.dll tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.deps.json+49 tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.dll tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.pdb tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.runtimeconfig.json+8 tests/JSONTestSuite/parsers/test_Json.NET/project.json+21 tests/JSONTestSuite/parsers/test_Json.NET/project.lock.json+6741 tests/JSONTestSuite/parsers/test_Lua_JSON/JSON.lua+1451 tests/JSONTestSuite/parsers/test_Lua_JSON/test_JSON.lua+22 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/bin/test_ObjCNSJSONSerializer tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.pbxproj+246 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_ObjCNSJSONSerializer.xcscheme+97 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.out tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.out.dSYM/Contents/Info.plist+20 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.out.dSYM/Contents/Resources/DWARF/a.out tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/findings_dir/plot_data+1 tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/main.m+32 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Accessors.swift+255 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/DecimalNumber.swift+236 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Decoder.swift+294 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Encoder.swift+167 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSON.swift+170 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSONError.swift+1619 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSONObject.swift+215 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/ObjectiveC.swift+233 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Parser.swift+674 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/bin/test_PMJSON tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.pbxproj+296 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_PMJSON.xcscheme+97 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON/main.swift+46 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Accessors.swift+255 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/DecimalNumber.swift+236 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Decoder.swift+502 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Encoder.swift+215 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSON.swift+170 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSONError.swift+1619 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSONObject.swift+215 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/ObjectiveC.swift+331 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Parser.swift+745 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/bin/test_PMJSON tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.pbxproj+296 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_PMJSON.xcscheme+97 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON/main.swift+46 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4.h+35 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Parser.h+248 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Parser.m+287 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParser.h+131 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParser.m+317 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParserState.h+82 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParserState.m+355 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamTokeniser.h+40 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamTokeniser.m+395 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriter.h+210 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriter.m+358 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriterState.h+69 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriterState.m+147 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Writer.h+103 tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Writer.m+102 tests/JSONTestSuite/parsers/test_SBJSON/bin/test_SBJSON tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.pbxproj+290 tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist+5 tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_SBJSON.xcscheme+91 tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON/main.m+38 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.pbxproj+361 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/xcshareddata/STJSON.xcscmblueprint+30 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/STJSON.xcscheme+91 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/STJSONTests.xcscheme+56 tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+32 tests/JSONTestSuite/parsers/test_STJSON/STJSON/STJSONParser.swift+663 tests/JSONTestSuite/parsers/test_STJSON/STJSON/main.swift+47 tests/JSONTestSuite/parsers/test_STJSON/STJSONTests/Info.plist+22 tests/JSONTestSuite/parsers/test_STJSON/STJSONTests/STJSONTests.swift+92 tests/JSONTestSuite/parsers/test_STJSON/bin/STJSON tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Info.plist+563 tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/MacOS/Squeak tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/English.lproj/Localizable.strings+9 tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/English.lproj/MainMenu.nib tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/Squeak.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakChanges.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakGeneric.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakImage.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakPlugin.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakProject.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakScript.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakSources.icns tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak5.1-16549-32bit.image tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/test_JSON.st+9 tests/JSONTestSuite/parsers/test_TouchJSON/bin/test_TouchJSON tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.pbxproj+262 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_TouchJSON.xcscheme+97 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/CJSONDeserializer.h+96 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/CJSONDeserializer.m+1240 tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/main.m+25 tests/JSONTestSuite/parsers/test_cJSON/bin/test-cJSON tests/JSONTestSuite/parsers/test_cJSON/cJSON.c+754 tests/JSONTestSuite/parsers/test_cJSON/cJSON.h+153 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.pbxproj+257 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist+5 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-cJSON.xcscheme+91 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_cJSON/test-cJSON/main.c+69 tests/JSONTestSuite/parsers/test_ccan_json/bin/test_ccan tests/JSONTestSuite/parsers/test_ccan_json/json/_test/common.h+18 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_10.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_101.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_11.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_12.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_125.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_127.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_13.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_136.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_137.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_139.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_14.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_140.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_145.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_147.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_149.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_15.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_150.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_151.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_153.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_154.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_155.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_156.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_157.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_158.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_159.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_16.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_160.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_161.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_162.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_163.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_164.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_165.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_169.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_17.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_171.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_172.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_173.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_175.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_176.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_177.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_178.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_179.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_18.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_180.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_181.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_183.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_184.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_185.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_186.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_187.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_188.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_189.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_19.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_190.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_191.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_192.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_193.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_194.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_195.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_197.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_198.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_199.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_2.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_20.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_200.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_201.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_202.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_203.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_204.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_205.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_206.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_207.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_208.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_209.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_21.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_210.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_211.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_212.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_213.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_214.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_216.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_217.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_218.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_219.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_22.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_220.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_221.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_222.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_223.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_23.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_24.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_25.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_26.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_27.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_28.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_29.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_3.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_30.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_31.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_32.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_33.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_34.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_35.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_36.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_37.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_4.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_40.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_44.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_46.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_5.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_54.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_55.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_59.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_6.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_63.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_64.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_66.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_69.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_7.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_77.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_78.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_79.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_8.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_80.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_81.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_82.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_83.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_85.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_86.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_87.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_9.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_91.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_100.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_102.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_103.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_104.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_105.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_106.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_107.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_108.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_109.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_110.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_111.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_112.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_113.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_114.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_115.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_116.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_117.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_118.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_119.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_120.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_121.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_122.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_123.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_124.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_126.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_128.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_129.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_130.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_131.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_132.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_133.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_134.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_135.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_138.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_141.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_142.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_143.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_144.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_146.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_148.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_152.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_166.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_167.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_168.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_170.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_174.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_182.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_196.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_215.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_38.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_39.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_41.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_42.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_43.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_45.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_47.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_48.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_49.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_50.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_51.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_52.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_53.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_56.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_57.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_58.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_60.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_61.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_62.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_65.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_67.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_68.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_70.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_71.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_72.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_73.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_74.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_75.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_76.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_84.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_88.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_89.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_90.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_92.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_93.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_94.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_95.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_96.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_97.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_98.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_99.json+1 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-construction.c+191 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-decode-encode.c+77 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-stringify.c+108 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-validate.c+49 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/test-strings+224 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/test-strings-reencoded+90 tests/JSONTestSuite/parsers/test_ccan_json/json/_test/x.py+21 tests/JSONTestSuite/parsers/test_ccan_json/json/json.c+1381 tests/JSONTestSuite/parsers/test_ccan_json/json/json.h+117 tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.pbxproj+262 tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_ccan.xcscheme+91 tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan/main.c+44 tests/JSONTestSuite/parsers/test_dkjson.lua+25 tests/JSONTestSuite/parsers/test_go/test_json tests/JSONTestSuite/parsers/test_go/test_json.go+30 tests/JSONTestSuite/parsers/test_haskell-aeson/.gitignore+1 tests/JSONTestSuite/parsers/test_haskell-aeson/package.yaml+12 tests/JSONTestSuite/parsers/test_haskell-aeson/src/Main.hs+29 tests/JSONTestSuite/parsers/test_haskell-aeson/stack.yaml+1 tests/JSONTestSuite/parsers/test_haskell-aeson/testaeson+8 tests/JSONTestSuite/parsers/test_haskell-aeson/testaeson.cabal+19 tests/JSONTestSuite/parsers/test_jansson/bin/test_jansson tests/JSONTestSuite/parsers/test_jansson/dump.c+467 tests/JSONTestSuite/parsers/test_jansson/error.c+63 tests/JSONTestSuite/parsers/test_jansson/hashtable.c+356 tests/JSONTestSuite/parsers/test_jansson/hashtable.h+184 tests/JSONTestSuite/parsers/test_jansson/hashtable_seed.c+277 tests/JSONTestSuite/parsers/test_jansson/jansson.h+298 tests/JSONTestSuite/parsers/test_jansson/jansson_config.h+43 tests/JSONTestSuite/parsers/test_jansson/jansson_private.h+109 tests/JSONTestSuite/parsers/test_jansson/load.c+1110 tests/JSONTestSuite/parsers/test_jansson/lookup3.h+381 tests/JSONTestSuite/parsers/test_jansson/memory.c+69 tests/JSONTestSuite/parsers/test_jansson/pack_unpack.c+871 tests/JSONTestSuite/parsers/test_jansson/strbuffer.c+111 tests/JSONTestSuite/parsers/test_jansson/strbuffer.h+34 tests/JSONTestSuite/parsers/test_jansson/strconv.c+145 tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.pbxproj+309 tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist+5 tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_jansson.xcscheme+91 tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_jansson/test_jansson/main.c+208 tests/JSONTestSuite/parsers/test_jansson/utf.c+187 tests/JSONTestSuite/parsers/test_jansson/utf.h+27 tests/JSONTestSuite/parsers/test_jansson/value.c+1048 tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/META-INF/MANIFEST.MF+3 tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/README.txt+5 tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.class tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.jar tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.java+40 tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/com.leastfixedpoint.json-1.0.jar tests/JSONTestSuite/parsers/test_java_gson_2_7/META-INF/MANIFEST.MF+3 tests/JSONTestSuite/parsers/test_java_gson_2_7/README.txt+5 tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.class tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.jar tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.java+51 tests/JSONTestSuite/parsers/test_java_gson_2_7/gson-2.7.jar tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/META-INF/MANIFEST.MF+3 tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/README.txt+5 tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.class tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.jar tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.java+48 tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-annotations-2.2.3.jar tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-core-2.8.4.jar tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-databind-2.3.1.jar tests/JSONTestSuite/parsers/test_java_nanojson_1_0/META-INF/MANIFEST.MF+3 tests/JSONTestSuite/parsers/test_java_nanojson_1_0/README.txt+5 tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.class tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.jar tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.java+45 tests/JSONTestSuite/parsers/test_java_nanojson_1_0/nanojson-1.0.jar tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/META-INF/MANIFEST.MF+3 tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/README.txt+3 tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.class tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.jar tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.java+43 tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/json-simple-1.1.1.jar tests/JSONTestSuite/parsers/test_jsmn/bin/test_jsmn tests/JSONTestSuite/parsers/test_jsmn/jsmn.c+311 tests/JSONTestSuite/parsers/test_jsmn/jsmn.h+76 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.pbxproj+253 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist+23 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_jsmn.xcscheme+101 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn/main.c+50 tests/JSONTestSuite/parsers/test_json-jq.py+34 tests/JSONTestSuite/parsers/test_json-parser/bin/test_json-parser tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.pbxproj+258 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_json-parser.xcscheme+91 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/json.c+1011 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/json.h+283 tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/main.c+66 tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/.gitignore+2 tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/Cargo.toml+7 tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/README+2 tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/src/main.rs+30 tests/JSONTestSuite/parsers/test_json-rust/Cargo.lock+14 tests/JSONTestSuite/parsers/test_json-rust/Cargo.toml+7 tests/JSONTestSuite/parsers/test_json-rust/README+2 tests/JSONTestSuite/parsers/test_json-rust/src/main.rs+42 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.cargo-lock tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/dep-lib-json tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/lib-json+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/lib-json.json+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/bin-tj+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/bin-tj.json+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/dep-bin-tj tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/bin-tj+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/bin-tj.json+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/dep-bin-tj tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/bin-tj+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/bin-tj.json+1 tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/dep-bin-tj tests/JSONTestSuite/parsers/test_json-rust/target/debug/deps/libjson-6bbf4c11dd6d7c25.rlib tests/JSONTestSuite/parsers/test_json-rust/target/debug/tj tests/JSONTestSuite/parsers/test_json-rust/target/debug/tj.dSYM/Contents/Info.plist+20 tests/JSONTestSuite/parsers/test_json-rust/target/debug/tj.dSYM/Contents/Resources/DWARF/tj tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/Cargo.lock+14 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/Cargo.toml+7 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/README+2 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/src/main.rs+32 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.cargo-lock tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/bin-rj+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/bin-rj.json+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/dep-bin-rj tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/bin-rj+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/bin-rj.json+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/dep-bin-rj tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/dep-lib-rustc-serialize tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/lib-rustc-serialize+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/lib-rustc-serialize.json+1 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/deps/librustc_serialize-3561541d79c18212.rlib tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rj tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rj.dSYM/Contents/Info.plist+20 tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rj.dSYM/Contents/Resources/DWARF/rj tests/JSONTestSuite/parsers/test_json.cr+19 tests/JSONTestSuite/parsers/test_json.js+13 tests/JSONTestSuite/parsers/test_json.php+21 tests/JSONTestSuite/parsers/test_json.pl+32 tests/JSONTestSuite/parsers/test_json.py+39 tests/JSONTestSuite/parsers/test_json.rb+23 tests/JSONTestSuite/parsers/test_jsonChecker/bin/jsonChecker tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/JSON_checker.c+400 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/JSON_checker.h+13 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.pbxproj+253 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/jsonChecker.xcscheme+91 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker/main.c+53 tests/JSONTestSuite/parsers/test_jsonChecker2/FSM.rtf+103 tests/JSONTestSuite/parsers/test_jsonChecker2/bin/jsonChecker2 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/JSON_checker.c+402 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/JSON_checker.h+13 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker/main.c+53 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.pbxproj+253 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.xcworkspace/contents.xcworkspacedata+7 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstate tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/jsonChecker.xcscheme+97 tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plist+22 tests/JSONTestSuite/parsers/test_json_re.rb+33 tests/JSONTestSuite/parsers/test_json_xs.pl+28 tests/JSONTestSuite/parsers/test_jsonlite.r+7 tests/JSONTestSuite/parsers/test_oj_compat.rb+25 tests/JSONTestSuite/parsers/test_oj_strict.rb+25 tests/JSONTestSuite/parsers/test_qt/build.sh+4 tests/JSONTestSuite/parsers/test_qt/main.cpp+25 tests/JSONTestSuite/parsers/test_qt/test_qt.pro+12 tests/JSONTestSuite/parsers/test_rjson.r+7 tests/JSONTestSuite/parsers/test_yajl.rb+24 tests/JSONTestSuite/results/logs.txt+2048 tests/JSONTestSuite/results/parsing.html+2816 tests/JSONTestSuite/results/parsing_pruned.html+2661 tests/JSONTestSuite/results/pruned_results.png tests/JSONTestSuite/results/style.css+89 tests/JSONTestSuite/results/transform.html+1492 tests/JSONTestSuite/run_tests.py+673 tests/JSONTestSuite/test_parsing/i_object_key_lone_2nd_surrogate.json+1 tests/JSONTestSuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.json+1 tests/JSONTestSuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json+1 tests/JSONTestSuite/test_parsing/i_string_UTF-16LE_with_BOM.json tests/JSONTestSuite/test_parsing/i_string_UTF-8_invalid_sequence.json+1 tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json+1 tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogate_pair.json+1 tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogates_escape_valid.json+1 tests/JSONTestSuite/test_parsing/i_string_invalid_lonely_surrogate.json+1 tests/JSONTestSuite/test_parsing/i_string_invalid_surrogate.json+1 tests/JSONTestSuite/test_parsing/i_string_inverted_surrogates_U+1D11E.json+1 tests/JSONTestSuite/test_parsing/i_string_lone_second_surrogate.json+1 tests/JSONTestSuite/test_parsing/i_string_not_in_unicode_range.json+1 tests/JSONTestSuite/test_parsing/i_string_truncated-utf-8.json+1 tests/JSONTestSuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.json+1 tests/JSONTestSuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.json+1 tests/JSONTestSuite/test_parsing/i_string_unicode_U+FDD0_nonchar.json+1 tests/JSONTestSuite/test_parsing/i_string_unicode_U+FFFE_nonchar.json+1 tests/JSONTestSuite/test_parsing/i_structure_500_nested_arrays.json+1 tests/JSONTestSuite/test_parsing/i_structure_UTF-8_BOM_empty_object.json+1 tests/JSONTestSuite/test_parsing/n_array_1_true_without_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_a_invalid_utf8.json+1 tests/JSONTestSuite/test_parsing/n_array_colon_instead_of_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_comma_after_close.json+1 tests/JSONTestSuite/test_parsing/n_array_comma_and_number.json+1 tests/JSONTestSuite/test_parsing/n_array_double_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_double_extra_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_extra_close.json+1 tests/JSONTestSuite/test_parsing/n_array_extra_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_incomplete.json+1 tests/JSONTestSuite/test_parsing/n_array_incomplete_invalid_value.json+1 tests/JSONTestSuite/test_parsing/n_array_inner_array_no_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_invalid_utf8.json+1 tests/JSONTestSuite/test_parsing/n_array_items_separated_by_semicolon.json+1 tests/JSONTestSuite/test_parsing/n_array_just_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_just_minus.json+1 tests/JSONTestSuite/test_parsing/n_array_missing_value.json+1 tests/JSONTestSuite/test_parsing/n_array_newlines_unclosed.json+3 tests/JSONTestSuite/test_parsing/n_array_number_and_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_number_and_several_commas.json+1 tests/JSONTestSuite/test_parsing/n_array_spaces_vertical_tab_formfeed.json+1 tests/JSONTestSuite/test_parsing/n_array_star_inside.json+1 tests/JSONTestSuite/test_parsing/n_array_unclosed.json+1 tests/JSONTestSuite/test_parsing/n_array_unclosed_trailing_comma.json+1 tests/JSONTestSuite/test_parsing/n_array_unclosed_with_new_lines.json+3 tests/JSONTestSuite/test_parsing/n_array_unclosed_with_object_inside.json+1 tests/JSONTestSuite/test_parsing/n_incomplete_false.json+1 tests/JSONTestSuite/test_parsing/n_incomplete_null.json+1 tests/JSONTestSuite/test_parsing/n_incomplete_true.json+1 tests/JSONTestSuite/test_parsing/n_number_++.json+1 tests/JSONTestSuite/test_parsing/n_number_+1.json+1 tests/JSONTestSuite/test_parsing/n_number_+Inf.json+1 tests/JSONTestSuite/test_parsing/n_number_-01.json+1 tests/JSONTestSuite/test_parsing/n_number_-1.0..json+1 tests/JSONTestSuite/test_parsing/n_number_-2..json+1 tests/JSONTestSuite/test_parsing/n_number_-NaN.json+1 tests/JSONTestSuite/test_parsing/n_number_.-1.json+1 tests/JSONTestSuite/test_parsing/n_number_.2e-3.json+1 tests/JSONTestSuite/test_parsing/n_number_0.1.2.json+1 tests/JSONTestSuite/test_parsing/n_number_0.3e+.json+1 tests/JSONTestSuite/test_parsing/n_number_0.3e.json+1 tests/JSONTestSuite/test_parsing/n_number_0.e1.json+1 tests/JSONTestSuite/test_parsing/n_number_0_capital_E+.json+1 tests/JSONTestSuite/test_parsing/n_number_0_capital_E.json+1 tests/JSONTestSuite/test_parsing/n_number_0e+.json+1 tests/JSONTestSuite/test_parsing/n_number_0e.json+1 tests/JSONTestSuite/test_parsing/n_number_1.0e+.json+1 tests/JSONTestSuite/test_parsing/n_number_1.0e-.json+1 tests/JSONTestSuite/test_parsing/n_number_1.0e.json+1 tests/JSONTestSuite/test_parsing/n_number_1_000.json+1 tests/JSONTestSuite/test_parsing/n_number_1eE2.json+1 tests/JSONTestSuite/test_parsing/n_number_2.e+3.json+1 tests/JSONTestSuite/test_parsing/n_number_2.e-3.json+1 tests/JSONTestSuite/test_parsing/n_number_2.e3.json+1 tests/JSONTestSuite/test_parsing/n_number_9.e+.json+1 tests/JSONTestSuite/test_parsing/n_number_Inf.json+1 tests/JSONTestSuite/test_parsing/n_number_NaN.json+1 tests/JSONTestSuite/test_parsing/n_number_U+FF11_fullwidth_digit_one.json+1 tests/JSONTestSuite/test_parsing/n_number_expression.json+1 tests/JSONTestSuite/test_parsing/n_number_hex_1_digit.json+1 tests/JSONTestSuite/test_parsing/n_number_hex_2_digits.json+1 tests/JSONTestSuite/test_parsing/n_number_infinity.json+1 tests/JSONTestSuite/test_parsing/n_number_invalid+-.json+1 tests/JSONTestSuite/test_parsing/n_number_invalid-negative-real.json+1 tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-bigger-int.json+1 tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-exponent.json+1 tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-int.json+1 tests/JSONTestSuite/test_parsing/n_number_minus_infinity.json+1 tests/JSONTestSuite/test_parsing/n_number_minus_sign_with_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_number_minus_space_1.json+1 tests/JSONTestSuite/test_parsing/n_number_neg_int_starting_with_zero.json+1 tests/JSONTestSuite/test_parsing/n_number_neg_real_without_int_part.json+1 tests/JSONTestSuite/test_parsing/n_number_neg_with_garbage_at_end.json+1 tests/JSONTestSuite/test_parsing/n_number_real_garbage_after_e.json+1 tests/JSONTestSuite/test_parsing/n_number_real_with_invalid_utf8_after_e.json+1 tests/JSONTestSuite/test_parsing/n_number_real_without_fractional_part.json+1 tests/JSONTestSuite/test_parsing/n_number_starting_with_dot.json+1 tests/JSONTestSuite/test_parsing/n_number_then_00.json tests/JSONTestSuite/test_parsing/n_number_with_alpha.json+1 tests/JSONTestSuite/test_parsing/n_number_with_alpha_char.json+1 tests/JSONTestSuite/test_parsing/n_number_with_leading_zero.json+1 tests/JSONTestSuite/test_parsing/n_object_bad_value.json+1 tests/JSONTestSuite/test_parsing/n_object_bracket_key.json+1 tests/JSONTestSuite/test_parsing/n_object_comma_instead_of_colon.json+1 tests/JSONTestSuite/test_parsing/n_object_double_colon.json+1 tests/JSONTestSuite/test_parsing/n_object_emoji.json+1 tests/JSONTestSuite/test_parsing/n_object_garbage_at_end.json+1 tests/JSONTestSuite/test_parsing/n_object_key_with_single_quotes.json+1 tests/JSONTestSuite/test_parsing/n_object_missing_colon.json+1 tests/JSONTestSuite/test_parsing/n_object_missing_key.json+1 tests/JSONTestSuite/test_parsing/n_object_missing_semicolon.json+1 tests/JSONTestSuite/test_parsing/n_object_missing_value.json+1 tests/JSONTestSuite/test_parsing/n_object_no-colon.json+1 tests/JSONTestSuite/test_parsing/n_object_non_string_key.json+1 tests/JSONTestSuite/test_parsing/n_object_non_string_key_but_huge_number_instead.json+1 tests/JSONTestSuite/test_parsing/n_object_pi_in_key_and_trailing_comma.json+1 tests/JSONTestSuite/test_parsing/n_object_repeated_null_null.json+1 tests/JSONTestSuite/test_parsing/n_object_several_trailing_commas.json+1 tests/JSONTestSuite/test_parsing/n_object_single_quote.json+1 tests/JSONTestSuite/test_parsing/n_object_trailing_comma.json+1 tests/JSONTestSuite/test_parsing/n_object_trailing_comment.json+1 tests/JSONTestSuite/test_parsing/n_object_trailing_comment_open.json+1 tests/JSONTestSuite/test_parsing/n_object_trailing_comment_slash_open.json+1 tests/JSONTestSuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.json+1 tests/JSONTestSuite/test_parsing/n_object_two_commas_in_a_row.json+1 tests/JSONTestSuite/test_parsing/n_object_unquoted_key.json+1 tests/JSONTestSuite/test_parsing/n_object_unterminated-value.json+1 tests/JSONTestSuite/test_parsing/n_object_with_single_string.json+1 tests/JSONTestSuite/test_parsing/n_object_with_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_single_space.json+1 tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u.json+1 tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u1.json+1 tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u1x.json+1 tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape.json+1 tests/JSONTestSuite/test_parsing/n_string_UTF8_surrogate_U+D800.json+1 tests/JSONTestSuite/test_parsing/n_string_accentuated_char_no_quotes.json+1 tests/JSONTestSuite/test_parsing/n_string_backslash_00.json tests/JSONTestSuite/test_parsing/n_string_escape_x.json+1 tests/JSONTestSuite/test_parsing/n_string_escaped_backslash_bad.json+1 tests/JSONTestSuite/test_parsing/n_string_escaped_ctrl_char_tab.json+1 tests/JSONTestSuite/test_parsing/n_string_escaped_emoji.json+1 tests/JSONTestSuite/test_parsing/n_string_incomplete_escape.json+1 tests/JSONTestSuite/test_parsing/n_string_incomplete_escaped_character.json+1 tests/JSONTestSuite/test_parsing/n_string_incomplete_surrogate.json+1 tests/JSONTestSuite/test_parsing/n_string_incomplete_surrogate_escape_invalid.json+1 tests/JSONTestSuite/test_parsing/n_string_invalid-utf-8-in-escape.json+1 tests/JSONTestSuite/test_parsing/n_string_invalid_backslash_esc.json+1 tests/JSONTestSuite/test_parsing/n_string_invalid_unicode_escape.json+1 tests/JSONTestSuite/test_parsing/n_string_invalid_utf-8.json+1 tests/JSONTestSuite/test_parsing/n_string_invalid_utf8_after_escape.json+1 tests/JSONTestSuite/test_parsing/n_string_iso_latin_1.json+1 tests/JSONTestSuite/test_parsing/n_string_leading_uescaped_thinspace.json+1 tests/JSONTestSuite/test_parsing/n_string_lone_utf8_continuation_byte.json+1 tests/JSONTestSuite/test_parsing/n_string_no_quotes_with_bad_escape.json+1 tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_2_bytes.json+1 tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_6_bytes.json+1 tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_6_bytes_null.json+1 tests/JSONTestSuite/test_parsing/n_string_single_doublequote.json+1 tests/JSONTestSuite/test_parsing/n_string_single_quote.json+1 tests/JSONTestSuite/test_parsing/n_string_single_string_no_double_quotes.json+1 tests/JSONTestSuite/test_parsing/n_string_start_escape_unclosed.json+1 tests/JSONTestSuite/test_parsing/n_string_unescaped_crtl_char.json tests/JSONTestSuite/test_parsing/n_string_unescaped_newline.json+2 tests/JSONTestSuite/test_parsing/n_string_unescaped_tab.json+1 tests/JSONTestSuite/test_parsing/n_string_unicode_CapitalU.json+1 tests/JSONTestSuite/test_parsing/n_string_with_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_structure_100000_opening_arrays.json+1 tests/JSONTestSuite/test_parsing/n_structure_<.>.json+1 tests/JSONTestSuite/test_parsing/n_structure_<null>.json+1 tests/JSONTestSuite/test_parsing/n_structure_U+2060_word_joined.json+1 tests/JSONTestSuite/test_parsing/n_structure_UTF8_BOM_no_data.json+1 tests/JSONTestSuite/test_parsing/n_structure_array_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_structure_array_with_extra_array_close.json+1 tests/JSONTestSuite/test_parsing/n_structure_array_with_unclosed_string.json+1 tests/JSONTestSuite/test_parsing/n_structure_ascii-unicode-identifier.json+1 tests/JSONTestSuite/test_parsing/n_structure_capitalized_True.json+1 tests/JSONTestSuite/test_parsing/n_structure_close_unopened_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_comma_instead_of_closing_brace.json+1 tests/JSONTestSuite/test_parsing/n_structure_double_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_end_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_incomplete_UTF8_BOM.json+1 tests/JSONTestSuite/test_parsing/n_structure_lone-invalid-utf-8.json+1 tests/JSONTestSuite/test_parsing/n_structure_lone-open-bracket.json+1 tests/JSONTestSuite/test_parsing/n_structure_no_data.json tests/JSONTestSuite/test_parsing/n_structure_null-byte-outside-string.json tests/JSONTestSuite/test_parsing/n_structure_number_with_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_structure_object_followed_by_closing_object.json+1 tests/JSONTestSuite/test_parsing/n_structure_object_unclosed_no_value.json+1 tests/JSONTestSuite/test_parsing/n_structure_object_with_comment.json+1 tests/JSONTestSuite/test_parsing/n_structure_object_with_trailing_garbage.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_apostrophe.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_comma.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_object.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_open_object.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_open_string.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_array_string.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object_close_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object_comma.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object_open_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object_open_string.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_object_string_with_apostrophes.json+1 tests/JSONTestSuite/test_parsing/n_structure_open_open.json+1 tests/JSONTestSuite/test_parsing/n_structure_single_point.json+1 tests/JSONTestSuite/test_parsing/n_structure_single_star.json+1 tests/JSONTestSuite/test_parsing/n_structure_trailing_#.json+1 tests/JSONTestSuite/test_parsing/n_structure_uescaped_LF_before_string.json+1 tests/JSONTestSuite/test_parsing/n_structure_unclosed_array.json+1 tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_partial_null.json+1 tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_unfinished_false.json+1 tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_unfinished_true.json+1 tests/JSONTestSuite/test_parsing/n_structure_unclosed_object.json+1 tests/JSONTestSuite/test_parsing/n_structure_unicode-identifier.json+1 tests/JSONTestSuite/test_parsing/n_structure_whitespace_U+2060_word_joiner.json+1 tests/JSONTestSuite/test_parsing/n_structure_whitespace_formfeed.json+1 tests/JSONTestSuite/test_parsing/y_array_arraysWithSpaces.json+1 tests/JSONTestSuite/test_parsing/y_array_empty-string.json+1 tests/JSONTestSuite/test_parsing/y_array_empty.json+1 tests/JSONTestSuite/test_parsing/y_array_ending_with_newline.json+1 tests/JSONTestSuite/test_parsing/y_array_false.json+1 tests/JSONTestSuite/test_parsing/y_array_heterogeneous.json+1 tests/JSONTestSuite/test_parsing/y_array_null.json+1 tests/JSONTestSuite/test_parsing/y_array_with_1_and_newline.json+2 tests/JSONTestSuite/test_parsing/y_array_with_leading_space.json+1 tests/JSONTestSuite/test_parsing/y_array_with_several_null.json+1 tests/JSONTestSuite/test_parsing/y_array_with_trailing_space.json+1 tests/JSONTestSuite/test_parsing/y_number.json+1 tests/JSONTestSuite/test_parsing/y_number_0e+1.json+1 tests/JSONTestSuite/test_parsing/y_number_0e1.json+1 tests/JSONTestSuite/test_parsing/y_number_after_space.json+1 tests/JSONTestSuite/test_parsing/y_number_double_close_to_zero.json+1 tests/JSONTestSuite/test_parsing/y_number_double_huge_neg_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_huge_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_int_with_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_minus_zero.json+1 tests/JSONTestSuite/test_parsing/y_number_neg_int_huge_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_negative_int.json+1 tests/JSONTestSuite/test_parsing/y_number_negative_one.json+1 tests/JSONTestSuite/test_parsing/y_number_negative_zero.json+1 tests/JSONTestSuite/test_parsing/y_number_pos_double_huge_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_real_capital_e.json+1 tests/JSONTestSuite/test_parsing/y_number_real_capital_e_neg_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_real_capital_e_pos_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_real_exponent.json+1 tests/JSONTestSuite/test_parsing/y_number_real_fraction_exponent.json+1 tests/JSONTestSuite/test_parsing/y_number_real_neg_exp.json+1 tests/JSONTestSuite/test_parsing/y_number_real_neg_overflow.json+1 tests/JSONTestSuite/test_parsing/y_number_real_pos_exponent.json+1 tests/JSONTestSuite/test_parsing/y_number_real_pos_overflow.json+1 tests/JSONTestSuite/test_parsing/y_number_real_underflow.json+1 tests/JSONTestSuite/test_parsing/y_number_simple_int.json+1 tests/JSONTestSuite/test_parsing/y_number_simple_real.json+1 tests/JSONTestSuite/test_parsing/y_number_too_big_neg_int.json+1 tests/JSONTestSuite/test_parsing/y_number_too_big_pos_int.json+1 tests/JSONTestSuite/test_parsing/y_number_very_big_negative_int.json+1 tests/JSONTestSuite/test_parsing/y_object.json+1 tests/JSONTestSuite/test_parsing/y_object_basic.json+1 tests/JSONTestSuite/test_parsing/y_object_duplicated_key.json+1 tests/JSONTestSuite/test_parsing/y_object_duplicated_key_and_value.json+1 tests/JSONTestSuite/test_parsing/y_object_empty.json+1 tests/JSONTestSuite/test_parsing/y_object_empty_key.json+1 tests/JSONTestSuite/test_parsing/y_object_escaped_null_in_key.json+1 tests/JSONTestSuite/test_parsing/y_object_extreme_numbers.json+1 tests/JSONTestSuite/test_parsing/y_object_long_strings.json+1 tests/JSONTestSuite/test_parsing/y_object_simple.json+1 tests/JSONTestSuite/test_parsing/y_object_string_unicode.json+1 tests/JSONTestSuite/test_parsing/y_object_with_newlines.json+3 tests/JSONTestSuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json+1 tests/JSONTestSuite/test_parsing/y_string_accepted_surrogate_pair.json+1 tests/JSONTestSuite/test_parsing/y_string_accepted_surrogate_pairs.json+1 tests/JSONTestSuite/test_parsing/y_string_allowed_escapes.json+1 tests/JSONTestSuite/test_parsing/y_string_backslash_and_u_escaped_zero.json+1 tests/JSONTestSuite/test_parsing/y_string_backslash_doublequotes.json+1 tests/JSONTestSuite/test_parsing/y_string_comments.json+1 tests/JSONTestSuite/test_parsing/y_string_double_escape_a.json+1 tests/JSONTestSuite/test_parsing/y_string_double_escape_n.json+1 tests/JSONTestSuite/test_parsing/y_string_escaped_control_character.json+1 tests/JSONTestSuite/test_parsing/y_string_escaped_noncharacter.json+1 tests/JSONTestSuite/test_parsing/y_string_in_array.json+1 tests/JSONTestSuite/test_parsing/y_string_in_array_with_leading_space.json+1 tests/JSONTestSuite/test_parsing/y_string_last_surrogates_1_and_2.json+1 tests/JSONTestSuite/test_parsing/y_string_newline_uescaped.json+1 tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json+1 tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json+1 tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json+1 tests/JSONTestSuite/test_parsing/y_string_null_escape.json+1 tests/JSONTestSuite/test_parsing/y_string_one-byte-utf-8.json+1 tests/JSONTestSuite/test_parsing/y_string_pi.json+1 tests/JSONTestSuite/test_parsing/y_string_simple_ascii.json+1 tests/JSONTestSuite/test_parsing/y_string_space.json+1 tests/JSONTestSuite/test_parsing/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json+1 tests/JSONTestSuite/test_parsing/y_string_three-byte-utf-8.json+1 tests/JSONTestSuite/test_parsing/y_string_two-byte-utf-8.json+1 tests/JSONTestSuite/test_parsing/y_string_u+2028_line_sep.json+1 tests/JSONTestSuite/test_parsing/y_string_u+2029_par_sep.json+1 tests/JSONTestSuite/test_parsing/y_string_uEscape.json+1 tests/JSONTestSuite/test_parsing/y_string_unescaped_char_delete.json+1 tests/JSONTestSuite/test_parsing/y_string_unicode.json+1 tests/JSONTestSuite/test_parsing/y_string_unicodeEscapedBackslash.json+1 tests/JSONTestSuite/test_parsing/y_string_unicode_2.json+1 tests/JSONTestSuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json+1 tests/JSONTestSuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json+1 tests/JSONTestSuite/test_parsing/y_string_unicode_escaped_double_quote.json+1 tests/JSONTestSuite/test_parsing/y_string_utf16BE_no_BOM.json tests/JSONTestSuite/test_parsing/y_string_utf16LE_no_BOM.json tests/JSONTestSuite/test_parsing/y_string_utf8.json+1 tests/JSONTestSuite/test_parsing/y_string_with_del_character.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_false.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_int.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_negative_real.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_null.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_string.json+1 tests/JSONTestSuite/test_parsing/y_structure_lonely_true.json+1 tests/JSONTestSuite/test_parsing/y_structure_string_empty.json+1 tests/JSONTestSuite/test_parsing/y_structure_trailing_newline.json+1 tests/JSONTestSuite/test_parsing/y_structure_true_in_array.json+1 tests/JSONTestSuite/test_parsing/y_structure_whitespace_array.json+1 tests/JSONTestSuite/test_transform/number_1.0.json+1 tests/JSONTestSuite/test_transform/number_1.000000000000000005.json+1 tests/JSONTestSuite/test_transform/number_1000000000000000.json+1 tests/JSONTestSuite/test_transform/number_10000000000000000999.json+1 tests/JSONTestSuite/test_transform/number_1e-999.json+1 tests/JSONTestSuite/test_transform/number_1e6.json+1 tests/JSONTestSuite/test_transform/object_key_nfc_nfd.json+1 tests/JSONTestSuite/test_transform/object_key_nfd_nfc.json+1 tests/JSONTestSuite/test_transform/object_same_key_different_values.json+1 tests/JSONTestSuite/test_transform/object_same_key_same_value.json+1 tests/JSONTestSuite/test_transform/object_same_key_unclear_values.json+1 tests/JSONTestSuite/test_transform/string_1_escaped_invalid_codepoint.json+1 tests/JSONTestSuite/test_transform/string_1_invalid_codepoint.json+1 tests/JSONTestSuite/test_transform/string_2_escaped_invalid_codepoints.json+1 tests/JSONTestSuite/test_transform/string_2_invalid_codepoints.json+1 tests/JSONTestSuite/test_transform/string_3_escaped_invalid_codepoints.json+1 tests/JSONTestSuite/test_transform/string_3_invalid_codepoints.json+1 tests/JSONTestSuite/test_transform/string_with_escaped_NULL.json+1
tests/JSONTestSuite/LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2016 Nicolas Seriot
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
tests/JSONTestSuite/README.mdnew file+50
@@ -0,0 +1,50 @@
1+# JSON Parsing Test Suite
2+A comprehensive test suite for RFC 7159 compliant JSON parsers
3+
4+This repository was created as an appendix to the article [Parsing JSON is a Minefield 💣](http://seriot.ch/parsing_json.php).
5+
6+**/parsers/**
7+
8+This directory contains several parsers and tiny wrappers to turn the parsers into JSON validators, by returning a specific value.
9+
10+- `0` the parser did accept the content
11+- `1` the parser did reject the content
12+- `>=1` the process did crash
13+- `timeout` happens after 5 seconds
14+
15+**/test\_parsing/**
16+
17+The name of these files tell if their contents should be accepted or rejected.
18+
19+- `y_` content must be accepted by parsers
20+- `n_` content must be rejected by parsers
21+- `i_` parsers are free to accept or reject content
22+
23+**/test\_transform/**
24+
25+These files contain weird structures and characters that parsers may understand differently, eg:
26+
27+- huge numbers
28+- dictionaries with similar keys
29+- NULL characters
30+- escaped invalid strings
31+
32+These files were used to produce `results/transform.html`.
33+
34+**/run_tests.py**
35+
36+Run all parsers with all files:
37+
38+ $ python3 run_tests.py
39+
40+Run all parsers with a specific file:
41+
42+ $ python3 run_tests.py file.json
43+
44+The script writes logs in `results/logs.txt`.
45+
46+The script then reads `logs.txt` and generates `results/parsing.html`.
47+
48+**/results/**
49+
50+<img src="results/pruned_results.png" alt="JSON Parsing Tests" />
tests/JSONTestSuite/parsers/test-AppleJSONSerialization/bin/test-AppleJSONSerializationnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.pbxprojnew file+260
@@ -0,0 +1,260 @@
1+// !$*UTF8*$!
2+{
3+ archiveVersion = 1;
4+ classes = {
5+ };
6+ objectVersion = 46;
7+ objects = {
8+
9+/* Begin PBXBuildFile section */
10+ 03997F941D70CE0C0001C89F /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03997F931D70CE0C0001C89F /* main.swift */; };
11+/* End PBXBuildFile section */
12+
13+/* Begin PBXCopyFilesBuildPhase section */
14+ 03997F8E1D70CE0C0001C89F /* CopyFiles */ = {
15+ isa = PBXCopyFilesBuildPhase;
16+ buildActionMask = 2147483647;
17+ dstPath = /usr/share/man/man1/;
18+ dstSubfolderSpec = 0;
19+ files = (
20+ );
21+ runOnlyForDeploymentPostprocessing = 1;
22+ };
23+/* End PBXCopyFilesBuildPhase section */
24+
25+/* Begin PBXFileReference section */
26+ 03997F901D70CE0C0001C89F /* test-AppleJSONSerialization */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "test-AppleJSONSerialization"; sourceTree = BUILT_PRODUCTS_DIR; };
27+ 03997F931D70CE0C0001C89F /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
28+/* End PBXFileReference section */
29+
30+/* Begin PBXFrameworksBuildPhase section */
31+ 03997F8D1D70CE0C0001C89F /* Frameworks */ = {
32+ isa = PBXFrameworksBuildPhase;
33+ buildActionMask = 2147483647;
34+ files = (
35+ );
36+ runOnlyForDeploymentPostprocessing = 0;
37+ };
38+/* End PBXFrameworksBuildPhase section */
39+
40+/* Begin PBXGroup section */
41+ 03997F871D70CE0C0001C89F = {
42+ isa = PBXGroup;
43+ children = (
44+ 03997F921D70CE0C0001C89F /* test-AppleJSONSerialization */,
45+ 03997F911D70CE0C0001C89F /* Products */,
46+ );
47+ sourceTree = "<group>";
48+ };
49+ 03997F911D70CE0C0001C89F /* Products */ = {
50+ isa = PBXGroup;
51+ children = (
52+ 03997F901D70CE0C0001C89F /* test-AppleJSONSerialization */,
53+ );
54+ name = Products;
55+ sourceTree = "<group>";
56+ };
57+ 03997F921D70CE0C0001C89F /* test-AppleJSONSerialization */ = {
58+ isa = PBXGroup;
59+ children = (
60+ 03997F931D70CE0C0001C89F /* main.swift */,
61+ );
62+ path = "test-AppleJSONSerialization";
63+ sourceTree = "<group>";
64+ };
65+/* End PBXGroup section */
66+
67+/* Begin PBXNativeTarget section */
68+ 03997F8F1D70CE0C0001C89F /* test-AppleJSONSerialization */ = {
69+ isa = PBXNativeTarget;
70+ buildConfigurationList = 03997F971D70CE0C0001C89F /* Build configuration list for PBXNativeTarget "test-AppleJSONSerialization" */;
71+ buildPhases = (
72+ 03997F8C1D70CE0C0001C89F /* Sources */,
73+ 03997F8D1D70CE0C0001C89F /* Frameworks */,
74+ 03997F8E1D70CE0C0001C89F /* CopyFiles */,
75+ );
76+ buildRules = (
77+ );
78+ dependencies = (
79+ );
80+ name = "test-AppleJSONSerialization";
81+ productName = "test-AppleJSONSerialization";
82+ productReference = 03997F901D70CE0C0001C89F /* test-AppleJSONSerialization */;
83+ productType = "com.apple.product-type.tool";
84+ };
85+/* End PBXNativeTarget section */
86+
87+/* Begin PBXProject section */
88+ 03997F881D70CE0C0001C89F /* Project object */ = {
89+ isa = PBXProject;
90+ attributes = {
91+ LastSwiftUpdateCheck = 0800;
92+ LastUpgradeCheck = 0800;
93+ ORGANIZATIONNAME = "Nicolas Seriot";
94+ TargetAttributes = {
95+ 03997F8F1D70CE0C0001C89F = {
96+ CreatedOnToolsVersion = 8.0;
97+ DevelopmentTeam = VBYRKYS73S;
98+ ProvisioningStyle = Automatic;
99+ };
100+ };
101+ };
102+ buildConfigurationList = 03997F8B1D70CE0C0001C89F /* Build configuration list for PBXProject "test-AppleJSONSerialization" */;
103+ compatibilityVersion = "Xcode 3.2";
104+ developmentRegion = English;
105+ hasScannedForEncodings = 0;
106+ knownRegions = (
107+ en,
108+ );
109+ mainGroup = 03997F871D70CE0C0001C89F;
110+ productRefGroup = 03997F911D70CE0C0001C89F /* Products */;
111+ projectDirPath = "";
112+ projectRoot = "";
113+ targets = (
114+ 03997F8F1D70CE0C0001C89F /* test-AppleJSONSerialization */,
115+ );
116+ };
117+/* End PBXProject section */
118+
119+/* Begin PBXSourcesBuildPhase section */
120+ 03997F8C1D70CE0C0001C89F /* Sources */ = {
121+ isa = PBXSourcesBuildPhase;
122+ buildActionMask = 2147483647;
123+ files = (
124+ 03997F941D70CE0C0001C89F /* main.swift in Sources */,
125+ );
126+ runOnlyForDeploymentPostprocessing = 0;
127+ };
128+/* End PBXSourcesBuildPhase section */
129+
130+/* Begin XCBuildConfiguration section */
131+ 03997F951D70CE0C0001C89F /* Debug */ = {
132+ isa = XCBuildConfiguration;
133+ buildSettings = {
134+ ALWAYS_SEARCH_USER_PATHS = NO;
135+ CLANG_ANALYZER_NONNULL = YES;
136+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
137+ CLANG_CXX_LIBRARY = "libc++";
138+ CLANG_ENABLE_MODULES = YES;
139+ CLANG_ENABLE_OBJC_ARC = YES;
140+ CLANG_WARN_BOOL_CONVERSION = YES;
141+ CLANG_WARN_CONSTANT_CONVERSION = YES;
142+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
143+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
144+ CLANG_WARN_EMPTY_BODY = YES;
145+ CLANG_WARN_ENUM_CONVERSION = YES;
146+ CLANG_WARN_INFINITE_RECURSION = YES;
147+ CLANG_WARN_INT_CONVERSION = YES;
148+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
149+ CLANG_WARN_SUSPICIOUS_MOVES = YES;
150+ CLANG_WARN_UNREACHABLE_CODE = YES;
151+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
152+ CODE_SIGN_IDENTITY = "-";
153+ COPY_PHASE_STRIP = NO;
154+ DEBUG_INFORMATION_FORMAT = dwarf;
155+ ENABLE_STRICT_OBJC_MSGSEND = YES;
156+ ENABLE_TESTABILITY = YES;
157+ GCC_C_LANGUAGE_STANDARD = gnu99;
158+ GCC_DYNAMIC_NO_PIC = NO;
159+ GCC_NO_COMMON_BLOCKS = YES;
160+ GCC_OPTIMIZATION_LEVEL = 0;
161+ GCC_PREPROCESSOR_DEFINITIONS = (
162+ "DEBUG=1",
163+ "$(inherited)",
164+ );
165+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
166+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
167+ GCC_WARN_UNDECLARED_SELECTOR = YES;
168+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
169+ GCC_WARN_UNUSED_FUNCTION = YES;
170+ GCC_WARN_UNUSED_VARIABLE = YES;
171+ MACOSX_DEPLOYMENT_TARGET = 10.11;
172+ MTL_ENABLE_DEBUG_INFO = YES;
173+ ONLY_ACTIVE_ARCH = YES;
174+ SDKROOT = macosx;
175+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
176+ };
177+ name = Debug;
178+ };
179+ 03997F961D70CE0C0001C89F /* Release */ = {
180+ isa = XCBuildConfiguration;
181+ buildSettings = {
182+ ALWAYS_SEARCH_USER_PATHS = NO;
183+ CLANG_ANALYZER_NONNULL = YES;
184+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
185+ CLANG_CXX_LIBRARY = "libc++";
186+ CLANG_ENABLE_MODULES = YES;
187+ CLANG_ENABLE_OBJC_ARC = YES;
188+ CLANG_WARN_BOOL_CONVERSION = YES;
189+ CLANG_WARN_CONSTANT_CONVERSION = YES;
190+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
191+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
192+ CLANG_WARN_EMPTY_BODY = YES;
193+ CLANG_WARN_ENUM_CONVERSION = YES;
194+ CLANG_WARN_INFINITE_RECURSION = YES;
195+ CLANG_WARN_INT_CONVERSION = YES;
196+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
197+ CLANG_WARN_SUSPICIOUS_MOVES = YES;
198+ CLANG_WARN_UNREACHABLE_CODE = YES;
199+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
200+ CODE_SIGN_IDENTITY = "-";
201+ COPY_PHASE_STRIP = NO;
202+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
203+ ENABLE_NS_ASSERTIONS = NO;
204+ ENABLE_STRICT_OBJC_MSGSEND = YES;
205+ GCC_C_LANGUAGE_STANDARD = gnu99;
206+ GCC_NO_COMMON_BLOCKS = YES;
207+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
208+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
209+ GCC_WARN_UNDECLARED_SELECTOR = YES;
210+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
211+ GCC_WARN_UNUSED_FUNCTION = YES;
212+ GCC_WARN_UNUSED_VARIABLE = YES;
213+ MACOSX_DEPLOYMENT_TARGET = 10.11;
214+ MTL_ENABLE_DEBUG_INFO = NO;
215+ SDKROOT = macosx;
216+ };
217+ name = Release;
218+ };
219+ 03997F981D70CE0C0001C89F /* Debug */ = {
220+ isa = XCBuildConfiguration;
221+ buildSettings = {
222+ DEVELOPMENT_TEAM = VBYRKYS73S;
223+ PRODUCT_NAME = "$(TARGET_NAME)";
224+ SWIFT_VERSION = 3.0;
225+ };
226+ name = Debug;
227+ };
228+ 03997F991D70CE0C0001C89F /* Release */ = {
229+ isa = XCBuildConfiguration;
230+ buildSettings = {
231+ DEVELOPMENT_TEAM = VBYRKYS73S;
232+ PRODUCT_NAME = "$(TARGET_NAME)";
233+ SWIFT_VERSION = 3.0;
234+ };
235+ name = Release;
236+ };
237+/* End XCBuildConfiguration section */
238+
239+/* Begin XCConfigurationList section */
240+ 03997F8B1D70CE0C0001C89F /* Build configuration list for PBXProject "test-AppleJSONSerialization" */ = {
241+ isa = XCConfigurationList;
242+ buildConfigurations = (
243+ 03997F951D70CE0C0001C89F /* Debug */,
244+ 03997F961D70CE0C0001C89F /* Release */,
245+ );
246+ defaultConfigurationIsVisible = 0;
247+ defaultConfigurationName = Release;
248+ };
249+ 03997F971D70CE0C0001C89F /* Build configuration list for PBXNativeTarget "test-AppleJSONSerialization" */ = {
250+ isa = XCConfigurationList;
251+ buildConfigurations = (
252+ 03997F981D70CE0C0001C89F /* Debug */,
253+ 03997F991D70CE0C0001C89F /* Release */,
254+ );
255+ defaultConfigurationIsVisible = 0;
256+ };
257+/* End XCConfigurationList section */
258+ };
259+ rootObject = 03997F881D70CE0C0001C89F /* Project object */;
260+}
tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Workspace
3+ version = "1.0">
4+ <FileRef
5+ location = "self:test-AppleJSONSerialization.xcodeproj">
6+ </FileRef>
7+</Workspace>
tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-AppleJSONSerialization.xcschemenew file+91
@@ -0,0 +1,91 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Scheme
3+ LastUpgradeVersion = "0800"
4+ version = "1.3">
5+ <BuildAction
6+ parallelizeBuildables = "YES"
7+ buildImplicitDependencies = "YES">
8+ <BuildActionEntries>
9+ <BuildActionEntry
10+ buildForTesting = "YES"
11+ buildForRunning = "YES"
12+ buildForProfiling = "YES"
13+ buildForArchiving = "YES"
14+ buildForAnalyzing = "YES">
15+ <BuildableReference
16+ BuildableIdentifier = "primary"
17+ BlueprintIdentifier = "03997F8F1D70CE0C0001C89F"
18+ BuildableName = "test-AppleJSONSerialization"
19+ BlueprintName = "test-AppleJSONSerialization"
20+ ReferencedContainer = "container:test-AppleJSONSerialization.xcodeproj">
21+ </BuildableReference>
22+ </BuildActionEntry>
23+ </BuildActionEntries>
24+ </BuildAction>
25+ <TestAction
26+ buildConfiguration = "Debug"
27+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+ shouldUseLaunchSchemeArgsEnv = "YES">
30+ <Testables>
31+ </Testables>
32+ <MacroExpansion>
33+ <BuildableReference
34+ BuildableIdentifier = "primary"
35+ BlueprintIdentifier = "03997F8F1D70CE0C0001C89F"
36+ BuildableName = "test-AppleJSONSerialization"
37+ BlueprintName = "test-AppleJSONSerialization"
38+ ReferencedContainer = "container:test-AppleJSONSerialization.xcodeproj">
39+ </BuildableReference>
40+ </MacroExpansion>
41+ <AdditionalOptions>
42+ </AdditionalOptions>
43+ </TestAction>
44+ <LaunchAction
45+ buildConfiguration = "Debug"
46+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48+ launchStyle = "0"
49+ useCustomWorkingDirectory = "NO"
50+ ignoresPersistentStateOnLaunch = "NO"
51+ debugDocumentVersioning = "YES"
52+ debugServiceExtension = "internal"
53+ allowLocationSimulation = "YES">
54+ <BuildableProductRunnable
55+ runnableDebuggingMode = "0">
56+ <BuildableReference
57+ BuildableIdentifier = "primary"
58+ BlueprintIdentifier = "03997F8F1D70CE0C0001C89F"
59+ BuildableName = "test-AppleJSONSerialization"
60+ BlueprintName = "test-AppleJSONSerialization"
61+ ReferencedContainer = "container:test-AppleJSONSerialization.xcodeproj">
62+ </BuildableReference>
63+ </BuildableProductRunnable>
64+ <AdditionalOptions>
65+ </AdditionalOptions>
66+ </LaunchAction>
67+ <ProfileAction
68+ buildConfiguration = "Release"
69+ shouldUseLaunchSchemeArgsEnv = "YES"
70+ savedToolIdentifier = ""
71+ useCustomWorkingDirectory = "NO"
72+ debugDocumentVersioning = "YES">
73+ <BuildableProductRunnable
74+ runnableDebuggingMode = "0">
75+ <BuildableReference
76+ BuildableIdentifier = "primary"
77+ BlueprintIdentifier = "03997F8F1D70CE0C0001C89F"
78+ BuildableName = "test-AppleJSONSerialization"
79+ BlueprintName = "test-AppleJSONSerialization"
80+ ReferencedContainer = "container:test-AppleJSONSerialization.xcodeproj">
81+ </BuildableReference>
82+ </BuildableProductRunnable>
83+ </ProfileAction>
84+ <AnalyzeAction
85+ buildConfiguration = "Debug">
86+ </AnalyzeAction>
87+ <ArchiveAction
88+ buildConfiguration = "Release"
89+ revealArchiveInOrganizer = "YES">
90+ </ArchiveAction>
91+</Scheme>
tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22
@@ -0,0 +1,22 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+<plist version="1.0">
4+<dict>
5+ <key>SchemeUserState</key>
6+ <dict>
7+ <key>test-AppleJSONSerialization.xcscheme</key>
8+ <dict>
9+ <key>orderHint</key>
10+ <integer>0</integer>
11+ </dict>
12+ </dict>
13+ <key>SuppressBuildableAutocreation</key>
14+ <dict>
15+ <key>03997F8F1D70CE0C0001C89F</key>
16+ <dict>
17+ <key>primary</key>
18+ <true/>
19+ </dict>
20+ </dict>
21+</dict>
22+</plist>
tests/JSONTestSuite/parsers/test-AppleJSONSerialization/test-AppleJSONSerialization/main.swiftnew file+34
@@ -0,0 +1,34 @@
1+//
2+// main.swift
3+// test-AppleJSONSerialization
4+//
5+// Created by nst on 26/08/16.
6+// Copyright © 2016 Nicolas Seriot. All rights reserved.
7+//
8+
9+import Foundation
10+
11+func main() {
12+
13+ guard ProcessInfo.processInfo.arguments.count == 2 else {
14+ let url = NSURL(fileURLWithPath: ProcessInfo.processInfo.arguments[0])
15+ guard let programName = url.lastPathComponent else { exit(1) }
16+ print("Usage: ./\(programName) file.json")
17+ exit(1)
18+ }
19+
20+ let path = ProcessInfo.processInfo.arguments[1]
21+ let url = NSURL.fileURL(withPath:path)
22+
23+ do {
24+ let data = try Data(contentsOf:url)
25+
26+ let _ = try JSONSerialization.jsonObject(with: data, options: [.allowFragments])
27+
28+ exit(0)
29+ } catch {
30+ exit(1)
31+ }
32+}
33+
34+main()
tests/JSONTestSuite/parsers/test_Bash_JSON/JSON.shnew file+208
@@ -0,0 +1,208 @@
1+#!/bin/sh
2+
3+throw() {
4+ echo "$*" >&2
5+ exit 1
6+}
7+
8+BRIEF=0
9+LEAFONLY=0
10+PRUNE=0
11+NO_HEAD=0
12+NORMALIZE_SOLIDUS=0
13+
14+usage() {
15+ echo
16+ echo "Usage: JSON.sh [-b] [-l] [-p] [-s] [-h]"
17+ echo
18+ echo "-p - Prune empty. Exclude fields with empty values."
19+ echo "-l - Leaf only. Only show leaf nodes, which stops data duplication."
20+ echo "-b - Brief. Combines 'Leaf only' and 'Prune empty' options."
21+ echo "-n - No-head. Do not show nodes that have no path (lines that start with [])."
22+ echo "-s - Remove escaping of the solidus symbol (straight slash)."
23+ echo "-h - This help text."
24+ echo
25+}
26+
27+parse_options() {
28+ set -- "$@"
29+ local ARGN=$#
30+ while [ "$ARGN" -ne 0 ]
31+ do
32+ case $1 in
33+ -h) usage
34+ exit 0
35+ ;;
36+ -b) BRIEF=1
37+ LEAFONLY=1
38+ PRUNE=1
39+ ;;
40+ -l) LEAFONLY=1
41+ ;;
42+ -p) PRUNE=1
43+ ;;
44+ -n) NO_HEAD=1
45+ ;;
46+ -s) NORMALIZE_SOLIDUS=1
47+ ;;
48+ ?*) echo "ERROR: Unknown option."
49+ usage
50+ exit 0
51+ ;;
52+ esac
53+ shift 1
54+ ARGN=$((ARGN-1))
55+ done
56+}
57+
58+awk_egrep () {
59+ local pattern_string=$1
60+
61+ gawk '{
62+ while ($0) {
63+ start=match($0, pattern);
64+ token=substr($0, start, RLENGTH);
65+ print token;
66+ $0=substr($0, start+RLENGTH);
67+ }
68+ }' pattern="$pattern_string"
69+}
70+
71+tokenize () {
72+ local GREP
73+ local ESCAPE
74+ local CHAR
75+
76+ if echo "test string" | egrep -ao --color=never "test" >/dev/null 2>&1
77+ then
78+ GREP='egrep -ao --color=never'
79+ else
80+ GREP='egrep -ao'
81+ fi
82+
83+ if echo "test string" | egrep -o "test" >/dev/null 2>&1
84+ then
85+ ESCAPE='(\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
86+ CHAR='[^[:cntrl:]"\\]'
87+ else
88+ GREP=awk_egrep
89+ ESCAPE='(\\\\[^u[:cntrl:]]|\\u[0-9a-fA-F]{4})'
90+ CHAR='[^[:cntrl:]"\\\\]'
91+ fi
92+
93+ local STRING="\"$CHAR*($ESCAPE$CHAR*)*\""
94+ local NUMBER='-?(0|[1-9][0-9]*)([.][0-9]*)?([eE][+-]?[0-9]*)?'
95+ local KEYWORD='null|false|true'
96+ local SPACE='[[:space:]]+'
97+
98+ # Force zsh to expand $A into multiple words
99+ local is_wordsplit_disabled=$(unsetopt 2>/dev/null | grep -c '^shwordsplit$')
100+ if [ $is_wordsplit_disabled != 0 ]; then setopt shwordsplit; fi
101+ $GREP "$STRING|$NUMBER|$KEYWORD|$SPACE|." | egrep -v "^$SPACE$"
102+ if [ $is_wordsplit_disabled != 0 ]; then unsetopt shwordsplit; fi
103+}
104+
105+parse_array () {
106+ local index=0
107+ local ary=''
108+ read -r token
109+ case "$token" in
110+ ']') ;;
111+ *)
112+ while :
113+ do
114+ parse_value "$1" "$index"
115+ index=$((index+1))
116+ ary="$ary""$value"
117+ read -r token
118+ case "$token" in
119+ ']') break ;;
120+ ',') ary="$ary," ;;
121+ *) throw "EXPECTED , or ] GOT ${token:-EOF}" ;;
122+ esac
123+ read -r token
124+ done
125+ ;;
126+ esac
127+ [ "$BRIEF" -eq 0 ] && value=$(printf '[%s]' "$ary") || value=
128+ :
129+}
130+
131+parse_object () {
132+ local key
133+ local obj=''
134+ read -r token
135+ case "$token" in
136+ '}') ;;
137+ *)
138+ while :
139+ do
140+ case "$token" in
141+ '"'*'"') key=$token ;;
142+ *) throw "EXPECTED string GOT ${token:-EOF}" ;;
143+ esac
144+ read -r token
145+ case "$token" in
146+ ':') ;;
147+ *) throw "EXPECTED : GOT ${token:-EOF}" ;;
148+ esac
149+ read -r token
150+ parse_value "$1" "$key"
151+ obj="$obj$key:$value"
152+ read -r token
153+ case "$token" in
154+ '}') break ;;
155+ ',') obj="$obj," ;;
156+ *) throw "EXPECTED , or } GOT ${token:-EOF}" ;;
157+ esac
158+ read -r token
159+ done
160+ ;;
161+ esac
162+ [ "$BRIEF" -eq 0 ] && value=$(printf '{%s}' "$obj") || value=
163+ :
164+}
165+
166+parse_value () {
167+ local jpath="${1:+$1,}$2" isleaf=0 isempty=0 print=0
168+ case "$token" in
169+ '{') parse_object "$jpath" ;;
170+ '[') parse_array "$jpath" ;;
171+ # At this point, the only valid single-character tokens are digits.
172+ ''|[!0-9]) throw "EXPECTED value GOT ${token:-EOF}" ;;
173+ *) value=$token
174+ # if asked, replace solidus ("\/") in json strings with normalized value: "/"
175+ [ "$NORMALIZE_SOLIDUS" -eq 1 ] && value=$(echo "$value" | sed 's#\\/#/#g')
176+ isleaf=1
177+ [ "$value" = '""' ] && isempty=1
178+ ;;
179+ esac
180+ [ "$value" = '' ] && return
181+ [ "$NO_HEAD" -eq 1 ] && [ -z "$jpath" ] && return
182+
183+ [ "$LEAFONLY" -eq 0 ] && [ "$PRUNE" -eq 0 ] && print=1
184+ [ "$LEAFONLY" -eq 1 ] && [ "$isleaf" -eq 1 ] && [ $PRUNE -eq 0 ] && print=1
185+ [ "$LEAFONLY" -eq 0 ] && [ "$PRUNE" -eq 1 ] && [ "$isempty" -eq 0 ] && print=1
186+ [ "$LEAFONLY" -eq 1 ] && [ "$isleaf" -eq 1 ] && \
187+ [ $PRUNE -eq 1 ] && [ $isempty -eq 0 ] && print=1
188+ [ "$print" -eq 1 ] && printf "[%s]\t%s\n" "$jpath" "$value"
189+ :
190+}
191+
192+parse () {
193+ read -r token
194+ parse_value
195+ read -r token
196+ case "$token" in
197+ '') ;;
198+ *) throw "EXPECTED EOF GOT $token" ;;
199+ esac
200+}
201+
202+if ([ "$0" = "$BASH_SOURCE" ] || ! [ -n "$BASH_SOURCE" ]);
203+then
204+ parse_options "$@"
205+ tokenize | parse
206+fi
207+
208+# vi: expandtab sw=2 ts=2
tests/JSONTestSuite/parsers/test_Freddy_20160830/bin/test_Freddynew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.pbxprojnew file+300
@@ -0,0 +1,300 @@
1+// !$*UTF8*$!
2+{
3+ archiveVersion = 1;
4+ classes = {
5+ };
6+ objectVersion = 46;
7+ objects = {
8+
9+/* Begin PBXBuildFile section */
10+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03D84ABA1D5B0A1000776402 /* main.swift */; };
11+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7781D5B75600021630C /* JSON.swift */; };
12+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7791D5B75600021630C /* JSONDecodable.swift */; };
13+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77A1D5B75600021630C /* JSONEncodable.swift */; };
14+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */; };
15+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */; };
16+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77D1D5B75600021630C /* JSONParser.swift */; };
17+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77E1D5B75600021630C /* JSONParsing.swift */; };
18+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77F1D5B75600021630C /* JSONSerializing.swift */; };
19+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7801D5B75600021630C /* JSONSubscripting.swift */; };
20+/* End PBXBuildFile section */
21+
22+/* Begin PBXCopyFilesBuildPhase section */
23+ 03D84AB51D5B0A1000776402 /* CopyFiles */ = {
24+ isa = PBXCopyFilesBuildPhase;
25+ buildActionMask = 2147483647;
26+ dstPath = /usr/share/man/man1;
27+ dstSubfolderSpec = 0;
28+ files = (
29+ );
30+ runOnlyForDeploymentPostprocessing = 1;
31+ };
32+/* End PBXCopyFilesBuildPhase section */
33+
34+/* Begin PBXFileReference section */
35+ 03D84AB71D5B0A1000776402 /* test_Freddy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_Freddy; sourceTree = BUILT_PRODUCTS_DIR; };
36+ 03D84ABA1D5B0A1000776402 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
37+ 03F8F7781D5B75600021630C /* JSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSON.swift; path = test_Freddy/JSON.swift; sourceTree = "<group>"; };
38+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONDecodable.swift; path = test_Freddy/JSONDecodable.swift; sourceTree = "<group>"; };
39+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodable.swift; path = test_Freddy/JSONEncodable.swift; sourceTree = "<group>"; };
40+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodingDetector.swift; path = test_Freddy/JSONEncodingDetector.swift; sourceTree = "<group>"; };
41+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONLiteralConvertible.swift; path = test_Freddy/JSONLiteralConvertible.swift; sourceTree = "<group>"; };
42+ 03F8F77D1D5B75600021630C /* JSONParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParser.swift; path = test_Freddy/JSONParser.swift; sourceTree = "<group>"; };
43+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParsing.swift; path = test_Freddy/JSONParsing.swift; sourceTree = "<group>"; };
44+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSerializing.swift; path = test_Freddy/JSONSerializing.swift; sourceTree = "<group>"; };
45+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSubscripting.swift; path = test_Freddy/JSONSubscripting.swift; sourceTree = "<group>"; };
46+/* End PBXFileReference section */
47+
48+/* Begin PBXFrameworksBuildPhase section */
49+ 03D84AB41D5B0A1000776402 /* Frameworks */ = {
50+ isa = PBXFrameworksBuildPhase;
51+ buildActionMask = 2147483647;
52+ files = (
53+ );
54+ runOnlyForDeploymentPostprocessing = 0;
55+ };
56+/* End PBXFrameworksBuildPhase section */
57+
58+/* Begin PBXGroup section */
59+ 03D84AAE1D5B0A1000776402 = {
60+ isa = PBXGroup;
61+ children = (
62+ 03F8F7781D5B75600021630C /* JSON.swift */,
63+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */,
64+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */,
65+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */,
66+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */,
67+ 03F8F77D1D5B75600021630C /* JSONParser.swift */,
68+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */,
69+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */,
70+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */,
71+ 03D84AB91D5B0A1000776402 /* test_Freddy */,
72+ 03D84AB81D5B0A1000776402 /* Products */,
73+ );
74+ sourceTree = "<group>";
75+ };
76+ 03D84AB81D5B0A1000776402 /* Products */ = {
77+ isa = PBXGroup;
78+ children = (
79+ 03D84AB71D5B0A1000776402 /* test_Freddy */,
80+ );
81+ name = Products;
82+ sourceTree = "<group>";
83+ };
84+ 03D84AB91D5B0A1000776402 /* test_Freddy */ = {
85+ isa = PBXGroup;
86+ children = (
87+ 03D84ABA1D5B0A1000776402 /* main.swift */,
88+ );
89+ path = test_Freddy;
90+ sourceTree = "<group>";
91+ };
92+/* End PBXGroup section */
93+
94+/* Begin PBXNativeTarget section */
95+ 03D84AB61D5B0A1000776402 /* test_Freddy */ = {
96+ isa = PBXNativeTarget;
97+ buildConfigurationList = 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */;
98+ buildPhases = (
99+ 03D84AB31D5B0A1000776402 /* Sources */,
100+ 03D84AB41D5B0A1000776402 /* Frameworks */,
101+ 03D84AB51D5B0A1000776402 /* CopyFiles */,
102+ );
103+ buildRules = (
104+ );
105+ dependencies = (
106+ );
107+ name = test_Freddy;
108+ productName = test_Freddy;
109+ productReference = 03D84AB71D5B0A1000776402 /* test_Freddy */;
110+ productType = "com.apple.product-type.tool";
111+ };
112+/* End PBXNativeTarget section */
113+
114+/* Begin PBXProject section */
115+ 03D84AAF1D5B0A1000776402 /* Project object */ = {
116+ isa = PBXProject;
117+ attributes = {
118+ LastSwiftUpdateCheck = 0800;
119+ LastUpgradeCheck = 0800;
120+ ORGANIZATIONNAME = "Nicolas Seriot";
121+ TargetAttributes = {
122+ 03D84AB61D5B0A1000776402 = {
123+ CreatedOnToolsVersion = 8.0;
124+ DevelopmentTeam = VBYRKYS73S;
125+ DevelopmentTeamName = "Nicolas Seriot";
126+ ProvisioningStyle = Automatic;
127+ };
128+ };
129+ };
130+ buildConfigurationList = 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */;
131+ compatibilityVersion = "Xcode 3.2";
132+ developmentRegion = English;
133+ hasScannedForEncodings = 0;
134+ knownRegions = (
135+ en,
136+ );
137+ mainGroup = 03D84AAE1D5B0A1000776402;
138+ productRefGroup = 03D84AB81D5B0A1000776402 /* Products */;
139+ projectDirPath = "";
140+ projectRoot = "";
141+ targets = (
142+ 03D84AB61D5B0A1000776402 /* test_Freddy */,
143+ );
144+ };
145+/* End PBXProject section */
146+
147+/* Begin PBXSourcesBuildPhase section */
148+ 03D84AB31D5B0A1000776402 /* Sources */ = {
149+ isa = PBXSourcesBuildPhase;
150+ buildActionMask = 2147483647;
151+ files = (
152+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */,
153+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */,
154+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */,
155+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */,
156+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */,
157+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */,
158+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */,
159+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */,
160+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */,
161+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */,
162+ );
163+ runOnlyForDeploymentPostprocessing = 0;
164+ };
165+/* End PBXSourcesBuildPhase section */
166+
167+/* Begin XCBuildConfiguration section */
168+ 03D84ABC1D5B0A1000776402 /* Debug */ = {
169+ isa = XCBuildConfiguration;
170+ buildSettings = {
171+ ALWAYS_SEARCH_USER_PATHS = NO;
172+ CLANG_ANALYZER_NONNULL = YES;
173+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
174+ CLANG_CXX_LIBRARY = "libc++";
175+ CLANG_ENABLE_MODULES = YES;
176+ CLANG_ENABLE_OBJC_ARC = YES;
177+ CLANG_WARN_BOOL_CONVERSION = YES;
178+ CLANG_WARN_CONSTANT_CONVERSION = YES;
179+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
180+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
181+ CLANG_WARN_EMPTY_BODY = YES;
182+ CLANG_WARN_ENUM_CONVERSION = YES;
183+ CLANG_WARN_INT_CONVERSION = YES;
184+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
185+ CLANG_WARN_UNREACHABLE_CODE = YES;
186+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
187+ CODE_SIGN_IDENTITY = "-";
188+ COPY_PHASE_STRIP = NO;
189+ DEBUG_INFORMATION_FORMAT = dwarf;
190+ ENABLE_STRICT_OBJC_MSGSEND = YES;
191+ ENABLE_TESTABILITY = YES;
192+ GCC_C_LANGUAGE_STANDARD = gnu99;
193+ GCC_DYNAMIC_NO_PIC = NO;
194+ GCC_NO_COMMON_BLOCKS = YES;
195+ GCC_OPTIMIZATION_LEVEL = 0;
196+ GCC_PREPROCESSOR_DEFINITIONS = (
197+ "DEBUG=1",
198+ "$(inherited)",
199+ );
200+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
201+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
202+ GCC_WARN_UNDECLARED_SELECTOR = YES;
203+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
204+ GCC_WARN_UNUSED_FUNCTION = YES;
205+ GCC_WARN_UNUSED_VARIABLE = YES;
206+ MACOSX_DEPLOYMENT_TARGET = 10.11;
207+ MTL_ENABLE_DEBUG_INFO = YES;
208+ ONLY_ACTIVE_ARCH = YES;
209+ SDKROOT = macosx;
210+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
211+ };
212+ name = Debug;
213+ };
214+ 03D84ABD1D5B0A1000776402 /* Release */ = {
215+ isa = XCBuildConfiguration;
216+ buildSettings = {
217+ ALWAYS_SEARCH_USER_PATHS = NO;
218+ CLANG_ANALYZER_NONNULL = YES;
219+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
220+ CLANG_CXX_LIBRARY = "libc++";
221+ CLANG_ENABLE_MODULES = YES;
222+ CLANG_ENABLE_OBJC_ARC = YES;
223+ CLANG_WARN_BOOL_CONVERSION = YES;
224+ CLANG_WARN_CONSTANT_CONVERSION = YES;
225+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
226+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
227+ CLANG_WARN_EMPTY_BODY = YES;
228+ CLANG_WARN_ENUM_CONVERSION = YES;
229+ CLANG_WARN_INT_CONVERSION = YES;
230+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
231+ CLANG_WARN_UNREACHABLE_CODE = YES;
232+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
233+ CODE_SIGN_IDENTITY = "-";
234+ COPY_PHASE_STRIP = NO;
235+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
236+ ENABLE_NS_ASSERTIONS = NO;
237+ ENABLE_STRICT_OBJC_MSGSEND = YES;
238+ GCC_C_LANGUAGE_STANDARD = gnu99;
239+ GCC_NO_COMMON_BLOCKS = YES;
240+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
241+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
242+ GCC_WARN_UNDECLARED_SELECTOR = YES;
243+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
244+ GCC_WARN_UNUSED_FUNCTION = YES;
245+ GCC_WARN_UNUSED_VARIABLE = YES;
246+ MACOSX_DEPLOYMENT_TARGET = 10.11;
247+ MTL_ENABLE_DEBUG_INFO = NO;
248+ SDKROOT = macosx;
249+ };
250+ name = Release;
251+ };
252+ 03D84ABF1D5B0A1000776402 /* Debug */ = {
253+ isa = XCBuildConfiguration;
254+ buildSettings = {
255+ FRAMEWORK_SEARCH_PATHS = (
256+ "$(inherited)",
257+ "$(PROJECT_DIR)",
258+ );
259+ PRODUCT_NAME = "$(TARGET_NAME)";
260+ SWIFT_VERSION = 2.3;
261+ };
262+ name = Debug;
263+ };
264+ 03D84AC01D5B0A1000776402 /* Release */ = {
265+ isa = XCBuildConfiguration;
266+ buildSettings = {
267+ FRAMEWORK_SEARCH_PATHS = (
268+ "$(inherited)",
269+ "$(PROJECT_DIR)",
270+ );
271+ PRODUCT_NAME = "$(TARGET_NAME)";
272+ SWIFT_VERSION = 2.3;
273+ };
274+ name = Release;
275+ };
276+/* End XCBuildConfiguration section */
277+
278+/* Begin XCConfigurationList section */
279+ 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */ = {
280+ isa = XCConfigurationList;
281+ buildConfigurations = (
282+ 03D84ABC1D5B0A1000776402 /* Debug */,
283+ 03D84ABD1D5B0A1000776402 /* Release */,
284+ );
285+ defaultConfigurationIsVisible = 0;
286+ defaultConfigurationName = Release;
287+ };
288+ 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */ = {
289+ isa = XCConfigurationList;
290+ buildConfigurations = (
291+ 03D84ABF1D5B0A1000776402 /* Debug */,
292+ 03D84AC01D5B0A1000776402 /* Release */,
293+ );
294+ defaultConfigurationIsVisible = 0;
295+ defaultConfigurationName = Release;
296+ };
297+/* End XCConfigurationList section */
298+ };
299+ rootObject = 03D84AAF1D5B0A1000776402 /* Project object */;
300+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Workspace
3+ version = "1.0">
4+ <FileRef
5+ location = "self:test_Freddy.xcodeproj">
6+ </FileRef>
7+</Workspace>
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprintnew file+30
@@ -0,0 +1,30 @@
1+{
2+ "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A",
3+ "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4+
5+ },
6+ "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
7+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : 0,
8+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : 0
9+ },
10+ "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "7B3DFA55-F9BF-41D8-8FD5-204D3162EB03",
11+ "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
12+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : "dropbox\/JSON\/test_Freddy\/Vendor\/Freddy\/",
13+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : "dropbox\/"
14+ },
15+ "DVTSourceControlWorkspaceBlueprintNameKey" : "test_Freddy",
16+ "DVTSourceControlWorkspaceBlueprintVersion" : 204,
17+ "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "JSON\/test_Freddy\/test_Freddy.xcodeproj",
18+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
19+ {
20+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/bignerdranch\/Freddy.git",
21+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
22+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6ADA245F937D8ED6D99F5A7865E19F5267A169E2"
23+ },
24+ {
25+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/nst\/Dropbox\/dropbox.git",
26+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
27+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A"
28+ }
29+ ]
30+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcschemenew file+91
@@ -0,0 +1,91 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Scheme
3+ LastUpgradeVersion = "0800"
4+ version = "1.3">
5+ <BuildAction
6+ parallelizeBuildables = "YES"
7+ buildImplicitDependencies = "YES">
8+ <BuildActionEntries>
9+ <BuildActionEntry
10+ buildForTesting = "YES"
11+ buildForRunning = "YES"
12+ buildForProfiling = "YES"
13+ buildForArchiving = "YES"
14+ buildForAnalyzing = "YES">
15+ <BuildableReference
16+ BuildableIdentifier = "primary"
17+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
18+ BuildableName = "test_Freddy"
19+ BlueprintName = "test_Freddy"
20+ ReferencedContainer = "container:test_Freddy.xcodeproj">
21+ </BuildableReference>
22+ </BuildActionEntry>
23+ </BuildActionEntries>
24+ </BuildAction>
25+ <TestAction
26+ buildConfiguration = "Debug"
27+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+ shouldUseLaunchSchemeArgsEnv = "YES">
30+ <Testables>
31+ </Testables>
32+ <MacroExpansion>
33+ <BuildableReference
34+ BuildableIdentifier = "primary"
35+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
36+ BuildableName = "test_Freddy"
37+ BlueprintName = "test_Freddy"
38+ ReferencedContainer = "container:test_Freddy.xcodeproj">
39+ </BuildableReference>
40+ </MacroExpansion>
41+ <AdditionalOptions>
42+ </AdditionalOptions>
43+ </TestAction>
44+ <LaunchAction
45+ buildConfiguration = "Debug"
46+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48+ launchStyle = "0"
49+ useCustomWorkingDirectory = "NO"
50+ ignoresPersistentStateOnLaunch = "NO"
51+ debugDocumentVersioning = "YES"
52+ debugServiceExtension = "internal"
53+ allowLocationSimulation = "YES">
54+ <BuildableProductRunnable
55+ runnableDebuggingMode = "0">
56+ <BuildableReference
57+ BuildableIdentifier = "primary"
58+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
59+ BuildableName = "test_Freddy"
60+ BlueprintName = "test_Freddy"
61+ ReferencedContainer = "container:test_Freddy.xcodeproj">
62+ </BuildableReference>
63+ </BuildableProductRunnable>
64+ <AdditionalOptions>
65+ </AdditionalOptions>
66+ </LaunchAction>
67+ <ProfileAction
68+ buildConfiguration = "Release"
69+ shouldUseLaunchSchemeArgsEnv = "YES"
70+ savedToolIdentifier = ""
71+ useCustomWorkingDirectory = "NO"
72+ debugDocumentVersioning = "YES">
73+ <BuildableProductRunnable
74+ runnableDebuggingMode = "0">
75+ <BuildableReference
76+ BuildableIdentifier = "primary"
77+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
78+ BuildableName = "test_Freddy"
79+ BlueprintName = "test_Freddy"
80+ ReferencedContainer = "container:test_Freddy.xcodeproj">
81+ </BuildableReference>
82+ </BuildableProductRunnable>
83+ </ProfileAction>
84+ <AnalyzeAction
85+ buildConfiguration = "Debug">
86+ </AnalyzeAction>
87+ <ArchiveAction
88+ buildConfiguration = "Release"
89+ revealArchiveInOrganizer = "YES">
90+ </ArchiveAction>
91+</Scheme>
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22
@@ -0,0 +1,22 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+<plist version="1.0">
4+<dict>
5+ <key>SchemeUserState</key>
6+ <dict>
7+ <key>test_Freddy.xcscheme</key>
8+ <dict>
9+ <key>orderHint</key>
10+ <integer>0</integer>
11+ </dict>
12+ </dict>
13+ <key>SuppressBuildableAutocreation</key>
14+ <dict>
15+ <key>03D84AB61D5B0A1000776402</key>
16+ <dict>
17+ <key>primary</key>
18+ <true/>
19+ </dict>
20+ </dict>
21+</dict>
22+</plist>
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSON.swiftnew file+95
@@ -0,0 +1,95 @@
1+//
2+// JSON.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// An enum to describe the structure of JSON.
10+public enum JSON {
11+ /// A case for denoting an array with an associated value of `[JSON]`
12+ case Array([JSON])
13+ /// A case for denoting a dictionary with an associated value of `[Swift.String: JSON]`
14+ case Dictionary([Swift.String: JSON])
15+ /// A case for denoting a double with an associated value of `Swift.Double`.
16+ case Double(Swift.Double)
17+ /// A case for denoting an integer with an associated value of `Swift.Int`.
18+ case Int(Swift.Int)
19+ /// A case for denoting a string with an associated value of `Swift.String`.
20+ case String(Swift.String)
21+ /// A case for denoting a boolean with an associated value of `Swift.Bool`.
22+ case Bool(Swift.Bool)
23+ /// A case for denoting null.
24+ case Null
25+}
26+
27+// MARK: - Errors
28+
29+extension JSON {
30+
31+ /// An enum to encapsulate errors that may arise in working with `JSON`.
32+ public enum Error: ErrorType {
33+ /// The `index` is out of bounds for a JSON array
34+ case IndexOutOfBounds(index: Swift.Int)
35+
36+ /// The `key` was not found in the JSON dictionary
37+ case KeyNotFound(key: Swift.String)
38+
39+ /// The JSON is not subscriptable with `type`
40+ case UnexpectedSubscript(type: JSONPathType.Type)
41+
42+ /// Unexpected JSON `value` was found that is not convertible `to` type
43+ case ValueNotConvertible(value: JSON, to: Any.Type)
44+ }
45+
46+}
47+
48+// MARK: - Test Equality
49+
50+/// Return `true` if `lhs` is equal to `rhs`.
51+public func ==(lhs: JSON, rhs: JSON) -> Bool {
52+ switch (lhs, rhs) {
53+ case (.Array(let arrL), .Array(let arrR)):
54+ return arrL == arrR
55+ case (.Dictionary(let dictL), .Dictionary(let dictR)):
56+ return dictL == dictR
57+ case (.String(let strL), .String(let strR)):
58+ return strL == strR
59+ case (.Double(let dubL), .Double(let dubR)):
60+ return dubL == dubR
61+ case (.Double(let dubL), .Int(let intR)):
62+ return dubL == Double(intR)
63+ case (.Int(let intL), .Int(let intR)):
64+ return intL == intR
65+ case (.Int(let intL), .Double(let dubR)):
66+ return Double(intL) == dubR
67+ case (.Bool(let bL), .Bool(let bR)):
68+ return bL == bR
69+ case (.Null, .Null):
70+ return true
71+ default:
72+ return false
73+ }
74+}
75+
76+extension JSON: Equatable {}
77+
78+// MARK: - Printing
79+
80+extension JSON: CustomStringConvertible {
81+
82+ /// A textual representation of `self`.
83+ public var description: Swift.String {
84+ switch self {
85+ case .Array(let arr): return Swift.String(arr)
86+ case .Dictionary(let dict): return Swift.String(dict)
87+ case .String(let string): return string
88+ case .Double(let double): return Swift.String(double)
89+ case .Int(let int): return Swift.String(int)
90+ case .Bool(let bool): return Swift.String(bool)
91+ case .Null: return "null"
92+ }
93+ }
94+
95+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONDecodable.swiftnew file+177
@@ -0,0 +1,177 @@
1+//
2+// JSONDecodable.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/24/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// A protocol to provide functionality for creating a model object with a `JSON`
10+/// value.
11+public protocol JSONDecodable {
12+
13+ /// Creates an instance of the model with a `JSON` instance.
14+ /// - parameter json: An instance of a `JSON` value from which to
15+ /// construct an instance of the implementing type.
16+ /// - throws: Any `JSON.Error` for errors derived from inspecting the
17+ /// `JSON` value, or any other error involved in decoding.
18+ init(json: JSON) throws
19+
20+}
21+
22+extension Double: JSONDecodable {
23+
24+ /// An initializer to create an instance of `Double` from a `JSON` value.
25+ /// - parameter json: An instance of `JSON`.
26+ /// - throws: The initializer will throw an instance of `JSON.Error` if
27+ /// an instance of `Double` cannot be created from the `JSON` value that was
28+ /// passed to this initializer.
29+ public init(json: JSON) throws {
30+ switch json {
31+ case let .Double(double):
32+ self = double
33+ case let .Int(int):
34+ self = Swift.Double(int)
35+ default:
36+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Double)
37+ }
38+ }
39+
40+}
41+
42+extension Int: JSONDecodable {
43+
44+ /// An initializer to create an instance of `Int` from a `JSON` value.
45+ /// - parameter json: An instance of `JSON`.
46+ /// - throws: The initializer will throw an instance of `JSON.Error` if
47+ /// an instance of `Int` cannot be created from the `JSON` value that was
48+ /// passed to this initializer.
49+ public init(json: JSON) throws {
50+ switch json {
51+ case let .Double(double) where double <= Double(Swift.Int.max):
52+ self = Swift.Int(double)
53+ case let .Int(int):
54+ self = int
55+ default:
56+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Int)
57+ }
58+ }
59+
60+}
61+
62+extension String: JSONDecodable {
63+
64+ /// An initializer to create an instance of `String` from a `JSON` value.
65+ /// - parameter json: An instance of `JSON`.
66+ /// - throws: The initializer will throw an instance of `JSON.Error` if
67+ /// an instance of `String` cannot be created from the `JSON` value that was
68+ /// passed to this initializer.
69+ public init(json: JSON) throws {
70+
71+ switch json {
72+ case let .String(string):
73+ self = string
74+ case let .Int(int):
75+ self = String(int)
76+ case let .Bool(bool):
77+ self = String(bool)
78+ case let .Double(double):
79+ self = String(double)
80+ default:
81+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.String)
82+ }
83+ }
84+
85+}
86+
87+extension Bool: JSONDecodable {
88+
89+ /// An initializer to create an instance of `Bool` from a `JSON` value.
90+ /// - parameter json: An instance of `JSON`.
91+ /// - throws: The initializer will throw an instance of `JSON.Error` if
92+ /// an instance of `Bool` cannot be created from the `JSON` value that was
93+ /// passed to this initializer.
94+ public init(json: JSON) throws {
95+ guard case let .Bool(bool) = json else {
96+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Bool)
97+ }
98+ self = bool
99+ }
100+
101+}
102+
103+extension RawRepresentable where RawValue: JSONDecodable {
104+
105+ /// An initializer to create an instance of `RawRepresentable` from a `JSON` value.
106+ /// - parameter json: An instance of `JSON`.
107+ /// - throws: The initializer will throw an instance of `JSON.Error` if
108+ /// an instance of `RawRepresentable` cannot be created from the `JSON` value that was
109+ /// passed to this initializer.
110+ public init(json: JSON) throws {
111+ let raw = try json.decode(type: RawValue.self)
112+ guard let value = Self(rawValue: raw) else {
113+ throw JSON.Error.ValueNotConvertible(value: json, to: Self.self)
114+ }
115+ self = value
116+ }
117+}
118+
119+internal extension JSON {
120+
121+ /// Retrieves a `[JSON]` from the JSON.
122+ /// - parameter: A `JSON` to be used to create the returned `Array`.
123+ /// - returns: An `Array` of `JSON` elements
124+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
125+ /// - seealso: `JSON.decode(_:type:)`
126+ static func getArray(json: JSON) throws -> [JSON] {
127+ // Ideally should be expressed as a conditional protocol implementation on Swift.Array.
128+ guard case let .Array(array) = json else {
129+ throw Error.ValueNotConvertible(value: json, to: Swift.Array<JSON>)
130+ }
131+ return array
132+ }
133+
134+ /// Retrieves a `[String: JSON]` from the JSON.
135+ /// - parameter: A `JSON` to be used to create the returned `Dictionary`.
136+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
137+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
138+ /// - seealso: `JSON.decode(_:type:)`
139+ static func getDictionary(json: JSON) throws -> [Swift.String: JSON] {
140+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
141+ guard case let .Dictionary(dictionary) = json else {
142+ throw Error.ValueNotConvertible(value: json, to: Swift.Dictionary<Swift.String, JSON>)
143+ }
144+ return dictionary
145+ }
146+
147+ /// Attempts to decode many values from a descendant JSON array at a path
148+ /// into JSON.
149+ /// - parameter: A `JSON` to be used to create the returned `Array` of some type conforming to `JSONDecodable`.
150+ /// - returns: An `Array` of `Decoded` elements.
151+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`, as
152+ /// well as any error that arises from decoding the contained values.
153+ /// - seealso: `JSON.decode(_:type:)`
154+ static func getArrayOf<Decoded: JSONDecodable>(json: JSON) throws -> [Decoded] {
155+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
156+ // This implementation also doesn't do the `type = Type.self` trick.
157+ return try getArray(json).map(Decoded.init)
158+ }
159+
160+ /// Attempts to decode many values from a descendant JSON object at a path
161+ /// into JSON.
162+ /// - returns: A `Dictionary` of string keys and `Decoded` values.
163+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)` or
164+ /// any error that arises from decoding the contained values.
165+ /// - seealso: `JSON.decode(_:type:)`
166+ static func getDictionaryOf<Decoded: JSONDecodable>(json: JSON) throws -> [Swift.String: Decoded] {
167+ guard case let .Dictionary(dictionary) = json else {
168+ throw Error.ValueNotConvertible(value: json, to: Swift.Dictionary<Swift.String, Decoded>)
169+ }
170+ var decodedDictionary = Swift.Dictionary<Swift.String, Decoded>(minimumCapacity: dictionary.count)
171+ for (key, value) in dictionary {
172+ decodedDictionary[key] = try Decoded(json: value)
173+ }
174+ return decodedDictionary
175+ }
176+
177+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONEncodable.swiftnew file+83
@@ -0,0 +1,83 @@
1+//
2+// JSONEncodable.swift
3+// Freddy
4+//
5+// Created by Matthew Mathias on 1/4/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+/// A protocol to facilitate encoding and decoding of `JSON`.
12+public protocol JSONEncodable {
13+ /// Converts an instance of a conforming type to `JSON`.
14+ /// - returns: An instance of `JSON`.
15+ /// - Note: If conforming to `JSONEncodable` with a custom type of your own, you should return an instance of
16+ /// `JSON.Dictionary`.
17+ func toJSON() -> JSON
18+}
19+
20+extension Array where Element: JSONEncodable {
21+ /// Converts an instance of `Array` whose elements conform to `JSONEncodable` to `JSON`.
22+ /// - returns: An instance of `JSON` where the enum case is `.Array`.
23+ public func toJSON() -> JSON {
24+ let arrayOfJSON = self.map { $0.toJSON() }
25+ return .Array(arrayOfJSON)
26+ }
27+}
28+
29+extension Dictionary where Value: JSONEncodable {
30+ /// Converts an instance of `Dictionary` whose values conform to `JSONEncodable` to `JSON`. The keys in the resulting
31+ /// `JSON.Dictionary` will be of type `String`.
32+ /// - returns: An instance of `JSON` where the enum case is `.Dictionary`.
33+ public func toJSON() -> JSON {
34+ var jsonDictionary = [String: JSON]()
35+
36+ for (k, v) in self {
37+ let key = String(k)
38+ jsonDictionary[key] = v.toJSON()
39+ }
40+
41+ return .Dictionary(jsonDictionary)
42+ }
43+}
44+
45+extension Int: JSONEncodable {
46+ /// Converts an instance of a conforming type to `JSON`.
47+ /// - returns: An instance of `JSON` where the enum case is `.Int`.
48+ public func toJSON() -> JSON {
49+ return .Int(self)
50+ }
51+}
52+
53+extension Double: JSONEncodable {
54+ /// Converts an instance of a conforming type to `JSON`.
55+ /// - returns: An instance of `JSON` where the enum case is `.Double`.
56+ public func toJSON() -> JSON {
57+ return .Double(self)
58+ }
59+}
60+
61+extension String: JSONEncodable {
62+ /// Converts an instance of a conforming type to `JSON`.
63+ /// - returns: An instance of `JSON` where the enum case is `.String`.
64+ public func toJSON() -> JSON {
65+ return .String(self)
66+ }
67+}
68+
69+extension Bool: JSONEncodable {
70+ /// Converts an instance of a conforming type to `JSON`.
71+ /// - returns: An instance of `JSON` where the enum case is `.Bool`.
72+ public func toJSON() -> JSON {
73+ return .Bool(self)
74+ }
75+}
76+
77+extension RawRepresentable where RawValue: JSONEncodable {
78+ /// Converts an instance of a conforming type to `JSON`.
79+ /// - returns: An instance of `JSON` where the enum case is whatever the underlying `RawValue` converts to.
80+ public func toJSON() -> JSON {
81+ return rawValue.toJSON()
82+ }
83+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONEncodingDetector.swiftnew file+110
@@ -0,0 +1,110 @@
1+//
2+// JSONEncodingDetector.swift
3+// Freddy
4+//
5+// Created by Robert Edwards on 1/27/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+/// Struct for attempting to detect the Unicode encoding used with the data supplied to the JSONParser
10+public struct JSONEncodingDetector {
11+
12+ //// The Unicode encodings looked for during detection
13+ public enum Encoding {
14+ //// UTF-8
15+ case UTF8
16+ //// UTF-16 Little Endian
17+ case UTF16LE
18+ //// UTF-16 Big Endian
19+ case UTF16BE
20+ //// UTF-32 Little Endian
21+ case UTF32LE
22+ //// UTF-32 Big Endian
23+ case UTF32BE
24+ }
25+
26+ //// The Unicode encodings supported by JSONParser.swift
27+ public static let supportedEncodings: [Encoding] = [.UTF8]
28+
29+ typealias ByteStreamPrefixInformation = (encoding: Encoding, byteOrderMarkLength: Int)
30+
31+ //// Attempts to detect the Unicode encoding used for a given set of data.
32+ ////
33+ //// This function initially looks for a Byte Order Mark in the following form:
34+ ////
35+ //// Bytes | Encoding Form
36+ //// --------------|----------------
37+ //// 00 00 FE FF | UTF-32, big-endian
38+ //// FF FE 00 00 | UTF-32, little-endian
39+ //// FE FF | UTF-16, big-endian
40+ //// FF FE | UTF-16, little-endian
41+ //// EF BB BF | UTF-8
42+ ////
43+ //// If a BOM is not found then we detect using the following approach described in
44+ //// the JSON RFC http://www.ietf.org/rfc/rfc4627.txt:
45+ ////
46+ //// Since the first two characters of a JSON text will always be ASCII
47+ //// characters [RFC0020], it is possible to determine whether an octet
48+ //// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
49+ //// at the pattern of nulls in the first four octets.
50+ ////
51+ //// 00 00 00 xx UTF-32BE
52+ //// 00 xx 00 xx UTF-16BE
53+ //// xx 00 00 00 UTF-32LE
54+ //// xx 00 xx 00 UTF-16LE
55+ //// xx xx xx xx UTF-8
56+ ////
57+ //// - parameter header: The front Slice of data being read and evaluated.
58+ //// - returns: A tuple containing the detected Unicode encoding and the lenght of the byte order mark.
59+ static func detectEncoding(header: Slice<UnsafeBufferPointer<UInt8>>) -> ByteStreamPrefixInformation {
60+
61+ guard let prefix = prefixFromHeader(header) else {
62+ return (.UTF8, 0)
63+ }
64+
65+ if let prefixInfo = JSONEncodingDetector.encodingFromBOM(prefix) {
66+ return prefixInfo
67+ } else {
68+ switch prefix {
69+ case(0, 0, 0?, _):
70+ return (.UTF32BE, 0)
71+ case(_, 0, 0?, 0?):
72+ return (.UTF32LE, 0)
73+ case (0, _, 0?, _), (0, _, _, _):
74+ return (.UTF16BE, 0)
75+ case (_, 0, _, 0?), (_, 0, _, _):
76+ return (.UTF16LE, 0)
77+ default:
78+ return (.UTF8, 0)
79+ }
80+ }
81+ }
82+
83+ private typealias EncodingBytePrefix = (UInt8, UInt8, UInt8?, UInt8?)
84+
85+ private static func prefixFromHeader(header: Slice<UnsafeBufferPointer<UInt8>>) -> EncodingBytePrefix? {
86+ if header.count >= 4 {
87+ return(header[0], header[1], header[2], header[3])
88+ } else if header.count >= 2 {
89+ return (header[0], header[1], nil, nil)
90+ }
91+ return nil
92+ }
93+
94+ private static func encodingFromBOM(prefix: EncodingBytePrefix) -> ByteStreamPrefixInformation? {
95+ switch prefix {
96+ case(0xFE, 0xFF, _, _):
97+ return (.UTF16BE, 2)
98+ case(0x00, 0x00, 0xFE?, 0xFF?):
99+ return (.UTF32BE, 4)
100+ case(0xEF, 0xBB, 0xBF?, _):
101+ return (.UTF8, 3)
102+ case(0xFF, 0xFE, 0?, 0?):
103+ return (.UTF32LE, 4)
104+ case(0xFF, 0xFE, _, _):
105+ return (.UTF16LE, 2)
106+ default:
107+ return nil
108+ }
109+ }
110+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONLiteralConvertible.swiftnew file+130
@@ -0,0 +1,130 @@
1+//
2+// JSONLiteralConvertible.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 5/11/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+// MARK: - ArrayLiteralConvertible
10+
11+extension JSON: ArrayLiteralConvertible {
12+
13+ /// Create an instance by copying each element of the `collection` into a
14+ /// new `Array`.
15+ public init<Collection: CollectionType where Collection.Generator.Element == JSON>(_ collection: Collection) {
16+ self = .Array(Swift.Array(collection))
17+ }
18+
19+ /// Create an instance initialized with `elements`.
20+ public init(arrayLiteral elements: JSON...) {
21+ self.init(elements)
22+ }
23+
24+}
25+
26+// MARK: - DictionaryLiteralConvertible
27+
28+extension JSON: DictionaryLiteralConvertible {
29+
30+ /// Create an instance by copying each key/value pair of the `pairs` into
31+ /// a new `Dictionary`.
32+ public init<Dictionary: SequenceType where Dictionary.Generator.Element == (Swift.String, JSON)>(_ pairs: Dictionary) {
33+ var dictionary = Swift.Dictionary<Swift.String, JSON>(minimumCapacity: pairs.underestimateCount())
34+ for (key, value) in pairs {
35+ dictionary[key] = value
36+ }
37+ self = .Dictionary(dictionary)
38+ }
39+
40+ /// Create an instance initialized with `pairs`.
41+ public init(dictionaryLiteral pairs: (Swift.String, JSON)...) {
42+ self.init(pairs)
43+ }
44+
45+}
46+
47+// MARK: - FloatLiteralConvertible
48+
49+extension JSON: FloatLiteralConvertible {
50+
51+ /// Create an instance initialized to `Double` `value`.
52+ public init(_ value: Swift.Double) {
53+ self = .Double(value)
54+ }
55+
56+ /// Create a literal instance initialized to `value`.
57+ public init(floatLiteral value: Swift.Double) {
58+ self.init(value)
59+ }
60+
61+}
62+
63+// MARK: - IntegerLiteralConvertible
64+
65+extension JSON: IntegerLiteralConvertible {
66+
67+ /// Create an instance initialized to `Int` by `value`.
68+ public init(_ value: Swift.Int) {
69+ self = .Int(value)
70+ }
71+
72+ /// Create a literal instance initialized to `value`.
73+ public init(integerLiteral value: Swift.Int) {
74+ self.init(value)
75+ }
76+
77+}
78+
79+// MARK: - StringLiteralConvertible
80+
81+extension JSON: StringLiteralConvertible {
82+
83+ /// Create an instance initialized to `String` by `text`.
84+ public init(_ text: Swift.String) {
85+ self = .String(text)
86+ }
87+
88+ /// Create a literal instance initialized to `value`.
89+ public init(stringLiteral value: StringLiteralType) {
90+ self.init(value)
91+ }
92+
93+ /// Create a literal instance initialized to `value`.
94+ public init(extendedGraphemeClusterLiteral value: StringLiteralType) {
95+ self.init(value)
96+ }
97+
98+ /// Create a literal instance initialized to `value`.
99+ public init(unicodeScalarLiteral value: StringLiteralType) {
100+ self.init(value)
101+ }
102+
103+}
104+
105+// MARK: - BooleanLiteralConvertible
106+
107+extension JSON: BooleanLiteralConvertible {
108+
109+ /// Create an instance initialized to `Bool` by `value`.
110+ public init(_ value: Swift.Bool) {
111+ self = .Bool(value)
112+ }
113+
114+ /// Create a literal instance initialized to `value`.
115+ public init(booleanLiteral value: Swift.Bool) {
116+ self.init(value)
117+ }
118+
119+}
120+
121+// MARK: - NilLiteralConvertible
122+
123+extension JSON: NilLiteralConvertible {
124+
125+ /// Create an instance initialized with `nil`.
126+ public init(nilLiteral: ()) {
127+ self = .Null
128+ }
129+
130+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONParser.swiftnew file+907
@@ -0,0 +1,907 @@
1+//
2+// JSONParser.swift
3+// Freddy
4+//
5+// Created by John Gallagher on 4/18/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+import Foundation
10+
11+private struct Literal {
12+ static let BACKSLASH = UInt8(ascii: "\\")
13+ static let BACKSPACE = UInt8(ascii: "\u{0008}")
14+ static let COLON = UInt8(ascii: ":")
15+ static let COMMA = UInt8(ascii: ",")
16+ static let DOUBLE_QUOTE = UInt8(ascii: "\"")
17+ static let FORMFEED = UInt8(ascii: "\u{000c}")
18+ static let LEFT_BRACE = UInt8(ascii: "{")
19+ static let LEFT_BRACKET = UInt8(ascii: "[")
20+ static let MINUS = UInt8(ascii: "-")
21+ static let NEWLINE = UInt8(ascii: "\n")
22+ static let PERIOD = UInt8(ascii: ".")
23+ static let PLUS = UInt8(ascii: "+")
24+ static let RETURN = UInt8(ascii: "\r")
25+ static let RIGHT_BRACE = UInt8(ascii: "}")
26+ static let RIGHT_BRACKET = UInt8(ascii: "]")
27+ static let SLASH = UInt8(ascii: "/")
28+ static let SPACE = UInt8(ascii: " ")
29+ static let TAB = UInt8(ascii: "\t")
30+
31+ static let a = UInt8(ascii: "a")
32+ static let b = UInt8(ascii: "b")
33+ static let c = UInt8(ascii: "c")
34+ static let d = UInt8(ascii: "d")
35+ static let e = UInt8(ascii: "e")
36+ static let f = UInt8(ascii: "f")
37+ static let l = UInt8(ascii: "l")
38+ static let n = UInt8(ascii: "n")
39+ static let r = UInt8(ascii: "r")
40+ static let s = UInt8(ascii: "s")
41+ static let t = UInt8(ascii: "t")
42+ static let u = UInt8(ascii: "u")
43+
44+ static let A = UInt8(ascii: "A")
45+ static let B = UInt8(ascii: "B")
46+ static let C = UInt8(ascii: "C")
47+ static let D = UInt8(ascii: "D")
48+ static let E = UInt8(ascii: "E")
49+ static let F = UInt8(ascii: "F")
50+
51+ static let zero = UInt8(ascii: "0")
52+ static let one = UInt8(ascii: "1")
53+ static let two = UInt8(ascii: "2")
54+ static let three = UInt8(ascii: "3")
55+ static let four = UInt8(ascii: "4")
56+ static let five = UInt8(ascii: "5")
57+ static let six = UInt8(ascii: "6")
58+ static let seven = UInt8(ascii: "7")
59+ static let eight = UInt8(ascii: "8")
60+ static let nine = UInt8(ascii: "9")
61+}
62+
63+private let ParserMaximumDepth = 512
64+
65+
66+/// A pure Swift JSON parser. This parser is much faster than the
67+/// `NSJSONSerialization`-based parser (due to the overhead of having to
68+/// dynamically cast the Objective-C objects to determine their type); however,
69+/// it is much newer and has restrictions that the `NSJSONSerialization` parser
70+/// does not. Two restrictions in particular are that it requires UTF-8 data as
71+/// input and it does not allow trailing commas in arrays or dictionaries.
72+public struct JSONParser {
73+
74+ private enum Sign: Int {
75+ case Positive = 1
76+ case Negative = -1
77+ }
78+
79+ private let input: UnsafeBufferPointer<UInt8>
80+ private let owner: Any?
81+ private var loc = 0
82+ private var depth = 0
83+
84+ private init<T>(buffer: UnsafeBufferPointer<UInt8>, owner: T) {
85+ self.input = buffer
86+ self.owner = owner
87+ }
88+
89+ /// Decode the root element of the `JSON` stream. This may be any fragment
90+ /// or a structural element, per RFC 7159.
91+ ///
92+ /// The beginning bytes are used to determine the stream's encoding.
93+ /// `JSONParser` currently only supports UTF-8 encoding, with or without
94+ /// a byte-order mark.
95+ ///
96+ /// - throws: `JSONParser.Error` for any decoding failures, including a
97+ /// source location if needed.
98+ public mutating func parse() throws -> JSON {
99+ try guardAgainstUnsupportedEncodings()
100+ let value = try parseValue()
101+ skipWhitespace()
102+ guard loc == input.count else {
103+ throw Error.EndOfStreamGarbage(offset: loc)
104+ }
105+ return value
106+ }
107+
108+ private mutating func parseValue() throws -> JSON {
109+ guard depth <= ParserMaximumDepth else {
110+ throw Error.ExceededNestingLimit(offset: loc)
111+ }
112+
113+ guard input.count > 0 else {
114+ throw Error.EndOfStreamUnexpected
115+ }
116+
117+ advancing: while loc < input.count {
118+ do {
119+ switch input[loc] {
120+ case Literal.LEFT_BRACKET:
121+ depth += 1
122+ defer { depth -= 1 }
123+ return try decodeArray()
124+
125+ case Literal.LEFT_BRACE:
126+ depth += 1
127+ defer { depth -= 1 }
128+ return try decodeObject()
129+
130+ case Literal.DOUBLE_QUOTE:
131+ return try decodeString()
132+
133+ case Literal.f:
134+ return try decodeFalse()
135+
136+ case Literal.n:
137+ return try decodeNull()
138+
139+ case Literal.t:
140+ return try decodeTrue()
141+
142+ case Literal.MINUS:
143+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .LeadingMinus))
144+
145+ case Literal.zero:
146+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .LeadingZero))
147+
148+ case Literal.one...Literal.nine:
149+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .PreDecimalDigits))
150+
151+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
152+ loc = loc.successor()
153+
154+ default:
155+ break advancing
156+ }
157+ } catch let InternalError.NumberOverflow(offset: start) {
158+ return try decodeNumberAsString(start)
159+ }
160+ }
161+
162+ if loc < input.count {
163+ throw Error.ValueInvalid(offset: loc, character: UnicodeScalar(input[loc]))
164+ } else {
165+ throw Error.EndOfStreamUnexpected
166+ }
167+ }
168+
169+ private mutating func skipWhitespace() {
170+ while loc < input.count {
171+ switch input[loc] {
172+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
173+ loc = loc.successor()
174+
175+ default:
176+ return
177+ }
178+ }
179+ }
180+
181+ private mutating func guardAgainstUnsupportedEncodings() throws {
182+ let header = input.prefix(4)
183+ let encodingPrefixInformation = JSONEncodingDetector.detectEncoding(header)
184+ guard JSONEncodingDetector.supportedEncodings.contains(encodingPrefixInformation.encoding) else {
185+ throw Error.InvalidUnicodeStreamEncoding(detectedEncoding: encodingPrefixInformation.encoding)
186+ }
187+ loc = loc.advancedBy(encodingPrefixInformation.byteOrderMarkLength)
188+ }
189+
190+ private mutating func decodeNull() throws -> JSON {
191+ guard loc.advancedBy(3, limit: input.count) != input.count else {
192+ throw Error.LiteralNilMisspelled(offset: loc)
193+ }
194+
195+ if input[loc+1] != Literal.u
196+ || input[loc+2] != Literal.l
197+ || input[loc+3] != Literal.l {
198+ throw Error.LiteralNilMisspelled(offset: loc)
199+ }
200+
201+ loc += 4
202+ return .Null
203+ }
204+
205+ private mutating func decodeTrue() throws -> JSON {
206+ guard loc.advancedBy(3, limit: input.count) != input.count else {
207+ throw Error.LiteralTrueMisspelled(offset: loc)
208+ }
209+
210+ if input[loc+1] != Literal.r
211+ || input[loc+2] != Literal.u
212+ || input[loc+3] != Literal.e {
213+ throw Error.LiteralTrueMisspelled(offset: loc)
214+ }
215+
216+ loc += 4
217+ return .Bool(true)
218+ }
219+
220+ private mutating func decodeFalse() throws -> JSON {
221+ guard loc.advancedBy(4, limit: input.count) != input.count else {
222+ throw Error.LiteralFalseMisspelled(offset: loc)
223+ }
224+
225+ if input[loc+1] != Literal.a
226+ || input[loc+2] != Literal.l
227+ || input[loc+3] != Literal.s
228+ || input[loc+4] != Literal.e {
229+ throw Error.LiteralFalseMisspelled(offset: loc)
230+ }
231+
232+ loc += 5
233+ return .Bool(false)
234+ }
235+
236+ private var stringDecodingBuffer = [UInt8]()
237+ private mutating func decodeString() throws -> JSON {
238+ let start = loc
239+ loc = loc.successor()
240+ stringDecodingBuffer.removeAll(keepCapacity: true)
241+ while loc < input.count {
242+ switch input[loc] {
243+ case Literal.BACKSLASH:
244+ loc = loc.successor()
245+ switch input[loc] {
246+ case Literal.DOUBLE_QUOTE: stringDecodingBuffer.append(Literal.DOUBLE_QUOTE)
247+ case Literal.BACKSLASH: stringDecodingBuffer.append(Literal.BACKSLASH)
248+ case Literal.SLASH: stringDecodingBuffer.append(Literal.SLASH)
249+ case Literal.b: stringDecodingBuffer.append(Literal.BACKSPACE)
250+ case Literal.f: stringDecodingBuffer.append(Literal.FORMFEED)
251+ case Literal.r: stringDecodingBuffer.append(Literal.RETURN)
252+ case Literal.t: stringDecodingBuffer.append(Literal.TAB)
253+ case Literal.n: stringDecodingBuffer.append(Literal.NEWLINE)
254+ case Literal.u:
255+ loc = loc.successor()
256+ try readUnicodeEscape(start: loc - 2)
257+
258+ // readUnicodeEscape() advances loc on its own, so we'll `continue` now
259+ // to skip the typical "advance past this character" for all the other escapes
260+ continue
261+
262+ default:
263+ throw Error.ControlCharacterUnrecognized(offset: loc)
264+ }
265+ loc = loc.successor()
266+
267+ case Literal.DOUBLE_QUOTE:
268+ loc = loc.successor()
269+ stringDecodingBuffer.append(0)
270+
271+ guard let string = (stringDecodingBuffer.withUnsafeBufferPointer {
272+ String.fromCString(UnsafePointer($0.baseAddress))
273+ }) else {
274+ throw Error.UnicodeEscapeInvalid(offset: start)
275+ }
276+
277+ return .String(string)
278+
279+ case let other:
280+ stringDecodingBuffer.append(other)
281+ loc = loc.successor()
282+ }
283+ }
284+
285+ throw Error.EndOfStreamUnexpected
286+ }
287+
288+ private mutating func readCodeUnit() -> UInt16? {
289+ guard loc + 4 <= input.count else {
290+ return nil
291+ }
292+ var codeUnit: UInt16 = 0
293+ for c in input[loc..<loc+4] {
294+ let nibble: UInt16
295+
296+ switch c {
297+ case Literal.zero...Literal.nine:
298+ nibble = UInt16(c - Literal.zero)
299+
300+ case Literal.a...Literal.f:
301+ nibble = 10 + UInt16(c - Literal.a)
302+
303+ case Literal.A...Literal.F:
304+ nibble = 10 + UInt16(c - Literal.A)
305+
306+ default:
307+ return nil
308+ }
309+ codeUnit = (codeUnit << 4) | nibble
310+ }
311+ loc += 4
312+ return codeUnit
313+ }
314+
315+ private mutating func readUnicodeEscape(start start: Int) throws {
316+ guard let codeUnit = readCodeUnit() else {
317+ throw Error.UnicodeEscapeInvalid(offset: start)
318+ }
319+
320+ let codeUnits: [UInt16]
321+
322+ if UTF16.isLeadSurrogate(codeUnit) {
323+ // First half of a UTF16 surrogate pair - we must parse another code unit and combine them
324+
325+ // First confirm and skip over that we have another "\u"
326+ guard loc + 6 <= input.count && input[loc] == Literal.BACKSLASH && input[loc+1] == Literal.u else {
327+ throw Error.UnicodeEscapeInvalid(offset: start)
328+ }
329+ loc += 2
330+
331+ // Ensure the second code unit is valid for the surrogate pair
332+ guard let secondCodeUnit = readCodeUnit() where UTF16.isTrailSurrogate(secondCodeUnit) else {
333+ throw Error.UnicodeEscapeInvalid(offset: start)
334+ }
335+
336+ codeUnits = [codeUnit, secondCodeUnit]
337+ } else {
338+ codeUnits = [codeUnit]
339+ }
340+
341+ let transcodeHadError = transcode(UTF16.self, UTF8.self, codeUnits.generate(), { self.stringDecodingBuffer.append($0) }, stopOnError: true)
342+
343+ if transcodeHadError {
344+ throw Error.UnicodeEscapeInvalid(offset: start)
345+ }
346+ }
347+
348+ private mutating func decodeArray() throws -> JSON {
349+ let start = loc
350+ loc = loc.successor()
351+ var items = [JSON]()
352+
353+ while loc < input.count {
354+ skipWhitespace()
355+
356+ if loc < input.count && input[loc] == Literal.RIGHT_BRACKET {
357+ loc = loc.successor()
358+ return .Array(items)
359+ }
360+
361+ if !items.isEmpty {
362+ guard loc < input.count && input[loc] == Literal.COMMA else {
363+ throw Error.CollectionMissingSeparator(offset: start)
364+ }
365+ loc = loc.successor()
366+ }
367+
368+ items.append(try parseValue())
369+ }
370+
371+ throw Error.EndOfStreamUnexpected
372+ }
373+
374+ // Decoding objects can be recursive, so we have to keep more than one
375+ // buffer around for building up key/value pairs (to reduce allocations
376+ // when parsing large JSON documents).
377+ //
378+ // Rough estimate of the difference between this and using a fresh
379+ // [(String,JSON)] for the `pairs` variable in decodeObject() below is
380+ // about 12% on an iPhone 5.
381+ private struct DecodeObjectBuffers {
382+ var buffers = [[(String,JSON)]]()
383+
384+ mutating func getBuffer() -> [(String,JSON)] {
385+ if !buffers.isEmpty {
386+ var buffer = buffers.removeLast()
387+ buffer.removeAll(keepCapacity: true)
388+ return buffer
389+ }
390+ return [(String,JSON)]()
391+ }
392+
393+ mutating func putBuffer(buffer: [(String,JSON)]) {
394+ buffers.append(buffer)
395+ }
396+ }
397+
398+ private var decodeObjectBuffers = DecodeObjectBuffers()
399+
400+ private mutating func decodeObject() throws -> JSON {
401+ let start = loc
402+ loc = loc.successor()
403+ var pairs = decodeObjectBuffers.getBuffer()
404+
405+ while loc < input.count {
406+ skipWhitespace()
407+
408+ if loc < input.count && input[loc] == Literal.RIGHT_BRACE {
409+ loc = loc.successor()
410+ var obj = [String:JSON](minimumCapacity: pairs.count)
411+ for (k, v) in pairs {
412+ obj[k] = v
413+ }
414+ decodeObjectBuffers.putBuffer(pairs)
415+ return .Dictionary(obj)
416+ }
417+
418+ if !pairs.isEmpty {
419+ guard loc < input.count && input[loc] == Literal.COMMA else {
420+ throw Error.CollectionMissingSeparator(offset: start)
421+ }
422+ loc = loc.successor()
423+
424+ skipWhitespace()
425+ }
426+
427+ guard loc < input.count && input[loc] == Literal.DOUBLE_QUOTE else {
428+ throw Error.DictionaryMissingKey(offset: start)
429+ }
430+
431+ let key = try decodeString().string()
432+ skipWhitespace()
433+
434+ guard loc < input.count && input[loc] == Literal.COLON else {
435+ throw Error.CollectionMissingSeparator(offset: start)
436+ }
437+ loc = loc.successor()
438+
439+ pairs.append((key, try parseValue()))
440+ }
441+
442+ throw Error.EndOfStreamUnexpected
443+ }
444+
445+ private mutating func decodeIntegralValue(parser: NumberParser) throws -> JSON {
446+ var sign = Sign.Positive
447+ var parser = parser
448+ var value = 0
449+
450+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
451+ // but that causes compile time explosion in Swift 2.2. :-|
452+ while parser.state != .Done {
453+ switch parser.state {
454+ case .LeadingMinus:
455+ sign = .Negative
456+ try parser.parseNegative()
457+
458+ case .LeadingZero:
459+ parser.parseLeadingZero()
460+
461+ case .PreDecimalDigits:
462+ try parser.parsePreDecimalDigits { c in
463+ guard case let (exponent, false) = Int.multiplyWithOverflow(10, value) else {
464+ throw InternalError.NumberOverflow(offset: parser.start)
465+ }
466+
467+ guard case let (newValue, false) = Int.addWithOverflow(exponent, Int(c - Literal.zero)) else {
468+ throw InternalError.NumberOverflow(offset: parser.start)
469+ }
470+
471+ value = newValue
472+ }
473+
474+ case .Decimal, .Exponent:
475+ return try detectingFloatingPointErrors(parser.start) {
476+ try decodeFloatingPointValue(parser, sign: sign, value: Double(value))
477+ }
478+
479+ case .PostDecimalDigits, .ExponentSign, .ExponentDigits:
480+ assertionFailure("Invalid internal state while parsing number")
481+
482+ case .Done:
483+ fatalError("impossible condition")
484+ }
485+ }
486+
487+ guard case let (signedValue, false) = Int.multiplyWithOverflow(sign.rawValue, value) else {
488+ throw InternalError.NumberOverflow(offset: parser.start)
489+ }
490+
491+ loc = parser.loc
492+ return .Int(signedValue)
493+ }
494+
495+ private mutating func decodeFloatingPointValue(parser: NumberParser, sign: Sign, value: Double) throws -> JSON {
496+ var parser = parser
497+ var value = value
498+ var exponentSign = Sign.Positive
499+ var exponent = Double(0)
500+ var position = 0.1
501+
502+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
503+ // but that causes compile time explosion in Swift 2.2. :-|
504+ while parser.state != .Done {
505+ switch parser.state {
506+ case .LeadingMinus, .LeadingZero, .PreDecimalDigits:
507+ assertionFailure("Invalid internal state while parsing number")
508+
509+ case .Decimal:
510+ try parser.parseDecimal()
511+
512+ case .PostDecimalDigits:
513+ parser.parsePostDecimalDigits { c in
514+ value += position * Double(c - Literal.zero)
515+ position /= 10
516+ }
517+
518+ case .Exponent:
519+ exponentSign = try parser.parseExponent()
520+
521+ case .ExponentSign:
522+ try parser.parseExponentSign()
523+
524+ case .ExponentDigits:
525+ parser.parseExponentDigits { c in
526+ exponent = exponent * 10 + Double(c - Literal.zero)
527+ }
528+
529+ case .Done:
530+ fatalError("impossible condition")
531+ }
532+ }
533+
534+ loc = parser.loc
535+ return .Double(Double(sign.rawValue) * value * pow(10, Double(exponentSign.rawValue) * exponent))
536+ }
537+
538+ private mutating func decodeNumberAsString(start: Int) throws -> JSON {
539+ var parser: NumberParser = {
540+ let state: NumberParser.State
541+ switch input[start] {
542+ case Literal.MINUS: state = .LeadingMinus
543+ case Literal.zero: state = .LeadingZero
544+ case Literal.one...Literal.nine: state = .PreDecimalDigits
545+ default:
546+ fatalError("Internal error: decodeNumber called on not-a-number")
547+ }
548+ return NumberParser(loc: start, input: input, state: state)
549+ }()
550+
551+ stringDecodingBuffer.removeAll(keepCapacity: true)
552+
553+ while true {
554+ switch parser.state {
555+ case .LeadingMinus:
556+ try parser.parseNegative()
557+ stringDecodingBuffer.append(Literal.MINUS)
558+
559+ case .LeadingZero:
560+ parser.parseLeadingZero()
561+ stringDecodingBuffer.append(Literal.zero)
562+
563+ case .PreDecimalDigits:
564+ parser.parsePreDecimalDigits { stringDecodingBuffer.append($0) }
565+
566+ case .Decimal:
567+ try parser.parseDecimal()
568+ stringDecodingBuffer.append(Literal.PERIOD)
569+
570+ case .PostDecimalDigits:
571+ parser.parsePostDecimalDigits { stringDecodingBuffer.append($0) }
572+
573+ case .Exponent:
574+ stringDecodingBuffer.append(input[parser.loc])
575+ _ = try parser.parseExponent()
576+
577+ case .ExponentSign:
578+ stringDecodingBuffer.append(input[parser.loc])
579+ try parser.parseExponentSign()
580+
581+ case .ExponentDigits:
582+ parser.parseExponentDigits { stringDecodingBuffer.append($0) }
583+
584+ case .Done:
585+ stringDecodingBuffer.append(0)
586+ guard let string = (stringDecodingBuffer.withUnsafeBufferPointer {
587+ String.fromCString(UnsafePointer($0.baseAddress))
588+ }) else {
589+ // Should never fail - any problems with the number string should
590+ // result in thrown errors above
591+ fatalError("Internal error: Invalid numeric string")
592+ }
593+
594+ loc = parser.loc
595+ return .String(string)
596+ }
597+ }
598+ }
599+
600+ private func detectingFloatingPointErrors<T>(loc: Int, @noescape _ f: () throws -> T) throws -> T {
601+ let flags = FE_UNDERFLOW | FE_OVERFLOW
602+ feclearexcept(flags)
603+ let value = try f()
604+ guard fetestexcept(flags) == 0 else {
605+ throw InternalError.NumberOverflow(offset: loc)
606+ }
607+ return value
608+ }
609+}
610+
611+private struct NumberParser {
612+ enum State {
613+ case LeadingMinus
614+ case LeadingZero
615+ case PreDecimalDigits
616+ case Decimal
617+ case PostDecimalDigits
618+ case Exponent
619+ case ExponentSign
620+ case ExponentDigits
621+ case Done
622+ }
623+
624+ let start: Int
625+ var loc = 0
626+ var state: State
627+ let input: UnsafeBufferPointer<UInt8>
628+
629+ init(loc: Int, input: UnsafeBufferPointer<UInt8>, state: State) {
630+ assert(loc < input.count, "Invalid input to NumberParser")
631+ self.start = loc
632+ self.loc = loc
633+ self.input = input
634+ self.state = state
635+ }
636+
637+ mutating func parseNegative() throws {
638+ assert(state == .LeadingMinus, "Unexpected state entering parseNegative")
639+
640+ loc = loc.successor()
641+ guard loc < input.count else {
642+ throw JSONParser.Error.EndOfStreamUnexpected
643+ }
644+
645+ switch input[loc] {
646+ case Literal.zero:
647+ state = .LeadingZero
648+
649+ case Literal.one...Literal.nine:
650+ state = .PreDecimalDigits
651+
652+ default:
653+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
654+ }
655+ }
656+
657+ mutating func parseLeadingZero() {
658+ assert(state == .LeadingZero, "Unexpected state entering parseLeadingZero")
659+
660+ loc = loc.successor()
661+ guard loc < input.count else {
662+ state = .Done
663+ return
664+ }
665+
666+ guard input[loc] == Literal.PERIOD else {
667+ state = .Done
668+ return
669+ }
670+
671+ state = .Decimal
672+ }
673+
674+ mutating func parsePreDecimalDigits(@noescape f: (UInt8) throws -> Void) rethrows {
675+ assert(state == .PreDecimalDigits, "Unexpected state entering parsePreDecimalDigits")
676+ advancing: while loc < input.count {
677+ let c = input[loc]
678+ switch c {
679+ case Literal.zero...Literal.nine:
680+ try f(c)
681+ loc = loc.successor()
682+
683+ case Literal.PERIOD:
684+ state = .Decimal
685+ return
686+
687+ case Literal.e, Literal.E:
688+ state = .Exponent
689+ return
690+
691+ default:
692+ break advancing
693+ }
694+ }
695+
696+ state = .Done
697+ }
698+
699+ mutating func parseDecimal() throws {
700+ assert(state == .Decimal, "Unexpected state entering parseDecimal")
701+ loc = loc.successor()
702+ guard loc < input.count else {
703+ throw JSONParser.Error.EndOfStreamUnexpected
704+ }
705+
706+ switch input[loc] {
707+ case Literal.zero...Literal.nine:
708+ state = .PostDecimalDigits
709+
710+ default:
711+ throw JSONParser.Error.NumberMissingFractionalDigits(offset: start)
712+ }
713+ }
714+
715+ mutating func parsePostDecimalDigits(@noescape f: (UInt8) throws -> Void) rethrows {
716+ assert(state == .PostDecimalDigits, "Unexpected state entering parsePostDecimalDigits")
717+
718+ advancing: while loc < input.count {
719+ let c = input[loc]
720+ switch c {
721+ case Literal.zero...Literal.nine:
722+ try f(c)
723+ loc = loc.successor()
724+
725+ case Literal.e, Literal.E:
726+ state = .Exponent
727+ return
728+
729+ default:
730+ break advancing
731+ }
732+ }
733+
734+ state = .Done
735+ }
736+
737+ mutating func parseExponent() throws -> JSONParser.Sign {
738+ assert(state == .Exponent, "Unexpected state entering parseExponent")
739+
740+ loc = loc.successor()
741+ guard loc < input.count else {
742+ throw JSONParser.Error.EndOfStreamUnexpected
743+ }
744+
745+ switch input[loc] {
746+ case Literal.zero...Literal.nine:
747+ state = .ExponentDigits
748+
749+ case Literal.PLUS:
750+ state = .ExponentSign
751+
752+ case Literal.MINUS:
753+ state = .ExponentSign
754+ return .Negative
755+
756+ default:
757+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
758+ }
759+
760+ return .Positive
761+ }
762+
763+ mutating func parseExponentSign() throws {
764+ assert(state == .ExponentSign, "Unexpected state entering parseExponentSign")
765+ loc = loc.successor()
766+ guard loc < input.count else {
767+ throw JSONParser.Error.EndOfStreamUnexpected
768+ }
769+
770+ switch input[loc] {
771+ case Literal.zero...Literal.nine:
772+ state = .ExponentDigits
773+
774+ default:
775+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
776+ }
777+ }
778+
779+ mutating func parseExponentDigits(@noescape f: (UInt8) throws -> Void) rethrows {
780+ assert(state == .ExponentDigits, "Unexpected state entering parseExponentDigits")
781+ advancing: while loc < input.count {
782+ let c = input[loc]
783+ switch c {
784+ case Literal.zero...Literal.nine:
785+ try f(c)
786+ loc = loc.successor()
787+
788+ default:
789+ break advancing
790+ }
791+ }
792+
793+ state = .Done
794+ }
795+}
796+
797+public extension JSONParser {
798+
799+ /// Creates a `JSONParser` ready to parse UTF-8 encoded `NSData`.
800+ ///
801+ /// If the data is mutable, it is copied before parsing. The data's lifetime
802+ /// is extended for the duration of parsing.
803+ init(utf8Data inData: NSData) {
804+ let data = inData.copy() as! NSData
805+ let buffer = UnsafeBufferPointer(start: UnsafePointer<UInt8>(data.bytes), count: data.length)
806+ self.init(buffer: buffer, owner: data)
807+ }
808+
809+ /// Creates a `JSONParser` from the code units represented by the `string`.
810+ ///
811+ /// The synthesized string is lifetime-extended for the duration of parsing.
812+ init(string: String) {
813+ let codePoints = string.nulTerminatedUTF8
814+ let buffer = codePoints.withUnsafeBufferPointer { nulTerminatedBuffer in
815+ // don't want to include the nul termination in the buffer - trim it off
816+ UnsafeBufferPointer(start: nulTerminatedBuffer.baseAddress, count: nulTerminatedBuffer.count - 1)
817+ }
818+ self.init(buffer: buffer, owner: codePoints)
819+ }
820+
821+}
822+
823+extension JSONParser: JSONParserType {
824+
825+ /// Creates an instance of `JSON` from UTF-8 encoded `NSData`.
826+ /// - parameter data: An instance of `NSData` to parse `JSON` from.
827+ /// - throws: Any `JSONParser.Error` that arises during decoding.
828+ /// - seealso: JSONParser.parse()
829+ public static func createJSONFromData(data: NSData) throws -> JSON {
830+ var parser = JSONParser(utf8Data: data)
831+ return try parser.parse()
832+ }
833+
834+}
835+
836+// MARK: - Errors
837+
838+extension JSONParser {
839+
840+ /// Enumeration describing possible errors that occur while parsing a JSON
841+ /// document. Most errors include an associated `offset`, representing the
842+ /// offset into the UTF-8 characters making up the document where the error
843+ /// occurred.
844+ public enum Error: ErrorType {
845+ /// The parser ran out of data prematurely. This usually means a value
846+ /// was not escaped, such as a string literal not ending with a double
847+ /// quote.
848+ case EndOfStreamUnexpected
849+
850+ /// Unexpected non-whitespace data was left around `offset` after
851+ /// parsing all valid JSON.
852+ case EndOfStreamGarbage(offset: Int)
853+
854+ /// Too many nested objects or arrays occured at the literal started
855+ /// around `offset`.
856+ case ExceededNestingLimit(offset: Int)
857+
858+ /// A `character` was not a valid start of a value around `offset`.
859+ case ValueInvalid(offset: Int, character: UnicodeScalar)
860+
861+ /// Badly-formed Unicode escape sequence at `offset`. A Unicode escape
862+ /// uses the text "\u" followed by 4 hex digits, such as "\uF09F\uA684"
863+ /// to represent U+1F984, "UNICORN FACE".
864+ case UnicodeEscapeInvalid(offset: Int)
865+
866+ /// Badly-formed control character around `offset`. JSON supports
867+ /// backslash-escaped double quotes, slashes, whitespace control codes,
868+ /// and Unicode escape sequences.
869+ case ControlCharacterUnrecognized(offset: Int)
870+
871+ /// Invalid token, expected `null` around `offset`
872+ case LiteralNilMisspelled(offset: Int)
873+
874+ /// Invalid token, expected `true` around `offset`
875+ case LiteralTrueMisspelled(offset: Int)
876+
877+ /// Invalid token, expected `false` around `offset`
878+ case LiteralFalseMisspelled(offset: Int)
879+
880+ /// Badly-formed collection at given `offset`, expected `,` or `:`
881+ case CollectionMissingSeparator(offset: Int)
882+
883+ /// While parsing an object literal, a value was found without a key
884+ /// around `offset`. The start of a string literal was expected.
885+ case DictionaryMissingKey(offset: Int)
886+
887+ /// Badly-formed number with no digits around `offset`. After a decimal
888+ /// point, a number must include some number of digits.
889+ case NumberMissingFractionalDigits(offset: Int)
890+
891+ /// Badly-formed number with symbols ("-" or "e") but no following
892+ /// digits around `offset`.
893+ case NumberSymbolMissingDigits(offset: Int)
894+
895+ /// Supplied data is encoded in an unsupported format.
896+ case InvalidUnicodeStreamEncoding(detectedEncoding: JSONEncodingDetector.Encoding)
897+ }
898+
899+ private enum InternalError: ErrorType {
900+ /// Attempted to parse an integer outside the range of [Int.min, Int.max]
901+ /// or a double outside the range of representable doubles. Note that
902+ /// for doubles, this could be an overflow or an underflow - we don't
903+ /// get enough information from Swift here to know which it is. The number
904+ /// causing the overflow/underflow began at `offset`.
905+ case NumberOverflow(offset: Int)
906+ }
907+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONParsing.swiftnew file+126
@@ -0,0 +1,126 @@
1+//
2+// JSONParsing.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+// MARK: - Deserialize JSON
12+
13+/// Protocol describing a backend parser that can produce `JSON` from `NSData`.
14+public protocol JSONParserType {
15+
16+ /// Creates an instance of `JSON` from `NSData`.
17+ /// - parameter data: An instance of `NSData` to use to create `JSON`.
18+ /// - throws: An error that may arise from calling `JSONObjectWithData(_:options:)` on `NSJSONSerialization` with the given data.
19+ /// - returns: An instance of `JSON`.
20+ static func createJSONFromData(data: NSData) throws -> JSON
21+
22+}
23+
24+extension JSON {
25+
26+ /// Create `JSON` from UTF-8 `data`. By default, parses using the
27+ /// Swift-native `JSONParser` backend.
28+ public init(data: NSData, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
29+ self = try parser.createJSONFromData(data)
30+ }
31+
32+ /// Create `JSON` from UTF-8 `string`.
33+ public init(jsonString: Swift.String, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
34+ self = try parser.createJSONFromData((jsonString as NSString).dataUsingEncoding(NSUTF8StringEncoding) ?? NSData())
35+ }
36+}
37+
38+// MARK: - NSJSONSerialization
39+
40+extension NSJSONSerialization: JSONParserType {
41+
42+ // MARK: Decode NSData
43+
44+ /// Use the built-in, Objective-C based JSON parser to create `JSON`.
45+ /// - parameter data: An instance of `NSData`.
46+ /// - returns: An instance of `JSON`.
47+ /// - throws: An error that may arise if the `NSData` cannot be parsed into an object.
48+ public static func createJSONFromData(data: NSData) throws -> JSON {
49+ return makeJSON(try NSJSONSerialization.JSONObjectWithData(data, options: []))
50+ }
51+
52+ // MARK: Make JSON
53+
54+ /// Makes a `JSON` object by matching its argument to a case in the `JSON` enum.
55+ /// - parameter object: The instance of `AnyObject` returned from serializing the JSON.
56+ /// - returns: An instance of `JSON` matching the JSON given to the function.
57+ private static func makeJSON(object: AnyObject) -> JSON {
58+ switch object {
59+ case let n as NSNumber:
60+ let numberType = CFNumberGetType(n)
61+ switch numberType {
62+ case .CharType:
63+ return .Bool(n.boolValue)
64+
65+ case .ShortType, .IntType, .LongType, .CFIndexType, .NSIntegerType, .SInt8Type, .SInt16Type, .SInt32Type:
66+ return .Int(n.integerValue)
67+
68+ case .SInt64Type, .LongLongType /* overflows 32-bit Int */:
69+ #if /* 32-bit arch */ arch(arm) || arch(i386)
70+ // Why double, when the Freddy parser would bump to String?
71+ //
72+ // Returning Double avoids making the type depend on whether you're running
73+ // 32-bit or 64-bit code when using the NSJSONSerialization parser.
74+ // NSJSONSerialization appears to bump numbers larger than Int.max to Double on
75+ // 64-bit platforms but use .SInt64Type on 32-bit platforms.
76+ // If we returned a String here, you'd get a String value on 32-bit,
77+ // but a Double value on 64-bit. Instead, we return Double.
78+ //
79+ // This means that, if you switch parsers,
80+ // you'll have to switch from .double to .string for pulling out
81+ // overflowing values, but if you stick with a single parser,
82+ // you at least won't have architecture-dependent lookups!
83+ return .Double(n.doubleValue)
84+ #else
85+ return .Int(n.integerValue)
86+ #endif
87+
88+ case .Float32Type, .Float64Type, .FloatType, .DoubleType, .CGFloatType:
89+ return .Double(n.doubleValue)
90+ }
91+
92+ case let arr as [AnyObject]:
93+ return makeJSONArray(arr)
94+
95+ case let dict as [Swift.String: AnyObject]:
96+ return makeJSONDictionary(dict)
97+
98+ case let s as Swift.String:
99+ return .String(s)
100+
101+ default:
102+ return .Null
103+ }
104+ }
105+
106+ // MARK: Make a JSON Array
107+
108+ /// Makes a `JSON` array from the object passed in.
109+ /// - parameter jsonArray: The array to transform into a `JSON`.
110+ /// - returns: An instance of `JSON` matching the array.
111+ private static func makeJSONArray(jsonArray: [AnyObject]) -> JSON {
112+ return .Array(jsonArray.map(makeJSON))
113+ }
114+
115+ // MARK: Make a JSON Dictionary
116+
117+ /// Makes a `JSON` dictionary from the Cocoa dictionary passed in.
118+ /// - parameter jsonDict: The dictionary to transform into `JSON`.
119+ /// - returns: An instance of `JSON` matching the dictionary.
120+ private static func makeJSONDictionary(jsonDict: [Swift.String: AnyObject]) -> JSON {
121+ return JSON(jsonDict.lazy.map { (key, value) in
122+ (key, makeJSON(value))
123+ })
124+ }
125+
126+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONSerializing.swiftnew file+43
@@ -0,0 +1,43 @@
1+// Copyright (C) 2016 Big Nerd Ranch, Inc. Licensed under the MIT license WITHOUT ANY WARRANTY.
2+
3+import Foundation
4+
5+// MARK: - Serialize JSON
6+
7+extension JSON {
8+
9+ /// Attempt to serialize `JSON` into an `NSData`.
10+ /// - returns: A byte-stream containing the `JSON` ready for wire transfer.
11+ /// - throws: Errors that arise from `NSJSONSerialization`.
12+ /// - see: Foundation.NSJSONSerialization
13+ public func serialize() throws -> NSData {
14+ let obj: AnyObject = toNSJSONSerializationObject()
15+ return try NSJSONSerialization.dataWithJSONObject(obj, options: [])
16+ }
17+
18+ /// A function to help with the serialization of `JSON`.
19+ /// - returns: An `AnyObject` suitable for `NSJSONSerialization`'s use.
20+ private func toNSJSONSerializationObject() -> AnyObject {
21+ switch self {
22+ case .Array(let jsonArray):
23+ return jsonArray.map { $0.toNSJSONSerializationObject() }
24+ case .Dictionary(let jsonDictionary):
25+ var cocoaDictionary = Swift.Dictionary<Swift.String, AnyObject>(minimumCapacity: jsonDictionary.count)
26+ for (key, json) in jsonDictionary {
27+ cocoaDictionary[key] = json.toNSJSONSerializationObject()
28+ }
29+ return cocoaDictionary
30+ case .String(let str):
31+ return str
32+ case .Double(let num):
33+ return num
34+ case .Int(let int):
35+ return int
36+ case .Bool(let b):
37+ return b
38+ case .Null:
39+ return NSNull()
40+ }
41+
42+ }
43+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/JSONSubscripting.swiftnew file+705
@@ -0,0 +1,705 @@
1+//
2+// JSONSubscripting.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 8/15/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+// MARK: JSONPathType
10+
11+/// A protocol used to define a path within an instance of `JSON` that leads to some desired value.
12+///
13+/// A custom type, such as a `RawRepresentable` enum, may be made to conform to `JSONPathType`
14+/// and used with the subscript APIs.
15+public protocol JSONPathType {
16+ /// Use `self` to key into a `dictionary`.
17+ ///
18+ /// Unlike Swift dictionaries, failing to find a value for a key should throw
19+ /// an error rather than convert to `nil`.
20+ ///
21+ /// Upon failure, implementers should throw an error from `JSON.Error`.
22+ func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON
23+
24+ /// Use `self` to index into an `array`.
25+ ///
26+ /// Unlike Swift array, attempting to index outside the collection's bounds
27+ /// should throw an error rather than crash.
28+ ///
29+ /// Upon failure, implementers should throw an error from `JSON.Error`.
30+ func valueInArray(array: [JSON]) throws -> JSON
31+}
32+
33+extension JSONPathType {
34+
35+ /// The default behavior for keying into a dictionary is to throw
36+ /// `JSON.Error.UnexpectedSubscript`.
37+ public func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON {
38+ throw JSON.Error.UnexpectedSubscript(type: Self.self)
39+ }
40+
41+ /// The default behavior for indexing into an array is to throw
42+ /// `JSON.Error.UnexpectedSubscript`.
43+ public func valueInArray(array: [JSON]) throws -> JSON {
44+ throw JSON.Error.UnexpectedSubscript(type: Self.self)
45+ }
46+
47+}
48+
49+extension String: JSONPathType {
50+
51+ /// A method used to retrieve a value from a given dictionary for a specific key.
52+ /// - parameter dictionary: A `Dictionary` with `String` keys and `JSON` values.
53+ /// - throws: `.KeyNotFound` with an associated value of `self`, where `self` is a `String`,
54+ /// should the key not be present within the `JSON`.
55+ /// - returns: The `JSON` value associated with the given key.
56+ public func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON {
57+ guard let next = dictionary[self] else {
58+ throw JSON.Error.KeyNotFound(key: self)
59+ }
60+ return next
61+ }
62+
63+}
64+
65+extension Int: JSONPathType {
66+
67+ /// A method used to retrieve a value from a given array for a specific index.
68+ /// - parameter array: An `Array` of `JSON`.
69+ /// - throws: `.IndexOutOfBounds` with an associated value of `self`, where `self` is an `Int`,
70+ /// should the index not be within the valid range for the array of `JSON`.
71+ /// - returns: The `JSON` value found at the given index.
72+ public func valueInArray(array: [JSON]) throws -> JSON {
73+ guard case array.indices = self else {
74+ throw JSON.Error.IndexOutOfBounds(index: self)
75+ }
76+ return array[self]
77+ }
78+
79+}
80+
81+// MARK: - Subscripting core
82+
83+private extension JSON {
84+
85+ enum SubscriptError: ErrorType {
86+ case SubscriptIntoNull(JSONPathType)
87+ }
88+
89+ func valueForPathFragment(fragment: JSONPathType, detectNull: Swift.Bool) throws -> JSON {
90+ switch self {
91+ case .Null where detectNull:
92+ throw SubscriptError.SubscriptIntoNull(fragment)
93+ case let .Dictionary(dict):
94+ return try fragment.valueInDictionary(dict)
95+ case let .Array(array):
96+ return try fragment.valueInArray(array)
97+ default:
98+ throw Error.UnexpectedSubscript(type: fragment.dynamicType)
99+ }
100+ }
101+
102+ func valueAtPath(path: [JSONPathType], detectNull: Swift.Bool = false) throws -> JSON {
103+ var result = self
104+ for fragment in path {
105+ result = try result.valueForPathFragment(fragment, detectNull: detectNull)
106+ }
107+ return result
108+ }
109+
110+}
111+
112+// MARK: - Subscripting operator
113+
114+extension JSON {
115+
116+ public subscript(key: Swift.String) -> JSON? {
117+ return try? valueForPathFragment(key, detectNull: false)
118+ }
119+
120+ public subscript(index: Swift.Int) -> JSON? {
121+ return try? valueForPathFragment(index, detectNull: false)
122+ }
123+
124+}
125+
126+// MARK: - Simple member unpacking
127+
128+extension JSON {
129+
130+ /// Attempts to decode into the returning type from a path into JSON.
131+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
132+ /// - parameter type: If the context this method is called from does not
133+ /// make the return type clear, pass a type implementing `JSONDecodable`
134+ /// to disambiguate the type to decode with.
135+ /// - returns: An initialized member from the inner JSON.
136+ /// - throws: One of the following errors contained in `JSON.Error`:
137+ /// * `KeyNotFound`: A given `String` key does not exist inside a
138+ /// descendant `JSON` dictionary.
139+ /// * `IndexOutOfBounds`: A given `Int` index is outside the bounds of a
140+ /// descendant `JSON` array.
141+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
142+ /// corresponding `JSON` value.
143+ /// * `TypeNotConvertible`: The target value's type inside of
144+ /// the `JSON` instance does not match `Decoded`.
145+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> Decoded {
146+ return try Decoded(json: valueAtPath(path))
147+ }
148+
149+ /// Retrieves a `Double` from a path into JSON.
150+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
151+ /// - returns: A floating-point `Double`
152+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
153+ /// - seealso: `JSON.decode(_:type:)`
154+ public func double(path: JSONPathType...) throws -> Swift.Double {
155+ return try Swift.Double(json: valueAtPath(path))
156+ }
157+
158+ /// Retrieves an `Int` from a path into JSON.
159+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
160+ /// - returns: A numeric `Int`
161+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
162+ /// - seealso: `JSON.decode(_:type:)`
163+ public func int(path: JSONPathType...) throws -> Swift.Int {
164+ return try Swift.Int(json: valueAtPath(path))
165+ }
166+
167+ /// Retrieves a `String` from a path into JSON.
168+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
169+ /// - returns: A textual `String`
170+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
171+ /// - seealso: `JSON.decode(_:type:)`
172+ public func string(path: JSONPathType...) throws -> Swift.String {
173+ return try Swift.String(json: valueAtPath(path))
174+ }
175+
176+ /// Retrieves a `Bool` from a path into JSON.
177+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
178+ /// - returns: A truthy `Bool`
179+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
180+ /// - seealso: `JSON.decode(_:type:)`
181+ public func bool(path: JSONPathType...) throws -> Swift.Bool {
182+ return try Swift.Bool(json: valueAtPath(path))
183+ }
184+
185+ /// Retrieves a `[JSON]` from a path into JSON.
186+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
187+ /// - returns: An `Array` of `JSON` elements
188+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
189+ /// - seealso: `JSON.decode(_:type:)`
190+ public func array(path: JSONPathType...) throws -> [JSON] {
191+ return try JSON.getArray(valueAtPath(path))
192+ }
193+
194+ /// Attempts to decode many values from a descendant JSON array at a path
195+ /// into JSON.
196+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
197+ /// - parameter type: If the context this method is called from does not
198+ /// make the return type clear, pass a type implementing `JSONDecodable`
199+ /// to disambiguate the type to decode with.
200+ /// - returns: An `Array` of decoded elements
201+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`, or
202+ /// any error that arises from decoding the contained values.
203+ /// - seealso: `JSON.decode(_:type:)`
204+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> [Decoded] {
205+ return try JSON.getArrayOf(valueAtPath(path))
206+ }
207+
208+ /// Retrieves a `[String: JSON]` from a path into JSON.
209+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
210+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
211+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
212+ /// - seealso: `JSON.decode(_:type:)`
213+ public func dictionary(path: JSONPathType...) throws -> [Swift.String: JSON] {
214+ return try JSON.getDictionary(valueAtPath(path))
215+ }
216+
217+ /// Attempts to decode many values from a descendant JSON object at a path
218+ /// into JSON.
219+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
220+ /// - parameter type: If the context this method is called from does not
221+ /// make the return type clear, pass a type implementing `JSONDecodable`
222+ /// to disambiguate the value type to decode with.
223+ /// - returns: A `Dictionary` of `String` keys and decoded values.
224+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)` or
225+ /// any error that arises from decoding the contained values.
226+ /// - seealso: `JSON.decode(_:type:)`
227+ public func dictionaryOf<Decoded: JSONDecodable>(path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> [Swift.String: Decoded] {
228+ return try JSON.getDictionaryOf(valueAtPath(path))
229+ }
230+
231+}
232+
233+// MARK: - NotFound-Or-Null-to-Optional unpacking
234+
235+extension JSON {
236+
237+ /// An `OptionSetType` used to represent the different options available for subscripting `JSON` with `null` values or missing keys.
238+ /// * `.NullBecomesNil` - Treat `null` values as `nil`.
239+ /// * `.MissingKeyBecomesNil` - Treat missing keys as `nil`.
240+ public struct SubscriptingOptions: OptionSetType {
241+ public let rawValue: Swift.Int
242+ public init(rawValue: Swift.Int) {
243+ self.rawValue = rawValue
244+ }
245+
246+ /// Treat `null` values as `nil`.
247+ public static let NullBecomesNil = SubscriptingOptions(rawValue: 1 << 0)
248+ /// Treat missing keys as `nil`.
249+ public static let MissingKeyBecomesNil = SubscriptingOptions(rawValue: 1 << 1)
250+ }
251+
252+ private func mapOptionalAtPath<Value>(path: [JSONPathType], alongPath: SubscriptingOptions, @noescape transform: JSON throws -> Value) throws -> Value? {
253+ let detectNull = alongPath.contains(.NullBecomesNil)
254+ let detectNotFound = alongPath.contains(.MissingKeyBecomesNil)
255+ var json: JSON?
256+ do {
257+ json = try valueAtPath(path, detectNull: detectNull)
258+ return try json.map(transform)
259+ } catch Error.IndexOutOfBounds where detectNotFound {
260+ return nil
261+ } catch Error.KeyNotFound where detectNotFound {
262+ return nil
263+ } catch Error.ValueNotConvertible where detectNull && json == .Null {
264+ return nil
265+ } catch SubscriptError.SubscriptIntoNull where detectNull {
266+ return nil
267+ }
268+ }
269+}
270+
271+extension JSON {
272+
273+ /// Optionally decodes into the returning type from a path into JSON.
274+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
275+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
276+ /// - parameter type: If the context this method is called from does not
277+ /// make the return type clear, pass a type implementing `JSONDecodable`
278+ /// to disambiguate the type to decode with.
279+ /// - returns: A decoded value from the inner JSON if found, or `nil`.
280+ /// - throws: One of the following errors contained in `JSON.Error`:
281+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
282+ /// `JSON` dictionary.
283+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
284+ /// descendant `JSON` array.
285+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
286+ /// corresponding `JSON` value.
287+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
288+ /// instance does not match the decoded value.
289+ /// * Any error that arises from decoding the value.
290+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> Decoded? {
291+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
292+ }
293+
294+ /// Optionally retrieves a `Double` from a path into JSON.
295+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
296+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
297+ /// - returns: A `Double` if a value could be found, otherwise `nil`.
298+ /// - throws: One of the following errors contained in `JSON.Error`:
299+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
300+ /// `JSON` dictionary.
301+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
302+ /// descendant `JSON` array.
303+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
304+ /// corresponding `JSON` value.
305+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
306+ /// instance does not match the decoded value.
307+ public func double(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Double? {
308+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
309+ }
310+
311+ /// Optionally retrieves a `Int` from a path into JSON.
312+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
313+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
314+ /// - returns: A numeric `Int` if a value could be found, otherwise `nil`.
315+ /// - throws: One of the following errors contained in `JSON.Error`:
316+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
317+ /// `JSON` dictionary.
318+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
319+ /// descendant `JSON` array.
320+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
321+ /// corresponding `JSON` value.
322+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
323+ /// instance does not match the decoded value.
324+ public func int(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Int? {
325+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
326+ }
327+
328+ /// Optionally retrieves a `String` from a path into JSON.
329+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
330+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
331+ /// - returns: A text `String` if a value could be found, otherwise `nil`.
332+ /// - throws: One of the following errors contained in `JSON.Error`:
333+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
334+ /// `JSON` dictionary.
335+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
336+ /// descendant `JSON` array.
337+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
338+ /// corresponding `JSON` value.
339+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
340+ /// instance does not match the decoded value.
341+ public func string(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.String? {
342+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
343+ }
344+
345+ /// Optionally retrieves a `Bool` from a path into JSON.
346+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
347+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
348+ /// - returns: A truthy `Bool` if a value could be found, otherwise `nil`.
349+ /// - throws: One of the following errors contained in `JSON.Error`:
350+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
351+ /// `JSON` dictionary.
352+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
353+ /// descendant `JSON` array.
354+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
355+ /// corresponding `JSON` value.
356+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
357+ /// instance does not match the decoded value.
358+ public func bool(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Bool? {
359+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
360+ }
361+
362+ /// Optionally retrieves a `[JSON]` from a path into the recieving structure.
363+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
364+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
365+ /// - returns: An `Array` of `JSON` elements if a value could be found,
366+ /// otherwise `nil`.
367+ /// - throws: One of the following errors contained in `JSON.Error`:
368+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
369+ /// `JSON` dictionary.
370+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
371+ /// descendant `JSON` array.
372+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
373+ /// corresponding `JSON` value.
374+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
375+ /// instance does not match the decoded value.
376+ public func array(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [JSON]? {
377+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
378+ }
379+
380+ /// Optionally decodes many values from a descendant array at a path into
381+ /// JSON.
382+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
383+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
384+ /// - parameter type: If the context this method is called from does not
385+ /// make the return type clear, pass a type implementing `JSONDecodable`
386+ /// to disambiguate the value type to decode with.
387+ /// - returns: An `Array` of decoded elements if found, otherwise `nil`.
388+ /// - throws: One of the following errors contained in `JSON.Error`:
389+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
390+ /// `JSON` dictionary.
391+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
392+ /// descendant `JSON` array.
393+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
394+ /// corresponding `JSON` value.
395+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
396+ /// instance does not match the decoded value.
397+ /// * Any error that arises from decoding the value.
398+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> [Decoded]? {
399+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
400+ }
401+
402+ /// Optionally retrieves a `[String: JSON]` from a path into the recieving
403+ /// structure.
404+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
405+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
406+ /// - returns: A `Dictionary` of `String` mapping to `JSON` elements if a
407+ /// value could be found, otherwise `nil`.
408+ /// - throws: One of the following errors contained in `JSON.Error`:
409+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
410+ /// `JSON` dictionary.
411+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
412+ /// descendant `JSON` array.
413+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
414+ /// corresponding `JSON` value.
415+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
416+ /// instance does not match the decoded value.
417+ public func dictionary(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [Swift.String: JSON]? {
418+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
419+ }
420+
421+ /// Optionally attempts to decode many values from a descendant object at a path
422+ /// into JSON.
423+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
424+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
425+ /// - parameter type: If the context this method is called from does not
426+ /// make the return type clear, pass a type implementing `JSONDecodable`
427+ /// to disambiguate the value type to decode with.
428+ /// - returns: A `Dictionary` of `String` mapping to decoded elements if a
429+ /// value could be found, otherwise `nil`.
430+ /// - throws: One of the following errors contained in `JSON.Error`:
431+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
432+ /// `JSON` dictionary.
433+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
434+ /// descendant `JSON` array.
435+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
436+ /// corresponding `JSON` value.
437+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
438+ /// instance does not match the decoded value.
439+ /// * Any error that arises from decoding the value.
440+ public func dictionaryOf<Decoded: JSONDecodable>(path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> [Swift.String: Decoded]? {
441+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionaryOf)
442+ }
443+
444+}
445+
446+// MARK: - Missing-with-fallback unpacking
447+
448+extension JSON {
449+
450+ private func mapOptionalAtPath<Value>(path: [JSONPathType], @noescape fallback: () -> Value, @noescape transform: JSON throws -> Value) throws -> Value {
451+ return try mapOptionalAtPath(path, alongPath: .MissingKeyBecomesNil, transform: transform) ?? fallback()
452+ }
453+
454+ /// Attempts to decode into the returning type from a path into
455+ /// JSON, or returns a fallback if not found.
456+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
457+ /// - parameter fallback: Value to use when one is missing at the subscript.
458+ /// - returns: An initialized member from the inner JSON.
459+ /// - throws: One of the following errors contained in `JSON.Error`:
460+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
461+ /// corresponding `JSON` value.
462+ /// * `TypeNotConvertible`: The target value's type inside of
463+ /// the `JSON` instance does not match `Decoded`.
464+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., @autoclosure or fallback: () -> Decoded) throws -> Decoded {
465+ return try mapOptionalAtPath(path, fallback: fallback, transform: Decoded.init)
466+ }
467+
468+ /// Retrieves a `Double` from a path into JSON or a fallback if not found.
469+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
470+ /// - parameter fallback: `Double` to use when one is missing at the subscript.
471+ /// - returns: A floating-point `Double`
472+ /// - throws: One of the `JSON.Error` cases thrown by calling `mapOptionalAtPath(_:fallback:transform:)`.
473+ /// - seealso: `optionalAtPath(_:ifNotFound)`.
474+ public func double(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Double) throws -> Swift.Double {
475+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Double.init)
476+ }
477+
478+ /// Retrieves an `Int` from a path into JSON or a fallback if not found.
479+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
480+ /// - parameter fallback: `Int` to use when one is missing at the subscript.
481+ /// - returns: A numeric `Int`
482+ /// - throws: One of the following errors contained in `JSON.Error`:
483+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
484+ /// `JSON` dictionary.
485+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
486+ /// descendant `JSON` array.
487+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
488+ /// corresponding `JSON` value.
489+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
490+ /// instance does not match the decoded value.
491+ public func int(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Int) throws -> Swift.Int {
492+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Int.init)
493+ }
494+
495+ /// Retrieves a `String` from a path into JSON or a fallback if not found.
496+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
497+ /// - parameter fallback: `String` to use when one is missing at the subscript.
498+ /// - returns: A textual `String`
499+ /// - throws: One of the following errors contained in `JSON.Error`:
500+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
501+ /// `JSON` dictionary.
502+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
503+ /// descendant `JSON` array.
504+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
505+ /// corresponding `JSON` value.
506+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
507+ /// instance does not match the decoded value.
508+ public func string(path: JSONPathType..., @autoclosure or fallback: () -> Swift.String) throws -> Swift.String {
509+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.String.init)
510+ }
511+
512+ /// Retrieves a `Bool` from a path into JSON or a fallback if not found.
513+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
514+ /// - parameter fallback: `Bool` to use when one is missing at the subscript.
515+ /// - returns: A truthy `Bool`
516+ /// - throws: One of the following errors contained in `JSON.Error`:
517+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
518+ /// `JSON` dictionary.
519+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
520+ /// descendant `JSON` array.
521+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
522+ /// corresponding `JSON` value.
523+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
524+ /// instance does not match the decoded value.
525+ public func bool(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Bool) throws -> Swift.Bool {
526+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Bool.init)
527+ }
528+
529+ /// Retrieves a `[JSON]` from a path into JSON or a fallback if not found.
530+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
531+ /// - parameter fallback: `Array` to use when one is missing at the subscript.
532+ /// - returns: An `Array` of `JSON` elements
533+ /// - throws: One of the following errors contained in `JSON.Error`:
534+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
535+ /// `JSON` dictionary.
536+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
537+ /// descendant `JSON` array.
538+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
539+ /// corresponding `JSON` value.
540+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
541+ /// instance does not match the decoded value.
542+ public func array(path: JSONPathType..., @autoclosure or fallback: () -> [JSON]) throws -> [JSON] {
543+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getArray)
544+ }
545+
546+ /// Attempts to decodes many values from a desendant JSON array at a path
547+ /// into the recieving structure, returning a fallback if not found.
548+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
549+ /// - parameter fallback: `Array` to use when one is missing at the subscript.
550+ /// - returns: An `Array` of decoded elements
551+ /// - throws: One of the following errors contained in `JSON.Error`:
552+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
553+ /// `JSON` dictionary.
554+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
555+ /// descendant `JSON` array.
556+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
557+ /// corresponding `JSON` value.
558+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
559+ /// instance does not match the decoded value.
560+ /// * Any error that arises from decoding the value.
561+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., @autoclosure or fallback: () -> [Decoded]) throws -> [Decoded] {
562+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getArrayOf)
563+ }
564+
565+ /// Retrieves a `[String: JSON]` from a path into JSON or a fallback if not
566+ /// found.
567+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
568+ /// - parameter fallback: `Dictionary` to use when one is missing at the subscript.
569+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
570+ /// - throws: One of the following errors contained in `JSON.Error`:
571+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
572+ /// `JSON` dictionary.
573+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
574+ /// descendant `JSON` array.
575+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
576+ /// corresponding `JSON` value.
577+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
578+ /// instance does not match the decoded value.
579+ public func dictionary(path: JSONPathType..., @autoclosure or fallback: () -> [Swift.String: JSON]) throws -> [Swift.String: JSON] {
580+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getDictionary)
581+ }
582+
583+ /// Attempts to decode many values from a descendant JSON object at a path
584+ /// into the receiving structure, returning a fallback if not found.
585+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
586+ /// - parameter fallback: Value to use when one is missing at the subscript
587+ /// - returns: A `Dictionary` of `String` mapping to decoded elements.
588+ /// - throws: One of the following errors contained in `JSON.Error`:
589+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
590+ /// `JSON` dictionary.
591+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
592+ /// descendant `JSON` array.
593+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
594+ /// corresponding `JSON` value.
595+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
596+ /// instance does not match the decoded value.
597+ /// * Any error that arises from decoding the value.
598+ public func dictionaryOf<Decoded: JSONDecodable>(path: JSONPathType..., @autoclosure or fallback: () -> [Swift.String: Decoded]) throws -> [Swift.String: Decoded] {
599+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getDictionaryOf)
600+ }
601+
602+
603+}
604+
605+// MARK: - Deprecated methods
606+
607+extension JSON {
608+
609+ @available(*, deprecated, message="Use 'decode(_:alongPath:type:)' with options '[.MissingKeyBecomesNil]'")
610+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., ifNotFound: Swift.Bool, type: Decoded.Type = Decoded.self) throws -> Decoded? {
611+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
612+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
613+ }
614+
615+ @available(*, deprecated, message="Use 'decode(_:alongPath:type:)' with options '[.NullBecomesNil]'")
616+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., ifNull: Swift.Bool, type: Decoded.Type = Decoded.self) throws -> Decoded? {
617+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
618+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
619+ }
620+
621+ @available(*, deprecated, message="Use 'double(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
622+ public func double(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Double? {
623+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
624+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
625+ }
626+
627+ @available(*, deprecated, message="Use 'double(_:alongPath:)' with options '[.NullBecomesNil]'")
628+ public func double(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Double? {
629+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
630+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
631+ }
632+
633+ @available(*, deprecated, message="Use 'int(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
634+ public func int(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Int? {
635+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
636+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
637+ }
638+
639+ @available(*, deprecated, message="Use 'int(_:alongPath:)' with options '[.NullBecomesNil]'")
640+ public func int(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Int? {
641+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
642+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
643+ }
644+
645+ @available(*, deprecated, message="Use 'string(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
646+ public func string(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.String? {
647+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
648+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
649+ }
650+
651+ @available(*, deprecated, message="Use 'string(_:alongPath:)' with options '[.NullBecomesNil]'")
652+ public func string(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.String? {
653+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
654+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
655+ }
656+
657+ @available(*, deprecated, message="Use 'bool(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
658+ public func bool(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Bool? {
659+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
660+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
661+ }
662+
663+ @available(*, deprecated, message="Use 'bool(_:alongPath:)' with options '[.NullBecomesNil]'")
664+ public func bool(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Bool? {
665+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
666+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
667+ }
668+
669+ @available(*, deprecated, message="Use 'array(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
670+ public func array(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [JSON]? {
671+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
672+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
673+ }
674+
675+ @available(*, deprecated, message="Use 'array(_:alongPath:)' with options '[.NullBecomesNil]'")
676+ public func array(path: JSONPathType..., ifNull: Swift.Bool) throws -> [JSON]? {
677+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
678+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
679+ }
680+
681+ @available(*, deprecated, message="Use 'arrayOf(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
682+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [Decoded]? {
683+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
684+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
685+ }
686+
687+ @available(*, deprecated, message="Use 'arrayOf(_:alongPath:)' with options '[.NullBecomesNil]'")
688+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., ifNull: Swift.Bool) throws -> [Decoded]? {
689+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
690+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
691+ }
692+
693+ @available(*, deprecated, message="Use 'dictionary(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
694+ public func dictionary(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [Swift.String: JSON]? {
695+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
696+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
697+ }
698+
699+ @available(*, deprecated, message="Use 'dictionary(_:alongPath:)' with options '[.NullBecomesNil]'")
700+ public func dictionary(path: JSONPathType..., ifNull: Swift.Bool) throws -> [Swift.String: JSON]? {
701+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
702+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
703+ }
704+
705+}
tests/JSONTestSuite/parsers/test_Freddy_20160830/test_Freddy/main.swiftnew file+37
@@ -0,0 +1,37 @@
1+//
2+// main.swift
3+// test_Freddy
4+//
5+// Created by nst on 10/08/16.
6+// Copyright © 2016 Nicolas Seriot. All rights reserved.
7+//
8+
9+import Foundation
10+
11+func main() {
12+
13+ guard Process.arguments.count == 2 else {
14+ let url = NSURL(fileURLWithPath: Process.arguments[0])
15+ guard let programName = url.lastPathComponent else { exit(1) }
16+ print("Usage: ./\(programName) file.json")
17+ exit(1)
18+ }
19+
20+ let path = Process.arguments[1]
21+ let url = NSURL.fileURLWithPath(path)
22+
23+ guard let data = NSData(contentsOfURL:url) else {
24+ print("*** CANNOT READ DATA AT \(url)")
25+ return
26+ }
27+
28+ var p = JSONParser(utf8Data: data)
29+ do {
30+ try p.parse()
31+ exit(0)
32+ } catch {
33+ exit(1)
34+ }
35+}
36+
37+main()
tests/JSONTestSuite/parsers/test_Freddy_20161018/bin/test_Freddynew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.pbxprojnew file+300
@@ -0,0 +1,300 @@
1+// !$*UTF8*$!
2+{
3+ archiveVersion = 1;
4+ classes = {
5+ };
6+ objectVersion = 46;
7+ objects = {
8+
9+/* Begin PBXBuildFile section */
10+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03D84ABA1D5B0A1000776402 /* main.swift */; };
11+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7781D5B75600021630C /* JSON.swift */; };
12+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7791D5B75600021630C /* JSONDecodable.swift */; };
13+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77A1D5B75600021630C /* JSONEncodable.swift */; };
14+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */; };
15+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */; };
16+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77D1D5B75600021630C /* JSONParser.swift */; };
17+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77E1D5B75600021630C /* JSONParsing.swift */; };
18+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77F1D5B75600021630C /* JSONSerializing.swift */; };
19+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7801D5B75600021630C /* JSONSubscripting.swift */; };
20+/* End PBXBuildFile section */
21+
22+/* Begin PBXCopyFilesBuildPhase section */
23+ 03D84AB51D5B0A1000776402 /* CopyFiles */ = {
24+ isa = PBXCopyFilesBuildPhase;
25+ buildActionMask = 2147483647;
26+ dstPath = /usr/share/man/man1;
27+ dstSubfolderSpec = 0;
28+ files = (
29+ );
30+ runOnlyForDeploymentPostprocessing = 1;
31+ };
32+/* End PBXCopyFilesBuildPhase section */
33+
34+/* Begin PBXFileReference section */
35+ 03D84AB71D5B0A1000776402 /* test_Freddy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_Freddy; sourceTree = BUILT_PRODUCTS_DIR; };
36+ 03D84ABA1D5B0A1000776402 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
37+ 03F8F7781D5B75600021630C /* JSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSON.swift; path = test_Freddy/JSON.swift; sourceTree = "<group>"; };
38+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONDecodable.swift; path = test_Freddy/JSONDecodable.swift; sourceTree = "<group>"; };
39+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodable.swift; path = test_Freddy/JSONEncodable.swift; sourceTree = "<group>"; };
40+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodingDetector.swift; path = test_Freddy/JSONEncodingDetector.swift; sourceTree = "<group>"; };
41+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONLiteralConvertible.swift; path = test_Freddy/JSONLiteralConvertible.swift; sourceTree = "<group>"; };
42+ 03F8F77D1D5B75600021630C /* JSONParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParser.swift; path = test_Freddy/JSONParser.swift; sourceTree = "<group>"; };
43+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParsing.swift; path = test_Freddy/JSONParsing.swift; sourceTree = "<group>"; };
44+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSerializing.swift; path = test_Freddy/JSONSerializing.swift; sourceTree = "<group>"; };
45+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSubscripting.swift; path = test_Freddy/JSONSubscripting.swift; sourceTree = "<group>"; };
46+/* End PBXFileReference section */
47+
48+/* Begin PBXFrameworksBuildPhase section */
49+ 03D84AB41D5B0A1000776402 /* Frameworks */ = {
50+ isa = PBXFrameworksBuildPhase;
51+ buildActionMask = 2147483647;
52+ files = (
53+ );
54+ runOnlyForDeploymentPostprocessing = 0;
55+ };
56+/* End PBXFrameworksBuildPhase section */
57+
58+/* Begin PBXGroup section */
59+ 03D84AAE1D5B0A1000776402 = {
60+ isa = PBXGroup;
61+ children = (
62+ 03F8F7781D5B75600021630C /* JSON.swift */,
63+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */,
64+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */,
65+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */,
66+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */,
67+ 03F8F77D1D5B75600021630C /* JSONParser.swift */,
68+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */,
69+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */,
70+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */,
71+ 03D84AB91D5B0A1000776402 /* test_Freddy */,
72+ 03D84AB81D5B0A1000776402 /* Products */,
73+ );
74+ sourceTree = "<group>";
75+ };
76+ 03D84AB81D5B0A1000776402 /* Products */ = {
77+ isa = PBXGroup;
78+ children = (
79+ 03D84AB71D5B0A1000776402 /* test_Freddy */,
80+ );
81+ name = Products;
82+ sourceTree = "<group>";
83+ };
84+ 03D84AB91D5B0A1000776402 /* test_Freddy */ = {
85+ isa = PBXGroup;
86+ children = (
87+ 03D84ABA1D5B0A1000776402 /* main.swift */,
88+ );
89+ path = test_Freddy;
90+ sourceTree = "<group>";
91+ };
92+/* End PBXGroup section */
93+
94+/* Begin PBXNativeTarget section */
95+ 03D84AB61D5B0A1000776402 /* test_Freddy */ = {
96+ isa = PBXNativeTarget;
97+ buildConfigurationList = 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */;
98+ buildPhases = (
99+ 03D84AB31D5B0A1000776402 /* Sources */,
100+ 03D84AB41D5B0A1000776402 /* Frameworks */,
101+ 03D84AB51D5B0A1000776402 /* CopyFiles */,
102+ );
103+ buildRules = (
104+ );
105+ dependencies = (
106+ );
107+ name = test_Freddy;
108+ productName = test_Freddy;
109+ productReference = 03D84AB71D5B0A1000776402 /* test_Freddy */;
110+ productType = "com.apple.product-type.tool";
111+ };
112+/* End PBXNativeTarget section */
113+
114+/* Begin PBXProject section */
115+ 03D84AAF1D5B0A1000776402 /* Project object */ = {
116+ isa = PBXProject;
117+ attributes = {
118+ LastSwiftUpdateCheck = 0800;
119+ LastUpgradeCheck = 0800;
120+ ORGANIZATIONNAME = "Nicolas Seriot";
121+ TargetAttributes = {
122+ 03D84AB61D5B0A1000776402 = {
123+ CreatedOnToolsVersion = 8.0;
124+ DevelopmentTeam = VBYRKYS73S;
125+ DevelopmentTeamName = "Nicolas Seriot";
126+ ProvisioningStyle = Automatic;
127+ };
128+ };
129+ };
130+ buildConfigurationList = 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */;
131+ compatibilityVersion = "Xcode 3.2";
132+ developmentRegion = English;
133+ hasScannedForEncodings = 0;
134+ knownRegions = (
135+ en,
136+ );
137+ mainGroup = 03D84AAE1D5B0A1000776402;
138+ productRefGroup = 03D84AB81D5B0A1000776402 /* Products */;
139+ projectDirPath = "";
140+ projectRoot = "";
141+ targets = (
142+ 03D84AB61D5B0A1000776402 /* test_Freddy */,
143+ );
144+ };
145+/* End PBXProject section */
146+
147+/* Begin PBXSourcesBuildPhase section */
148+ 03D84AB31D5B0A1000776402 /* Sources */ = {
149+ isa = PBXSourcesBuildPhase;
150+ buildActionMask = 2147483647;
151+ files = (
152+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */,
153+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */,
154+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */,
155+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */,
156+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */,
157+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */,
158+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */,
159+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */,
160+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */,
161+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */,
162+ );
163+ runOnlyForDeploymentPostprocessing = 0;
164+ };
165+/* End PBXSourcesBuildPhase section */
166+
167+/* Begin XCBuildConfiguration section */
168+ 03D84ABC1D5B0A1000776402 /* Debug */ = {
169+ isa = XCBuildConfiguration;
170+ buildSettings = {
171+ ALWAYS_SEARCH_USER_PATHS = NO;
172+ CLANG_ANALYZER_NONNULL = YES;
173+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
174+ CLANG_CXX_LIBRARY = "libc++";
175+ CLANG_ENABLE_MODULES = YES;
176+ CLANG_ENABLE_OBJC_ARC = YES;
177+ CLANG_WARN_BOOL_CONVERSION = YES;
178+ CLANG_WARN_CONSTANT_CONVERSION = YES;
179+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
180+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
181+ CLANG_WARN_EMPTY_BODY = YES;
182+ CLANG_WARN_ENUM_CONVERSION = YES;
183+ CLANG_WARN_INT_CONVERSION = YES;
184+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
185+ CLANG_WARN_UNREACHABLE_CODE = YES;
186+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
187+ CODE_SIGN_IDENTITY = "-";
188+ COPY_PHASE_STRIP = NO;
189+ DEBUG_INFORMATION_FORMAT = dwarf;
190+ ENABLE_STRICT_OBJC_MSGSEND = YES;
191+ ENABLE_TESTABILITY = YES;
192+ GCC_C_LANGUAGE_STANDARD = gnu99;
193+ GCC_DYNAMIC_NO_PIC = NO;
194+ GCC_NO_COMMON_BLOCKS = YES;
195+ GCC_OPTIMIZATION_LEVEL = 0;
196+ GCC_PREPROCESSOR_DEFINITIONS = (
197+ "DEBUG=1",
198+ "$(inherited)",
199+ );
200+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
201+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
202+ GCC_WARN_UNDECLARED_SELECTOR = YES;
203+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
204+ GCC_WARN_UNUSED_FUNCTION = YES;
205+ GCC_WARN_UNUSED_VARIABLE = YES;
206+ MACOSX_DEPLOYMENT_TARGET = 10.11;
207+ MTL_ENABLE_DEBUG_INFO = YES;
208+ ONLY_ACTIVE_ARCH = YES;
209+ SDKROOT = macosx;
210+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
211+ };
212+ name = Debug;
213+ };
214+ 03D84ABD1D5B0A1000776402 /* Release */ = {
215+ isa = XCBuildConfiguration;
216+ buildSettings = {
217+ ALWAYS_SEARCH_USER_PATHS = NO;
218+ CLANG_ANALYZER_NONNULL = YES;
219+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
220+ CLANG_CXX_LIBRARY = "libc++";
221+ CLANG_ENABLE_MODULES = YES;
222+ CLANG_ENABLE_OBJC_ARC = YES;
223+ CLANG_WARN_BOOL_CONVERSION = YES;
224+ CLANG_WARN_CONSTANT_CONVERSION = YES;
225+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
226+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
227+ CLANG_WARN_EMPTY_BODY = YES;
228+ CLANG_WARN_ENUM_CONVERSION = YES;
229+ CLANG_WARN_INT_CONVERSION = YES;
230+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
231+ CLANG_WARN_UNREACHABLE_CODE = YES;
232+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
233+ CODE_SIGN_IDENTITY = "-";
234+ COPY_PHASE_STRIP = NO;
235+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
236+ ENABLE_NS_ASSERTIONS = NO;
237+ ENABLE_STRICT_OBJC_MSGSEND = YES;
238+ GCC_C_LANGUAGE_STANDARD = gnu99;
239+ GCC_NO_COMMON_BLOCKS = YES;
240+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
241+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
242+ GCC_WARN_UNDECLARED_SELECTOR = YES;
243+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
244+ GCC_WARN_UNUSED_FUNCTION = YES;
245+ GCC_WARN_UNUSED_VARIABLE = YES;
246+ MACOSX_DEPLOYMENT_TARGET = 10.11;
247+ MTL_ENABLE_DEBUG_INFO = NO;
248+ SDKROOT = macosx;
249+ };
250+ name = Release;
251+ };
252+ 03D84ABF1D5B0A1000776402 /* Debug */ = {
253+ isa = XCBuildConfiguration;
254+ buildSettings = {
255+ FRAMEWORK_SEARCH_PATHS = (
256+ "$(inherited)",
257+ "$(PROJECT_DIR)",
258+ );
259+ PRODUCT_NAME = "$(TARGET_NAME)";
260+ SWIFT_VERSION = 3.0;
261+ };
262+ name = Debug;
263+ };
264+ 03D84AC01D5B0A1000776402 /* Release */ = {
265+ isa = XCBuildConfiguration;
266+ buildSettings = {
267+ FRAMEWORK_SEARCH_PATHS = (
268+ "$(inherited)",
269+ "$(PROJECT_DIR)",
270+ );
271+ PRODUCT_NAME = "$(TARGET_NAME)";
272+ SWIFT_VERSION = 3.0;
273+ };
274+ name = Release;
275+ };
276+/* End XCBuildConfiguration section */
277+
278+/* Begin XCConfigurationList section */
279+ 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */ = {
280+ isa = XCConfigurationList;
281+ buildConfigurations = (
282+ 03D84ABC1D5B0A1000776402 /* Debug */,
283+ 03D84ABD1D5B0A1000776402 /* Release */,
284+ );
285+ defaultConfigurationIsVisible = 0;
286+ defaultConfigurationName = Release;
287+ };
288+ 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */ = {
289+ isa = XCConfigurationList;
290+ buildConfigurations = (
291+ 03D84ABF1D5B0A1000776402 /* Debug */,
292+ 03D84AC01D5B0A1000776402 /* Release */,
293+ );
294+ defaultConfigurationIsVisible = 0;
295+ defaultConfigurationName = Release;
296+ };
297+/* End XCConfigurationList section */
298+ };
299+ rootObject = 03D84AAF1D5B0A1000776402 /* Project object */;
300+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Workspace
3+ version = "1.0">
4+ <FileRef
5+ location = "self:test_Freddy.xcodeproj">
6+ </FileRef>
7+</Workspace>
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprintnew file+30
@@ -0,0 +1,30 @@
1+{
2+ "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A",
3+ "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4+
5+ },
6+ "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
7+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : 0,
8+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : 0
9+ },
10+ "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "7B3DFA55-F9BF-41D8-8FD5-204D3162EB03",
11+ "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
12+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : "dropbox\/JSON\/test_Freddy\/Vendor\/Freddy\/",
13+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : "dropbox\/"
14+ },
15+ "DVTSourceControlWorkspaceBlueprintNameKey" : "test_Freddy",
16+ "DVTSourceControlWorkspaceBlueprintVersion" : 204,
17+ "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "JSON\/test_Freddy\/test_Freddy.xcodeproj",
18+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
19+ {
20+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/bignerdranch\/Freddy.git",
21+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
22+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6ADA245F937D8ED6D99F5A7865E19F5267A169E2"
23+ },
24+ {
25+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/nst\/Dropbox\/dropbox.git",
26+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
27+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A"
28+ }
29+ ]
30+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcschemenew file+91
@@ -0,0 +1,91 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Scheme
3+ LastUpgradeVersion = "0800"
4+ version = "1.3">
5+ <BuildAction
6+ parallelizeBuildables = "YES"
7+ buildImplicitDependencies = "YES">
8+ <BuildActionEntries>
9+ <BuildActionEntry
10+ buildForTesting = "YES"
11+ buildForRunning = "YES"
12+ buildForProfiling = "YES"
13+ buildForArchiving = "YES"
14+ buildForAnalyzing = "YES">
15+ <BuildableReference
16+ BuildableIdentifier = "primary"
17+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
18+ BuildableName = "test_Freddy"
19+ BlueprintName = "test_Freddy"
20+ ReferencedContainer = "container:test_Freddy.xcodeproj">
21+ </BuildableReference>
22+ </BuildActionEntry>
23+ </BuildActionEntries>
24+ </BuildAction>
25+ <TestAction
26+ buildConfiguration = "Debug"
27+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+ shouldUseLaunchSchemeArgsEnv = "YES">
30+ <Testables>
31+ </Testables>
32+ <MacroExpansion>
33+ <BuildableReference
34+ BuildableIdentifier = "primary"
35+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
36+ BuildableName = "test_Freddy"
37+ BlueprintName = "test_Freddy"
38+ ReferencedContainer = "container:test_Freddy.xcodeproj">
39+ </BuildableReference>
40+ </MacroExpansion>
41+ <AdditionalOptions>
42+ </AdditionalOptions>
43+ </TestAction>
44+ <LaunchAction
45+ buildConfiguration = "Debug"
46+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48+ launchStyle = "0"
49+ useCustomWorkingDirectory = "NO"
50+ ignoresPersistentStateOnLaunch = "NO"
51+ debugDocumentVersioning = "YES"
52+ debugServiceExtension = "internal"
53+ allowLocationSimulation = "YES">
54+ <BuildableProductRunnable
55+ runnableDebuggingMode = "0">
56+ <BuildableReference
57+ BuildableIdentifier = "primary"
58+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
59+ BuildableName = "test_Freddy"
60+ BlueprintName = "test_Freddy"
61+ ReferencedContainer = "container:test_Freddy.xcodeproj">
62+ </BuildableReference>
63+ </BuildableProductRunnable>
64+ <AdditionalOptions>
65+ </AdditionalOptions>
66+ </LaunchAction>
67+ <ProfileAction
68+ buildConfiguration = "Release"
69+ shouldUseLaunchSchemeArgsEnv = "YES"
70+ savedToolIdentifier = ""
71+ useCustomWorkingDirectory = "NO"
72+ debugDocumentVersioning = "YES">
73+ <BuildableProductRunnable
74+ runnableDebuggingMode = "0">
75+ <BuildableReference
76+ BuildableIdentifier = "primary"
77+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
78+ BuildableName = "test_Freddy"
79+ BlueprintName = "test_Freddy"
80+ ReferencedContainer = "container:test_Freddy.xcodeproj">
81+ </BuildableReference>
82+ </BuildableProductRunnable>
83+ </ProfileAction>
84+ <AnalyzeAction
85+ buildConfiguration = "Debug">
86+ </AnalyzeAction>
87+ <ArchiveAction
88+ buildConfiguration = "Release"
89+ revealArchiveInOrganizer = "YES">
90+ </ArchiveAction>
91+</Scheme>
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22
@@ -0,0 +1,22 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+<plist version="1.0">
4+<dict>
5+ <key>SchemeUserState</key>
6+ <dict>
7+ <key>test_Freddy.xcscheme</key>
8+ <dict>
9+ <key>orderHint</key>
10+ <integer>0</integer>
11+ </dict>
12+ </dict>
13+ <key>SuppressBuildableAutocreation</key>
14+ <dict>
15+ <key>03D84AB61D5B0A1000776402</key>
16+ <dict>
17+ <key>primary</key>
18+ <true/>
19+ </dict>
20+ </dict>
21+</dict>
22+</plist>
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSON.swiftnew file+98
@@ -0,0 +1,98 @@
1+//
2+// JSON.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// An enum to describe the structure of JSON.
10+public enum JSON {
11+ /// A case for denoting an array with an associated value of `[JSON]`
12+ case array([JSON])
13+ /// A case for denoting a dictionary with an associated value of `[Swift.String: JSON]`
14+ case dictionary([String: JSON])
15+ /// A case for denoting a double with an associated value of `Swift.Double`.
16+ case double(Double)
17+ /// A case for denoting an integer with an associated value of `Swift.Int`.
18+ case int(Int)
19+ /// A case for denoting a string with an associated value of `Swift.String`.
20+ case string(String)
21+ /// A case for denoting a boolean with an associated value of `Swift.Bool`.
22+ case bool(Bool)
23+ /// A case for denoting null.
24+ case null
25+}
26+
27+// MARK: - Errors
28+
29+extension JSON {
30+
31+ /// An enum to encapsulate errors that may arise in working with `JSON`.
32+ public enum Error: Swift.Error {
33+ /// The `index` is out of bounds for a JSON array
34+ case indexOutOfBounds(index: Int)
35+
36+ /// The `key` was not found in the JSON dictionary
37+ case keyNotFound(key: String)
38+
39+ /// The JSON is not subscriptable with `type`
40+ case unexpectedSubscript(type: JSONPathType.Type)
41+
42+ /// Unexpected JSON `value` was found that is not convertible `to` type
43+ case valueNotConvertible(value: JSON, to: Any.Type)
44+
45+ /// The JSON is not serializable to a `String`.
46+ case stringSerializationError
47+ }
48+
49+}
50+
51+// MARK: - Test Equality
52+
53+/// Return `true` if `lhs` is equal to `rhs`.
54+public func ==(lhs: JSON, rhs: JSON) -> Bool {
55+ switch (lhs, rhs) {
56+ case (.array(let arrL), .array(let arrR)):
57+ return arrL == arrR
58+ case (.dictionary(let dictL), .dictionary(let dictR)):
59+ return dictL == dictR
60+ case (.string(let strL), .string(let strR)):
61+ return strL == strR
62+ case (.double(let dubL), .double(let dubR)):
63+ return dubL == dubR
64+ case (.double(let dubL), .int(let intR)):
65+ return dubL == Double(intR)
66+ case (.int(let intL), .int(let intR)):
67+ return intL == intR
68+ case (.int(let intL), .double(let dubR)):
69+ return Double(intL) == dubR
70+ case (.bool(let bL), .bool(let bR)):
71+ return bL == bR
72+ case (.null, .null):
73+ return true
74+ default:
75+ return false
76+ }
77+}
78+
79+extension JSON: Equatable {}
80+
81+// MARK: - Printing
82+
83+extension JSON: CustomStringConvertible {
84+
85+ /// A textual representation of `self`.
86+ public var description: Swift.String {
87+ switch self {
88+ case .array(let arr): return String(describing: arr)
89+ case .dictionary(let dict): return String(describing: dict)
90+ case .string(let string): return string
91+ case .double(let double): return String(describing: double)
92+ case .int(let int): return String(describing: int)
93+ case .bool(let bool): return String(describing: bool)
94+ case .null: return "null"
95+ }
96+ }
97+
98+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONDecodable.swiftnew file+186
@@ -0,0 +1,186 @@
1+//
2+// JSONDecodable.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/24/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// A protocol to provide functionality for creating a model object with a `JSON`
10+/// value.
11+public protocol JSONDecodable {
12+
13+ /// Creates an instance of the model with a `JSON` instance.
14+ /// - parameter json: An instance of a `JSON` value from which to
15+ /// construct an instance of the implementing type.
16+ /// - throws: Any `JSON.Error` for errors derived from inspecting the
17+ /// `JSON` value, or any other error involved in decoding.
18+ init(json: JSON) throws
19+
20+}
21+
22+extension Double: JSONDecodable {
23+
24+ /// An initializer to create an instance of `Double` from a `JSON` value.
25+ /// - parameter json: An instance of `JSON`.
26+ /// - throws: The initializer will throw an instance of `JSON.Error` if
27+ /// an instance of `Double` cannot be created from the `JSON` value that was
28+ /// passed to this initializer.
29+ public init(json: JSON) throws {
30+ if case let .double(double) = json {
31+ self = double
32+ } else if case let .int(int) = json {
33+ self = Double(int)
34+ } else if case let .string(string) = json, let s = Double(string) {
35+ self = s
36+ } else {
37+ throw JSON.Error.valueNotConvertible(value: json, to: Double.self)
38+ }
39+ }
40+
41+}
42+
43+extension Int: JSONDecodable {
44+
45+ /// An initializer to create an instance of `Int` from a `JSON` value.
46+ /// - parameter json: An instance of `JSON`.
47+ /// - throws: The initializer will throw an instance of `JSON.Error` if
48+ /// an instance of `Int` cannot be created from the `JSON` value that was
49+ /// passed to this initializer.
50+ public init(json: JSON) throws {
51+
52+ if case let .double(double) = json, double <= Double(Int.max) {
53+ self = Int(double)
54+ } else if case let .int(int) = json {
55+ self = int
56+ } else if case let .string(string) = json, let int = Int(string) {
57+ self = int
58+ } else if case let .string(string) = json,
59+ let double = Double(string),
60+ let decimalSeparator = string.characters.index(of: "."),
61+ let int = Int(String(string.characters.prefix(upTo: decimalSeparator))),
62+ double == Double(int) {
63+ self = int
64+ } else {
65+ throw JSON.Error.valueNotConvertible(value: json, to: Int.self)
66+ }
67+ }
68+
69+}
70+
71+extension String: JSONDecodable {
72+
73+ /// An initializer to create an instance of `String` from a `JSON` value.
74+ /// - parameter json: An instance of `JSON`.
75+ /// - throws: The initializer will throw an instance of `JSON.Error` if
76+ /// an instance of `String` cannot be created from the `JSON` value that was
77+ /// passed to this initializer.
78+ public init(json: JSON) throws {
79+ switch json {
80+ case let .string(string):
81+ self = string
82+ case let .int(int):
83+ self = String(int)
84+ case let .bool(bool):
85+ self = String(bool)
86+ case let .double(double):
87+ self = String(double)
88+ default:
89+ throw JSON.Error.valueNotConvertible(value: json, to: String.self)
90+ }
91+ }
92+
93+}
94+
95+extension Bool: JSONDecodable {
96+
97+ /// An initializer to create an instance of `Bool` from a `JSON` value.
98+ /// - parameter json: An instance of `JSON`.
99+ /// - throws: The initializer will throw an instance of `JSON.Error` if
100+ /// an instance of `Bool` cannot be created from the `JSON` value that was
101+ /// passed to this initializer.
102+ public init(json: JSON) throws {
103+ guard case let .bool(bool) = json else {
104+ throw JSON.Error.valueNotConvertible(value: json, to: Bool.self)
105+ }
106+ self = bool
107+ }
108+
109+}
110+
111+extension RawRepresentable where RawValue: JSONDecodable {
112+
113+ /// An initializer to create an instance of `RawRepresentable` from a `JSON` value.
114+ /// - parameter json: An instance of `JSON`.
115+ /// - throws: The initializer will throw an instance of `JSON.Error` if
116+ /// an instance of `RawRepresentable` cannot be created from the `JSON` value that was
117+ /// passed to this initializer.
118+ public init(json: JSON) throws {
119+ let raw = try json.decode(type: RawValue.self)
120+ guard let value = Self(rawValue: raw) else {
121+ throw JSON.Error.valueNotConvertible(value: json, to: Self.self)
122+ }
123+ self = value
124+ }
125+}
126+
127+internal extension JSON {
128+
129+ /// Retrieves a `[JSON]` from the JSON.
130+ /// - parameter: A `JSON` to be used to create the returned `Array`.
131+ /// - returns: An `Array` of `JSON` elements
132+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
133+ /// - seealso: `JSON.decode(_:type:)`
134+ static func getArray(from json: JSON) throws -> [JSON] {
135+ // Ideally should be expressed as a conditional protocol implementation on Swift.Array.
136+ guard case let .array(array) = json else {
137+ throw Error.valueNotConvertible(value: json, to: Swift.Array<JSON>)
138+ }
139+ return array
140+ }
141+
142+ /// Retrieves a `[String: JSON]` from the JSON.
143+ /// - parameter: A `JSON` to be used to create the returned `Dictionary`.
144+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
145+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
146+ /// - seealso: `JSON.decode(_:type:)`
147+ static func getDictionary(from json: JSON) throws -> [String: JSON] {
148+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
149+ guard case let .dictionary(dictionary) = json else {
150+ throw Error.valueNotConvertible(value: json, to: Swift.Dictionary<String, JSON>)
151+ }
152+ return dictionary
153+ }
154+
155+ /// Attempts to decode many values from a descendant JSON array at a path
156+ /// into JSON.
157+ /// - parameter json: A `JSON` to be used to create the returned `Array` of some type conforming to `JSONDecodable`.
158+ /// - returns: An `Array` of `Decoded` elements.
159+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`, as
160+ /// well as any error that arises from decoding the contained values.
161+ /// - seealso: `JSON.decode(_:type:)`
162+ static func decodedArray<Decoded: JSONDecodable>(from json: JSON) throws -> [Decoded] {
163+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
164+ // This implementation also doesn't do the `type = Type.self` trick.
165+ return try getArray(from: json).map(Decoded.init)
166+ }
167+
168+ /// Attempts to decode many values from a descendant JSON object at a path
169+ /// into JSON.
170+ /// - parameter json: A `JSON` to be used to create the returned `Dictionary` of some type conforming to `JSONDecodable`.
171+ /// - returns: A `Dictionary` of string keys and `Decoded` values.
172+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)` or
173+ /// any error that arises from decoding the contained values.
174+ /// - seealso: `JSON.decode(_:type:)`
175+ static func decodedDictionary<Decoded: JSONDecodable>(from json: JSON) throws -> [Swift.String: Decoded] {
176+ guard case let .dictionary(dictionary) = json else {
177+ throw Error.valueNotConvertible(value: json, to: Swift.Dictionary<String, Decoded>)
178+ }
179+ var decodedDictionary = Swift.Dictionary<String, Decoded>(minimumCapacity: dictionary.count)
180+ for (key, value) in dictionary {
181+ decodedDictionary[key] = try Decoded(json: value)
182+ }
183+ return decodedDictionary
184+ }
185+
186+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONEncodable.swiftnew file+83
@@ -0,0 +1,83 @@
1+//
2+// JSONEncodable.swift
3+// Freddy
4+//
5+// Created by Matthew Mathias on 1/4/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+/// A protocol to facilitate encoding and decoding of `JSON`.
12+public protocol JSONEncodable {
13+ /// Converts an instance of a conforming type to `JSON`.
14+ /// - returns: An instance of `JSON`.
15+ /// - Note: If conforming to `JSONEncodable` with a custom type of your own, you should return an instance of
16+ /// `JSON.dictionary`.
17+ func toJSON() -> JSON
18+}
19+
20+extension Array where Element: JSONEncodable {
21+ /// Converts an instance of `Array` whose elements conform to `JSONEncodable` to `JSON`.
22+ /// - returns: An instance of `JSON` where the enum case is `.array`.
23+ public func toJSON() -> JSON {
24+ let arrayOfJSON = self.map { $0.toJSON() }
25+ return .array(arrayOfJSON)
26+ }
27+}
28+
29+extension Dictionary where Value: JSONEncodable {
30+ /// Converts an instance of `Dictionary` whose values conform to `JSONEncodable` to `JSON`. The keys in the resulting
31+ /// `JSON.dictionary` will be of type `String`.
32+ /// - returns: An instance of `JSON` where the enum case is `.dictionary`.
33+ public func toJSON() -> JSON {
34+ var jsonDictionary = [String: JSON]()
35+
36+ for (k, v) in self {
37+ let key = String(describing: k)
38+ jsonDictionary[key] = v.toJSON()
39+ }
40+
41+ return .dictionary(jsonDictionary)
42+ }
43+}
44+
45+extension Int: JSONEncodable {
46+ /// Converts an instance of a conforming type to `JSON`.
47+ /// - returns: An instance of `JSON` where the enum case is `.int`.
48+ public func toJSON() -> JSON {
49+ return .int(self)
50+ }
51+}
52+
53+extension Double: JSONEncodable {
54+ /// Converts an instance of a conforming type to `JSON`.
55+ /// - returns: An instance of `JSON` where the enum case is `.double`.
56+ public func toJSON() -> JSON {
57+ return .double(self)
58+ }
59+}
60+
61+extension String: JSONEncodable {
62+ /// Converts an instance of a conforming type to `JSON`.
63+ /// - returns: An instance of `JSON` where the enum case is `.string`.
64+ public func toJSON() -> JSON {
65+ return .string(self)
66+ }
67+}
68+
69+extension Bool: JSONEncodable {
70+ /// Converts an instance of a conforming type to `JSON`.
71+ /// - returns: An instance of `JSON` where the enum case is `.bool`.
72+ public func toJSON() -> JSON {
73+ return .bool(self)
74+ }
75+}
76+
77+extension RawRepresentable where RawValue: JSONEncodable {
78+ /// Converts an instance of a conforming type to `JSON`.
79+ /// - returns: An instance of `JSON` where the enum case is whatever the underlying `RawValue` converts to.
80+ public func toJSON() -> JSON {
81+ return rawValue.toJSON()
82+ }
83+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONEncodingDetector.swiftnew file+110
@@ -0,0 +1,110 @@
1+//
2+// JSONEncodingDetector.swift
3+// Freddy
4+//
5+// Created by Robert Edwards on 1/27/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+/// Struct for attempting to detect the Unicode encoding used with the data supplied to the JSONParser
10+public struct JSONEncodingDetector {
11+
12+ //// The Unicode encodings looked for during detection
13+ public enum Encoding {
14+ //// UTF-8
15+ case utf8
16+ //// UTF-16 Little Endian
17+ case utf16LE
18+ //// UTF-16 Big Endian
19+ case utf16BE
20+ //// UTF-32 Little Endian
21+ case utf32LE
22+ //// UTF-32 Big Endian
23+ case utf32BE
24+ }
25+
26+ //// The Unicode encodings supported by JSONParser.swift
27+ public static let supportedEncodings: [Encoding] = [.utf8]
28+
29+ typealias ByteStreamPrefixInformation = (encoding: Encoding, byteOrderMarkLength: Int)
30+
31+ //// Attempts to detect the Unicode encoding used for a given set of data.
32+ ////
33+ //// This function initially looks for a Byte Order Mark in the following form:
34+ ////
35+ //// Bytes | Encoding Form
36+ //// --------------|----------------
37+ //// 00 00 FE FF | UTF-32, big-endian
38+ //// FF FE 00 00 | UTF-32, little-endian
39+ //// FE FF | UTF-16, big-endian
40+ //// FF FE | UTF-16, little-endian
41+ //// EF BB BF | UTF-8
42+ ////
43+ //// If a BOM is not found then we detect using the following approach described in
44+ //// the JSON RFC http://www.ietf.org/rfc/rfc4627.txt:
45+ ////
46+ //// Since the first two characters of a JSON text will always be ASCII
47+ //// characters [RFC0020], it is possible to determine whether an octet
48+ //// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
49+ //// at the pattern of nulls in the first four octets.
50+ ////
51+ //// 00 00 00 xx UTF-32BE
52+ //// 00 xx 00 xx UTF-16BE
53+ //// xx 00 00 00 UTF-32LE
54+ //// xx 00 xx 00 UTF-16LE
55+ //// xx xx xx xx UTF-8
56+ ////
57+ //// - parameter header: The front Slice of data being read and evaluated.
58+ //// - returns: A tuple containing the detected Unicode encoding and the lenght of the byte order mark.
59+ static func detectEncoding(_ header: RandomAccessSlice<UnsafeBufferPointer<UInt8>>) -> ByteStreamPrefixInformation {
60+
61+ guard let prefix = prefixFromHeader(header) else {
62+ return (.utf8, 0)
63+ }
64+
65+ if let prefixInfo = JSONEncodingDetector.encodingFromBOM(prefix) {
66+ return prefixInfo
67+ } else {
68+ switch prefix {
69+ case(0, 0, 0?, _):
70+ return (.utf32BE, 0)
71+ case(_, 0, 0?, 0?):
72+ return (.utf32LE, 0)
73+ case (0, _, 0?, _), (0, _, _, _):
74+ return (.utf16BE, 0)
75+ case (_, 0, _, 0?), (_, 0, _, _):
76+ return (.utf16LE, 0)
77+ default:
78+ return (.utf8, 0)
79+ }
80+ }
81+ }
82+
83+ private typealias EncodingBytePrefix = (UInt8, UInt8, UInt8?, UInt8?)
84+
85+ private static func prefixFromHeader(_ header: RandomAccessSlice<UnsafeBufferPointer<UInt8>>) -> EncodingBytePrefix? {
86+ if header.count >= 4 {
87+ return(header[0], header[1], header[2], header[3])
88+ } else if header.count >= 2 {
89+ return (header[0], header[1], nil, nil)
90+ }
91+ return nil
92+ }
93+
94+ private static func encodingFromBOM(_ prefix: EncodingBytePrefix) -> ByteStreamPrefixInformation? {
95+ switch prefix {
96+ case(0xFE, 0xFF, _, _):
97+ return (.utf16BE, 2)
98+ case(0x00, 0x00, 0xFE?, 0xFF?):
99+ return (.utf32BE, 4)
100+ case(0xEF, 0xBB, 0xBF?, _):
101+ return (.utf8, 3)
102+ case(0xFF, 0xFE, 0?, 0?):
103+ return (.utf32LE, 4)
104+ case(0xFF, 0xFE, _, _):
105+ return (.utf16LE, 2)
106+ default:
107+ return nil
108+ }
109+ }
110+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONLiteralConvertible.swiftnew file+134
@@ -0,0 +1,134 @@
1+//
2+// JSONLiteralConvertible.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 5/11/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+// MARK: - ArrayLiteralConvertible
10+
11+extension JSON: ExpressibleByArrayLiteral {
12+
13+ /// Create an instance by copying each element of the `collection` into a
14+ /// new `Array`.
15+ public init<Collection: Swift.Collection>(_ collection: Collection) where Collection.Iterator.Element == JSON {
16+ self = .array(Swift.Array(collection))
17+ }
18+
19+ /// Create an instance initialized with `elements`.
20+ public init(arrayLiteral elements: JSON...) {
21+ self.init(elements)
22+ }
23+
24+}
25+
26+// MARK: - DictionaryLiteralConvertible
27+
28+extension JSON: ExpressibleByDictionaryLiteral {
29+
30+ /// Create an instance by copying each key/value pair of the `pairs` into
31+ /// a new `Dictionary`.
32+ public init<Dictionary: Sequence>(_ pairs: Dictionary) where Dictionary.Iterator.Element == (Swift.String, JSON) {
33+ var dictionary = Swift.Dictionary<Swift.String, JSON>(minimumCapacity: pairs.underestimatedCount)
34+ for (key, value) in pairs {
35+ dictionary[key] = value
36+ }
37+ self.init(dictionary)
38+ }
39+
40+ /// Create an instance initialized with `pairs`.
41+ public init(dictionaryLiteral pairs: (Swift.String, JSON)...) {
42+ self.init(pairs)
43+ }
44+
45+ /// Create an instance initialized to `dictionary`.
46+ public init(_ dictionary: Swift.Dictionary<Swift.String, JSON>) {
47+ self = .dictionary(dictionary)
48+ }
49+}
50+
51+// MARK: - FloatLiteralConvertible
52+
53+extension JSON: ExpressibleByFloatLiteral {
54+
55+ /// Create an instance initialized to `Double` `value`.
56+ public init(_ value: Swift.Double) {
57+ self = .double(value)
58+ }
59+
60+ /// Create a literal instance initialized to `value`.
61+ public init(floatLiteral value: Swift.Double) {
62+ self.init(value)
63+ }
64+
65+}
66+
67+// MARK: - IntegerLiteralConvertible
68+
69+extension JSON: ExpressibleByIntegerLiteral {
70+
71+ /// Create an instance initialized to `Int` by `value`.
72+ public init(_ value: Swift.Int) {
73+ self = .int(value)
74+ }
75+
76+ /// Create a literal instance initialized to `value`.
77+ public init(integerLiteral value: Swift.Int) {
78+ self.init(value)
79+ }
80+
81+}
82+
83+// MARK: - StringLiteralConvertible
84+
85+extension JSON: ExpressibleByStringLiteral {
86+
87+ /// Create an instance initialized to `String` by `text`.
88+ public init(_ text: Swift.String) {
89+ self = .string(text)
90+ }
91+
92+ /// Create a literal instance initialized to `value`.
93+ public init(stringLiteral value: StringLiteralType) {
94+ self.init(value)
95+ }
96+
97+ /// Create a literal instance initialized to `value`.
98+ public init(extendedGraphemeClusterLiteral value: StringLiteralType) {
99+ self.init(value)
100+ }
101+
102+ /// Create a literal instance initialized to `value`.
103+ public init(unicodeScalarLiteral value: StringLiteralType) {
104+ self.init(value)
105+ }
106+
107+}
108+
109+// MARK: - BooleanLiteralConvertible
110+
111+extension JSON: ExpressibleByBooleanLiteral {
112+
113+ /// Create an instance initialized to `Bool` by `value`.
114+ public init(_ value: Swift.Bool) {
115+ self = .bool(value)
116+ }
117+
118+ /// Create a literal instance initialized to `value`.
119+ public init(booleanLiteral value: Swift.Bool) {
120+ self.init(value)
121+ }
122+
123+}
124+
125+// MARK: - NilLiteralConvertible
126+
127+extension JSON: ExpressibleByNilLiteral {
128+
129+ /// Create an instance initialized with `nil`.
130+ public init(nilLiteral: ()) {
131+ self = .null
132+ }
133+
134+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONParser.swiftnew file+918
@@ -0,0 +1,918 @@
1+//
2+// JSONParser.swift
3+// Freddy
4+//
5+// Created by John Gallagher on 4/18/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+import Foundation
10+
11+private struct Literal {
12+ static let BACKSLASH = UInt8(ascii: "\\")
13+ static let BACKSPACE = UInt8(ascii: "\u{0008}")
14+ static let COLON = UInt8(ascii: ":")
15+ static let COMMA = UInt8(ascii: ",")
16+ static let DOUBLE_QUOTE = UInt8(ascii: "\"")
17+ static let FORMFEED = UInt8(ascii: "\u{000c}")
18+ static let LEFT_BRACE = UInt8(ascii: "{")
19+ static let LEFT_BRACKET = UInt8(ascii: "[")
20+ static let MINUS = UInt8(ascii: "-")
21+ static let NEWLINE = UInt8(ascii: "\n")
22+ static let PERIOD = UInt8(ascii: ".")
23+ static let PLUS = UInt8(ascii: "+")
24+ static let RETURN = UInt8(ascii: "\r")
25+ static let RIGHT_BRACE = UInt8(ascii: "}")
26+ static let RIGHT_BRACKET = UInt8(ascii: "]")
27+ static let SLASH = UInt8(ascii: "/")
28+ static let SPACE = UInt8(ascii: " ")
29+ static let TAB = UInt8(ascii: "\t")
30+
31+ static let a = UInt8(ascii: "a")
32+ static let b = UInt8(ascii: "b")
33+ static let c = UInt8(ascii: "c")
34+ static let d = UInt8(ascii: "d")
35+ static let e = UInt8(ascii: "e")
36+ static let f = UInt8(ascii: "f")
37+ static let l = UInt8(ascii: "l")
38+ static let n = UInt8(ascii: "n")
39+ static let r = UInt8(ascii: "r")
40+ static let s = UInt8(ascii: "s")
41+ static let t = UInt8(ascii: "t")
42+ static let u = UInt8(ascii: "u")
43+
44+ static let A = UInt8(ascii: "A")
45+ static let B = UInt8(ascii: "B")
46+ static let C = UInt8(ascii: "C")
47+ static let D = UInt8(ascii: "D")
48+ static let E = UInt8(ascii: "E")
49+ static let F = UInt8(ascii: "F")
50+
51+ static let zero = UInt8(ascii: "0")
52+ static let one = UInt8(ascii: "1")
53+ static let two = UInt8(ascii: "2")
54+ static let three = UInt8(ascii: "3")
55+ static let four = UInt8(ascii: "4")
56+ static let five = UInt8(ascii: "5")
57+ static let six = UInt8(ascii: "6")
58+ static let seven = UInt8(ascii: "7")
59+ static let eight = UInt8(ascii: "8")
60+ static let nine = UInt8(ascii: "9")
61+}
62+
63+private let ParserMaximumDepth = 512
64+
65+
66+/// A pure Swift JSON parser. This parser is much faster than the
67+/// `NSJSONSerialization`-based parser (due to the overhead of having to
68+/// dynamically cast the Objective-C objects to determine their type); however,
69+/// it is much newer and has restrictions that the `NSJSONSerialization` parser
70+/// does not. Two restrictions in particular are that it requires UTF-8 data as
71+/// input and it does not allow trailing commas in arrays or dictionaries.
72+public struct JSONParser {
73+
74+ fileprivate enum Sign: Int {
75+ case positive = 1
76+ case negative = -1
77+ }
78+
79+ private let input: UnsafeBufferPointer<UInt8>
80+ private var loc = 0
81+ private var depth = 0
82+
83+ fileprivate init(input: UnsafeBufferPointer<UInt8>) {
84+ self.input = input
85+ }
86+
87+ /// Decode the root element of the `JSON` stream. This may be any fragment
88+ /// or a structural element, per RFC 7159.
89+ ///
90+ /// The beginning bytes are used to determine the stream's encoding.
91+ /// `JSONParser` currently only supports UTF-8 encoding, with or without
92+ /// a byte-order mark.
93+ ///
94+ /// - throws: `JSONParser.Error` for any decoding failures, including a
95+ /// source location if needed.
96+ public mutating func parse() throws -> JSON {
97+ try guardAgainstUnsupportedEncodings()
98+ let value = try parseValue()
99+ skipWhitespace()
100+ guard loc == input.count else {
101+ throw Error.endOfStreamGarbage(offset: loc)
102+ }
103+ return value
104+ }
105+
106+ private mutating func parseValue() throws -> JSON {
107+ guard depth <= ParserMaximumDepth else {
108+ throw Error.exceededNestingLimit(offset: loc)
109+ }
110+
111+ guard input.count > 0 else {
112+ throw Error.endOfStreamUnexpected
113+ }
114+
115+ advancing: while loc < input.count {
116+ do {
117+ switch input[loc] {
118+ case Literal.LEFT_BRACKET:
119+ depth += 1
120+ defer { depth -= 1 }
121+ return try decodeArray()
122+
123+ case Literal.LEFT_BRACE:
124+ depth += 1
125+ defer { depth -= 1 }
126+ return try decodeObject()
127+
128+ case Literal.DOUBLE_QUOTE:
129+ return try decodeString()
130+
131+ case Literal.f:
132+ return try decodeFalse()
133+
134+ case Literal.n:
135+ return try decodeNull()
136+
137+ case Literal.t:
138+ return try decodeTrue()
139+
140+ case Literal.MINUS:
141+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .leadingMinus))
142+
143+ case Literal.zero:
144+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .leadingZero))
145+
146+ case Literal.one...Literal.nine:
147+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .preDecimalDigits))
148+
149+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
150+ loc = (loc + 1)
151+
152+ default:
153+ break advancing
154+ }
155+ } catch let InternalError.numberOverflow(offset: start) {
156+ return try decodeNumberAsString(from: start)
157+ }
158+ }
159+ if loc < input.count {
160+ throw Error.valueInvalid(offset: loc, character: UnicodeScalar(input[loc]))
161+ } else {
162+ throw Error.endOfStreamUnexpected
163+ }
164+ }
165+
166+ private mutating func skipWhitespace() {
167+ while loc < input.count {
168+ switch input[loc] {
169+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
170+ loc = (loc + 1)
171+ default:
172+ return
173+ }
174+ }
175+ }
176+
177+ private mutating func guardAgainstUnsupportedEncodings() throws {
178+ let header = input.prefix(4)
179+ let encodingPrefixInformation = JSONEncodingDetector.detectEncoding(header)
180+ guard JSONEncodingDetector.supportedEncodings.contains(encodingPrefixInformation.encoding) else {
181+ throw Error.invalidUnicodeStreamEncoding(detectedEncoding: encodingPrefixInformation.encoding)
182+ }
183+ loc = loc.advanced(by: encodingPrefixInformation.byteOrderMarkLength)
184+ }
185+
186+ private mutating func decodeNull() throws -> JSON {
187+ guard input.index(loc, offsetBy: 3, limitedBy: input.count) != input.count else {
188+ throw Error.literalNilMisspelled(offset: loc)
189+ }
190+
191+ if input[loc+1] != Literal.u
192+ || input[loc+2] != Literal.l
193+ || input[loc+3] != Literal.l {
194+ throw Error.literalNilMisspelled(offset: loc)
195+ }
196+
197+ loc += 4
198+ return .null
199+ }
200+
201+ private mutating func decodeTrue() throws -> JSON {
202+ guard input.index(loc, offsetBy: 3, limitedBy: input.count) != input.count else {
203+ throw Error.literalNilMisspelled(offset: loc)
204+ }
205+
206+ if input[loc+1] != Literal.r
207+ || input[loc+2] != Literal.u
208+ || input[loc+3] != Literal.e {
209+ throw Error.literalTrueMisspelled(offset: loc)
210+ }
211+
212+ loc += 4
213+ return .bool(true)
214+ }
215+
216+ private mutating func decodeFalse() throws -> JSON {
217+ guard input.index(loc, offsetBy: 4, limitedBy: input.count) != input.count else {
218+ throw Error.literalNilMisspelled(offset: loc)
219+ }
220+
221+ if input[loc+1] != Literal.a
222+ || input[loc+2] != Literal.l
223+ || input[loc+3] != Literal.s
224+ || input[loc+4] != Literal.e {
225+ throw Error.literalFalseMisspelled(offset: loc)
226+ }
227+
228+ loc += 5
229+ return .bool(false)
230+ }
231+
232+ private var stringDecodingBuffer = [UInt8]()
233+ private mutating func decodeString() throws -> JSON {
234+ loc = (loc + 1)
235+ stringDecodingBuffer.removeAll(keepingCapacity: true)
236+ while loc < input.count {
237+ switch input[loc] {
238+ case Literal.BACKSLASH:
239+ loc = (loc + 1)
240+ switch input[loc] {
241+ case Literal.DOUBLE_QUOTE: stringDecodingBuffer.append(Literal.DOUBLE_QUOTE)
242+ case Literal.BACKSLASH: stringDecodingBuffer.append(Literal.BACKSLASH)
243+ case Literal.SLASH: stringDecodingBuffer.append(Literal.SLASH)
244+ case Literal.b: stringDecodingBuffer.append(Literal.BACKSPACE)
245+ case Literal.f: stringDecodingBuffer.append(Literal.FORMFEED)
246+ case Literal.r: stringDecodingBuffer.append(Literal.RETURN)
247+ case Literal.t: stringDecodingBuffer.append(Literal.TAB)
248+ case Literal.n: stringDecodingBuffer.append(Literal.NEWLINE)
249+ case Literal.u:
250+ loc = (loc + 1)
251+ try readUnicodeEscape(start: loc - 2)
252+
253+ // readUnicodeEscape() advances loc on its own, so we'll `continue` now
254+ // to skip the typical "advance past this character" for all the other escapes
255+ continue
256+
257+ default:
258+ throw Error.controlCharacterUnrecognized(offset: loc)
259+ }
260+ loc = (loc + 1)
261+
262+ case Literal.DOUBLE_QUOTE:
263+ loc = (loc + 1)
264+ stringDecodingBuffer.append(0)
265+
266+ let string = stringDecodingBuffer.withUnsafeBufferPointer {
267+ String(cString: UnsafePointer($0.baseAddress!))
268+ }
269+
270+ return .string(string)
271+
272+ case let other:
273+ stringDecodingBuffer.append(other)
274+ loc = (loc + 1)
275+ }
276+ }
277+
278+ throw Error.endOfStreamUnexpected
279+ }
280+
281+ private mutating func readCodeUnit() -> UInt16? {
282+ guard loc + 4 <= input.count else {
283+ return nil
284+ }
285+ var codeUnit: UInt16 = 0
286+ for c in input[loc..<loc+4] {
287+ let nibble: UInt16
288+
289+ switch c {
290+ case Literal.zero...Literal.nine:
291+ nibble = UInt16(c - Literal.zero)
292+
293+ case Literal.a...Literal.f:
294+ nibble = 10 + UInt16(c - Literal.a)
295+
296+ case Literal.A...Literal.F:
297+ nibble = 10 + UInt16(c - Literal.A)
298+
299+ default:
300+ return nil
301+ }
302+ codeUnit = (codeUnit << 4) | nibble
303+ }
304+ loc += 4
305+ return codeUnit
306+ }
307+
308+ private mutating func readUnicodeEscape(start: Int) throws {
309+ guard let codeUnit = readCodeUnit() else {
310+ throw Error.unicodeEscapeInvalid(offset: start)
311+ }
312+
313+ let codeUnits: [UInt16]
314+
315+ if UTF16.isLeadSurrogate(codeUnit) {
316+ // First half of a UTF16 surrogate pair - we must parse another code unit and combine them
317+
318+ // First confirm and skip over that we have another "\u"
319+ guard loc + 6 <= input.count && input[loc] == Literal.BACKSLASH && input[loc+1] == Literal.u else {
320+ throw Error.unicodeEscapeInvalid(offset: start)
321+ }
322+ loc += 2
323+
324+ // Ensure the second code unit is valid for the surrogate pair
325+ guard let secondCodeUnit = readCodeUnit(), UTF16.isTrailSurrogate(secondCodeUnit) else {
326+ throw Error.unicodeEscapeInvalid(offset: start)
327+ }
328+
329+ codeUnits = [codeUnit, secondCodeUnit]
330+ } else {
331+ codeUnits = [codeUnit]
332+ }
333+
334+ let transcodeHadError = transcode(codeUnits.makeIterator(), from: UTF16.self, to: UTF8.self, stoppingOnError: true) { (outputEncodingCodeUnit) in
335+ self.stringDecodingBuffer.append(outputEncodingCodeUnit)
336+ }
337+
338+ if transcodeHadError {
339+ throw Error.unicodeEscapeInvalid(offset: start)
340+ }
341+ }
342+
343+ private mutating func decodeArray() throws -> JSON {
344+ let start = loc
345+ loc = (loc + 1)
346+ var items = [JSON]()
347+
348+ while loc < input.count {
349+ skipWhitespace()
350+
351+ if loc < input.count && input[loc] == Literal.RIGHT_BRACKET {
352+ loc = (loc + 1)
353+ return .array(items)
354+ }
355+
356+ if !items.isEmpty {
357+ guard loc < input.count && input[loc] == Literal.COMMA else {
358+ throw Error.collectionMissingSeparator(offset: start)
359+ }
360+ loc = (loc + 1)
361+ }
362+
363+ items.append(try parseValue())
364+ }
365+
366+ throw Error.endOfStreamUnexpected
367+ }
368+
369+ // Decoding objects can be recursive, so we have to keep more than one
370+ // buffer around for building up key/value pairs (to reduce allocations
371+ // when parsing large JSON documents).
372+ //
373+ // Rough estimate of the difference between this and using a fresh
374+ // [(String,JSON)] for the `pairs` variable in decodeObject() below is
375+ // about 12% on an iPhone 5.
376+ private struct DecodeObjectBuffers {
377+ var buffers = [[(String,JSON)]]()
378+
379+ mutating func getBuffer() -> [(String,JSON)] {
380+ if !buffers.isEmpty {
381+ var buffer = buffers.removeLast()
382+ buffer.removeAll(keepingCapacity: true)
383+ return buffer
384+ }
385+ return [(String,JSON)]()
386+ }
387+
388+ mutating func putBuffer(_ buffer: [(String,JSON)]) {
389+ buffers.append(buffer)
390+ }
391+ }
392+
393+ private var decodeObjectBuffers = DecodeObjectBuffers()
394+
395+ private mutating func decodeObject() throws -> JSON {
396+ let start = loc
397+ loc = (loc + 1)
398+ var pairs = decodeObjectBuffers.getBuffer()
399+
400+ while loc < input.count {
401+ skipWhitespace()
402+
403+ if loc < input.count && input[loc] == Literal.RIGHT_BRACE {
404+ loc = (loc + 1)
405+ var obj = [String:JSON](minimumCapacity: pairs.count)
406+ for (k, v) in pairs {
407+ obj[k] = v
408+ }
409+ decodeObjectBuffers.putBuffer(pairs)
410+ return .dictionary(obj)
411+ }
412+
413+ if !pairs.isEmpty {
414+ guard loc < input.count && input[loc] == Literal.COMMA else {
415+ throw Error.collectionMissingSeparator(offset: start)
416+ }
417+ loc = (loc + 1)
418+
419+ skipWhitespace()
420+ }
421+
422+ guard loc < input.count && input[loc] == Literal.DOUBLE_QUOTE else {
423+ throw Error.dictionaryMissingKey(offset: start)
424+ }
425+
426+ let key = try decodeString().getString()
427+ skipWhitespace()
428+
429+ guard loc < input.count && input[loc] == Literal.COLON else {
430+ throw Error.collectionMissingSeparator(offset: start)
431+ }
432+ loc = (loc + 1)
433+
434+ pairs.append((key, try parseValue()))
435+ }
436+
437+ throw Error.endOfStreamUnexpected
438+ }
439+
440+ private mutating func decodeIntegralValue(_ parser: NumberParser) throws -> JSON {
441+ var sign = Sign.positive
442+ var parser = parser
443+ var value = 0
444+
445+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
446+ // but that causes compile time explosion in Swift 2.2. :-|
447+ while parser.state != .done {
448+ switch parser.state {
449+ case .leadingMinus:
450+ sign = .negative
451+ try parser.parseNegative()
452+
453+ case .leadingZero:
454+ parser.parseLeadingZero()
455+
456+ case .preDecimalDigits:
457+ try parser.parsePreDecimalDigits { c in
458+ guard case let (exponent, false) = Int.multiplyWithOverflow(10, value) else {
459+ throw InternalError.numberOverflow(offset: parser.start)
460+ }
461+
462+ guard case let (newValue, false) = Int.addWithOverflow(exponent, Int(c - Literal.zero)) else {
463+ throw InternalError.numberOverflow(offset: parser.start)
464+ }
465+
466+ value = newValue
467+ }
468+
469+ case .decimal, .exponent:
470+ return try detectingFloatingPointErrors(start: parser.start) {
471+ try decodeFloatingPointValue(parser, sign: sign, value: Double(value))
472+ }
473+
474+ case .postDecimalDigits, .exponentSign, .exponentDigits:
475+ assertionFailure("Invalid internal state while parsing number")
476+
477+ case .done:
478+ fatalError("impossible condition")
479+ }
480+ }
481+
482+ guard case let (signedValue, false) = Int.multiplyWithOverflow(sign.rawValue, value) else {
483+ throw InternalError.numberOverflow(offset: parser.start)
484+ }
485+
486+ loc = parser.loc
487+ return .int(signedValue)
488+ }
489+
490+ private mutating func decodeFloatingPointValue(_ parser: NumberParser, sign: Sign, value: Double) throws -> JSON {
491+ var parser = parser
492+ var value = value
493+ var exponentSign = Sign.positive
494+ var exponent = Double(0)
495+ var position = 0.1
496+
497+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
498+ // but that causes compile time explosion in Swift 2.2. :-|
499+ while parser.state != .done {
500+ switch parser.state {
501+ case .leadingMinus, .leadingZero, .preDecimalDigits:
502+ assertionFailure("Invalid internal state while parsing number")
503+
504+ case .decimal:
505+ try parser.parseDecimal()
506+
507+ case .postDecimalDigits:
508+ parser.parsePostDecimalDigits { c in
509+ value += position * Double(c - Literal.zero)
510+ position /= 10
511+ }
512+
513+ case .exponent:
514+ exponentSign = try parser.parseExponent()
515+
516+ case .exponentSign:
517+ try parser.parseExponentSign()
518+
519+ case .exponentDigits:
520+ parser.parseExponentDigits { c in
521+ exponent = exponent * 10 + Double(c - Literal.zero)
522+ }
523+
524+ case .done:
525+ fatalError("impossible condition")
526+ }
527+ }
528+
529+ loc = parser.loc
530+ return .double(Double(sign.rawValue) * value * pow(10, Double(exponentSign.rawValue) * exponent))
531+ }
532+
533+
534+ private mutating func decodeNumberAsString(from position: Int) throws -> JSON {
535+ var parser: NumberParser = {
536+ let state: NumberParser.State
537+ switch input[position] {
538+ case Literal.MINUS: state = .leadingMinus
539+ case Literal.zero: state = .leadingZero
540+ case Literal.one...Literal.nine: state = .preDecimalDigits
541+ default:
542+ fatalError("Internal error: decodeNumber called on not-a-number")
543+ }
544+ return NumberParser(loc: position, input: input, state: state)
545+ }()
546+
547+ stringDecodingBuffer.removeAll(keepingCapacity: true)
548+
549+ while true {
550+ switch parser.state {
551+ case .leadingMinus:
552+ try parser.parseNegative()
553+ stringDecodingBuffer.append(Literal.MINUS)
554+
555+ case .leadingZero:
556+ parser.parseLeadingZero()
557+ stringDecodingBuffer.append(Literal.zero)
558+
559+ case .preDecimalDigits:
560+ parser.parsePreDecimalDigits { stringDecodingBuffer.append($0) }
561+
562+ case .decimal:
563+ try parser.parseDecimal()
564+ stringDecodingBuffer.append(Literal.PERIOD)
565+
566+ case .postDecimalDigits:
567+ parser.parsePostDecimalDigits { stringDecodingBuffer.append($0) }
568+
569+ case .exponent:
570+ stringDecodingBuffer.append(input[parser.loc])
571+ _ = try parser.parseExponent()
572+
573+ case .exponentSign:
574+ stringDecodingBuffer.append(input[parser.loc])
575+ try parser.parseExponentSign()
576+
577+ case .exponentDigits:
578+ parser.parseExponentDigits { stringDecodingBuffer.append($0) }
579+
580+ case .done:
581+ stringDecodingBuffer.append(0)
582+ let string = stringDecodingBuffer.withUnsafeBufferPointer {
583+ String(cString: UnsafePointer($0.baseAddress!))
584+ }
585+
586+ loc = parser.loc
587+ return .string(string)
588+ }
589+ }
590+ }
591+
592+ private func detectingFloatingPointErrors<T>(start loc: Int, _ f: () throws -> T) throws -> T {
593+ let flags = FE_UNDERFLOW | FE_OVERFLOW
594+ feclearexcept(flags)
595+ let value = try f()
596+ guard fetestexcept(flags) == 0 else {
597+ throw InternalError.numberOverflow(offset: loc)
598+ }
599+ return value
600+ }
601+}
602+
603+private struct NumberParser {
604+ enum State {
605+ case leadingMinus
606+ case leadingZero
607+ case preDecimalDigits
608+ case decimal
609+ case postDecimalDigits
610+ case exponent
611+ case exponentSign
612+ case exponentDigits
613+ case done
614+ }
615+
616+ let start: Int
617+ var loc = 0
618+ var state: State
619+ let input: UnsafeBufferPointer<UInt8>
620+
621+ init(loc: Int, input: UnsafeBufferPointer<UInt8>, state: State) {
622+ assert(loc < input.count, "Invalid input to NumberParser")
623+ self.start = loc
624+ self.loc = loc
625+ self.input = input
626+ self.state = state
627+ }
628+
629+ mutating func parseNegative() throws {
630+ assert(state == .leadingMinus, "Unexpected state entering parseNegative")
631+
632+ loc = (loc + 1)
633+ guard loc < input.count else {
634+ throw JSONParser.Error.endOfStreamUnexpected
635+ }
636+
637+ switch input[loc] {
638+ case Literal.zero:
639+ state = .leadingZero
640+
641+ case Literal.one...Literal.nine:
642+ state = .preDecimalDigits
643+
644+ default:
645+ throw JSONParser.Error.numberSymbolMissingDigits(offset: start)
646+ }
647+ }
648+
649+ mutating func parseLeadingZero() {
650+ assert(state == .leadingZero, "Unexpected state entering parseLeadingZero")
651+
652+ loc = (loc + 1)
653+ guard loc < input.count else {
654+ state = .done
655+ return
656+ }
657+
658+ switch input[loc] {
659+ case Literal.PERIOD:
660+ state = .decimal
661+
662+ case Literal.e, Literal.E:
663+ state = .exponent
664+
665+ default:
666+ state = .done
667+ }
668+ }
669+
670+ mutating func parsePreDecimalDigits(f: (UInt8) throws -> Void) rethrows {
671+ assert(state == .preDecimalDigits, "Unexpected state entering parsePreDecimalDigits")
672+ advancing: while loc < input.count {
673+ let c = input[loc]
674+ switch c {
675+ case Literal.zero...Literal.nine:
676+ try f(c)
677+ loc = (loc + 1)
678+
679+ case Literal.PERIOD:
680+ state = .decimal
681+ return
682+
683+ case Literal.e, Literal.E:
684+ state = .exponent
685+ return
686+
687+ default:
688+ break advancing
689+ }
690+ }
691+
692+ state = .done
693+ }
694+
695+ mutating func parseDecimal() throws {
696+ assert(state == .decimal, "Unexpected state entering parseDecimal")
697+ loc = (loc + 1)
698+ guard loc < input.count else {
699+ throw JSONParser.Error.endOfStreamUnexpected
700+ }
701+
702+ switch input[loc] {
703+ case Literal.zero...Literal.nine:
704+ state = .postDecimalDigits
705+
706+ default:
707+ throw JSONParser.Error.numberMissingFractionalDigits(offset: start)
708+ }
709+ }
710+
711+ mutating func parsePostDecimalDigits(f: (UInt8) throws -> Void) rethrows {
712+ assert(state == .postDecimalDigits, "Unexpected state entering parsePostDecimalDigits")
713+
714+ advancing: while loc < input.count {
715+ let c = input[loc]
716+ switch c {
717+ case Literal.zero...Literal.nine:
718+ try f(c)
719+ loc = (loc + 1)
720+
721+ case Literal.e, Literal.E:
722+ state = .exponent
723+ return
724+
725+ default:
726+ break advancing
727+ }
728+ }
729+
730+ state = .done
731+ }
732+
733+ mutating func parseExponent() throws -> JSONParser.Sign {
734+ assert(state == .exponent, "Unexpected state entering parseExponent")
735+
736+ loc = (loc + 1)
737+ guard loc < input.count else {
738+ throw JSONParser.Error.endOfStreamUnexpected
739+ }
740+
741+ switch input[loc] {
742+ case Literal.zero...Literal.nine:
743+ state = .exponentDigits
744+
745+ case Literal.PLUS:
746+ state = .exponentSign
747+
748+ case Literal.MINUS:
749+ state = .exponentSign
750+ return .negative
751+
752+ default:
753+ throw JSONParser.Error.numberSymbolMissingDigits(offset: start)
754+ }
755+
756+ return .positive
757+ }
758+
759+ mutating func parseExponentSign() throws {
760+ assert(state == .exponentSign, "Unexpected state entering parseExponentSign")
761+ loc = (loc + 1)
762+ guard loc < input.count else {
763+ throw JSONParser.Error.endOfStreamUnexpected
764+ }
765+
766+ switch input[loc] {
767+ case Literal.zero...Literal.nine:
768+ state = .exponentDigits
769+
770+ default:
771+ throw JSONParser.Error.numberSymbolMissingDigits(offset: start)
772+ }
773+ }
774+
775+ mutating func parseExponentDigits(f: (UInt8) throws -> Void) rethrows {
776+ assert(state == .exponentDigits, "Unexpected state entering parseExponentDigits")
777+ advancing: while loc < input.count {
778+ let c = input[loc]
779+ switch c {
780+ case Literal.zero...Literal.nine:
781+ try f(c)
782+ loc = (loc + 1)
783+
784+ default:
785+ break advancing
786+ }
787+ }
788+
789+ state = .done
790+ }
791+}
792+
793+public extension JSONParser {
794+
795+ /// Creates a `JSONParser` ready to parse UTF-8 encoded `Data`.
796+ ///
797+ /// If the data is mutable, it is copied before parsing. The data's lifetime
798+ /// is extended for the duration of parsing.
799+ @available(*, unavailable, message: "Replaced with parse(utf8:)")
800+ init(utf8Data inData: Data) {
801+ fatalError("unavailable code cannot be executed")
802+ }
803+
804+ /// Creates a `JSONParser` from the code units represented by the `string`.
805+ ///
806+ /// The synthesized string is lifetime-extended for the duration of parsing.
807+ @available(*, unavailable, message: "Replaced with parse(utf8:)")
808+ init(string: String) {
809+ fatalError("unavailable code cannot be executed")
810+ }
811+
812+ /// Creates an instance of `JSON` from UTF-8 encoded `data`.
813+ static func parse(utf8 data: Data) throws -> JSON {
814+ return try data.withUnsafeBytes { (ptr: UnsafePointer<UInt8>) -> JSON in
815+ let buffer = UnsafeBufferPointer(start: ptr, count: data.count)
816+ var parser = JSONParser(input: buffer)
817+ return try parser.parse()
818+ }
819+ }
820+
821+ /// Creates an instance of `JSON` from `string`.
822+ static func parse(_ string: String) throws -> JSON {
823+ return try string.utf8CString.withUnsafeBufferPointer { (nulTerminatedBuffer) throws -> JSON in
824+ return try nulTerminatedBuffer.baseAddress!.withMemoryRebound(to: UInt8.self, capacity: nulTerminatedBuffer.count) { (utf8Base) throws -> JSON in
825+ // don't want to include the nul termination in the buffer - trim it off
826+ let buffer = UnsafeBufferPointer(start: utf8Base, count: nulTerminatedBuffer.count - 1)
827+ var parser = JSONParser(input: buffer)
828+ return try parser.parse()
829+ }
830+ }
831+ }
832+
833+}
834+
835+extension JSONParser: JSONParserType {
836+
837+ /// Creates an instance of `JSON` from UTF-8 encoded `Data`.
838+ /// - parameter data: An instance of `Data` to parse `JSON` from.
839+ /// - throws: Any `JSONParser.Error` that arises during decoding.
840+ /// - seealso: JSONParser.parse()
841+ public static func createJSON(from data: Data) throws -> JSON {
842+ return try parse(utf8: data)
843+ }
844+
845+}
846+
847+// MARK: - Errors
848+
849+extension JSONParser {
850+
851+ /// Enumeration describing possible errors that occur while parsing a JSON
852+ /// document. Most errors include an associated `offset`, representing the
853+ /// offset into the UTF-8 characters making up the document where the error
854+ /// occurred.
855+ public enum Error: Swift.Error {
856+ /// The parser ran out of data prematurely. This usually means a value
857+ /// was not escaped, such as a string literal not ending with a double
858+ /// quote.
859+ case endOfStreamUnexpected
860+
861+ /// Unexpected non-whitespace data was left around `offset` after
862+ /// parsing all valid JSON.
863+ case endOfStreamGarbage(offset: Int)
864+
865+ /// Too many nested objects or arrays occured at the literal started
866+ /// around `offset`.
867+ case exceededNestingLimit(offset: Int)
868+
869+ /// A `character` was not a valid start of a value around `offset`.
870+ case valueInvalid(offset: Int, character: UnicodeScalar)
871+
872+ /// Badly-formed Unicode escape sequence at `offset`. A Unicode escape
873+ /// uses the text "\u" followed by 4 hex digits, such as "\uF09F\uA684"
874+ /// to represent U+1F984, "UNICORN FACE".
875+ case unicodeEscapeInvalid(offset: Int)
876+
877+ /// Badly-formed control character around `offset`. JSON supports
878+ /// backslash-escaped double quotes, slashes, whitespace control codes,
879+ /// and Unicode escape sequences.
880+ case controlCharacterUnrecognized(offset: Int)
881+
882+ /// Invalid token, expected `null` around `offset`
883+ case literalNilMisspelled(offset: Int)
884+
885+ /// Invalid token, expected `true` around `offset`
886+ case literalTrueMisspelled(offset: Int)
887+
888+ /// Invalid token, expected `false` around `offset`
889+ case literalFalseMisspelled(offset: Int)
890+
891+ /// Badly-formed collection at given `offset`, expected `,` or `:`
892+ case collectionMissingSeparator(offset: Int)
893+
894+ /// While parsing an object literal, a value was found without a key
895+ /// around `offset`. The start of a string literal was expected.
896+ case dictionaryMissingKey(offset: Int)
897+
898+ /// Badly-formed number with no digits around `offset`. After a decimal
899+ /// point, a number must include some number of digits.
900+ case numberMissingFractionalDigits(offset: Int)
901+
902+ /// Badly-formed number with symbols ("-" or "e") but no following
903+ /// digits around `offset`.
904+ case numberSymbolMissingDigits(offset: Int)
905+
906+ /// Supplied data is encoded in an unsupported format.
907+ case invalidUnicodeStreamEncoding(detectedEncoding: JSONEncodingDetector.Encoding)
908+ }
909+
910+ fileprivate enum InternalError: Swift.Error {
911+ /// Attempted to parse an integer outside the range of [Int.min, Int.max]
912+ /// or a double outside the range of representable doubles. Note that
913+ /// for doubles, this could be an overflow or an underflow - we don't
914+ /// get enough information from Swift here to know which it is. The number
915+ /// causing the overflow/underflow began at `offset`.
916+ case numberOverflow(offset: Int)
917+ }
918+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONParsing.swiftnew file+126
@@ -0,0 +1,126 @@
1+//
2+// JSONParsing.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+// MARK: - Deserialize JSON
12+
13+/// Protocol describing a backend parser that can produce `JSON` from `Data`.
14+public protocol JSONParserType {
15+
16+ /// Creates an instance of `JSON` from `Data`.
17+ /// - parameter data: An instance of `Data` to use to create `JSON`.
18+ /// - throws: An error that may arise from calling `JSONObjectWithData(_:options:)` on `NSJSONSerialization` with the given data.
19+ /// - returns: An instance of `JSON`.
20+ static func createJSON(from data: Data) throws -> JSON
21+
22+}
23+
24+extension JSON {
25+
26+ /// Create `JSON` from UTF-8 `data`. By default, parses using the
27+ /// Swift-native `JSONParser` backend.
28+ public init(data: Data, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
29+ self = try parser.createJSON(from: data)
30+ }
31+
32+ /// Create `JSON` from UTF-8 `string`.
33+ public init(jsonString: Swift.String, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
34+ self = try parser.createJSON(from: jsonString.data(using: Swift.String.Encoding.utf8) ?? Data())
35+ }
36+}
37+
38+// MARK: - NSJSONSerialization
39+
40+extension JSONSerialization: JSONParserType {
41+
42+ // MARK: Decode Data
43+
44+ /// Use the built-in, Objective-C based JSON parser to create `JSON`.
45+ /// - parameter data: An instance of `Data`.
46+ /// - returns: An instance of `JSON`.
47+ /// - throws: An error that may arise if the `Data` cannot be parsed into an object.
48+ public static func createJSON(from data: Data) throws -> JSON {
49+ return makeJSON(with: try JSONSerialization.jsonObject(with: data, options: []))
50+ }
51+
52+ // MARK: Make JSON
53+
54+ /// Makes a `JSON` object by matching its argument to a case in the `JSON` enum.
55+ /// - parameter object: The instance of `Any` returned from serializing the JSON.
56+ /// - returns: An instance of `JSON` matching the JSON given to the function.
57+ private static func makeJSON(with object: Any) -> JSON {
58+ switch object {
59+ case let n as NSNumber:
60+ let numberType = CFNumberGetType(n)
61+ switch numberType {
62+ case .charType:
63+ return .bool(n.boolValue)
64+
65+ case .shortType, .intType, .longType, .cfIndexType, .nsIntegerType, .sInt8Type, .sInt16Type, .sInt32Type:
66+ return .int(n.intValue)
67+
68+ case .sInt64Type, .longLongType /* overflows 32-bit Int */:
69+ #if /* 32-bit arch */ arch(arm) || arch(i386)
70+ // Why double, when the Freddy parser would bump to String?
71+ //
72+ // Returning Double avoids making the type depend on whether you're running
73+ // 32-bit or 64-bit code when using the NSJSONSerialization parser.
74+ // NSJSONSerialization appears to bump numbers larger than Int.max to Double on
75+ // 64-bit platforms but use .SInt64Type on 32-bit platforms.
76+ // If we returned a String here, you'd get a String value on 32-bit,
77+ // but a Double value on 64-bit. Instead, we return Double.
78+ //
79+ // This means that, if you switch parsers,
80+ // you'll have to switch from .double to .string for pulling out
81+ // overflowing values, but if you stick with a single parser,
82+ // you at least won't have architecture-dependent lookups!
83+ return .double(n.doubleValue)
84+ #else
85+ return .int(n.intValue)
86+ #endif
87+
88+ case .float32Type, .float64Type, .floatType, .doubleType, .cgFloatType:
89+ return .double(n.doubleValue)
90+ }
91+
92+ case let arr as [Any]:
93+ return makeJSONArray(arr)
94+
95+ case let dict as [Swift.String: Any]:
96+ return makeJSONDictionary(dict)
97+
98+ case let s as Swift.String:
99+ return .string(s)
100+
101+ default:
102+ return .null
103+ }
104+ }
105+
106+ // MARK: Make a JSON Array
107+
108+ /// Makes a `JSON` array from the object passed in.
109+ /// - parameter jsonArray: The array to transform into a `JSON`.
110+ /// - returns: An instance of `JSON` matching the array.
111+ private static func makeJSONArray(_ jsonArray: [Any]) -> JSON {
112+ return .array(jsonArray.map(makeJSON))
113+ }
114+
115+ // MARK: Make a JSON Dictionary
116+
117+ /// Makes a `JSON` dictionary from the Cocoa dictionary passed in.
118+ /// - parameter jsonDict: The dictionary to transform into `JSON`.
119+ /// - returns: An instance of `JSON` matching the dictionary.
120+ private static func makeJSONDictionary(_ jsonDict: [Swift.String: Any]) -> JSON {
121+ return JSON(jsonDict.lazy.map { (key, value) in
122+ (key, makeJSON(with: value))
123+ })
124+ }
125+
126+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONSerializing.swiftnew file+54
@@ -0,0 +1,54 @@
1+// Copyright (C) 2016 Big Nerd Ranch, Inc. Licensed under the MIT license WITHOUT ANY WARRANTY.
2+
3+import Foundation
4+
5+// MARK: - Serialize JSON
6+
7+extension JSON {
8+
9+ /// Attempt to serialize `JSON` into an `Data`.
10+ /// - returns: A byte-stream containing the `JSON` ready for wire transfer.
11+ /// - throws: Errors that arise from `JSONSerialization`.
12+ /// - see: Foundation.JSONSerialization
13+ public func serialize() throws -> Data {
14+ return try JSONSerialization.data(withJSONObject: toJSONSerializationValue(), options: [])
15+ }
16+
17+ /// Attempt to serialize `JSON` into a `String`.
18+ /// - returns: A `String` containing the `JSON`.
19+ /// - throws: A `JSON.Error.StringSerializationError` or errors that arise from `JSONSerialization`.
20+ /// - see: Foundation.JSONSerialization
21+ public func serializeString() throws -> String {
22+ let data = try self.serialize()
23+ guard let json = String(data: data, encoding: String.Encoding.utf8) else {
24+ throw Error.stringSerializationError
25+ }
26+ return json
27+ }
28+
29+ /// A function to help with the serialization of `JSON`.
30+ /// - returns: An `Any` suitable for `JSONSerialization`'s use.
31+ private func toJSONSerializationValue() -> Any {
32+ switch self {
33+ case .array(let jsonArray):
34+ return jsonArray.map { $0.toJSONSerializationValue() }
35+ case .dictionary(let jsonDictionary):
36+ var cocoaDictionary = Swift.Dictionary<Swift.String, Any>(minimumCapacity: jsonDictionary.count)
37+ for (key, json) in jsonDictionary {
38+ cocoaDictionary[key] = json.toJSONSerializationValue()
39+ }
40+ return cocoaDictionary
41+ case .string(let str):
42+ return str
43+ case .double(let num):
44+ return NSNumber(value: num)
45+ case .int(let int):
46+ return NSNumber(value: int)
47+ case .bool(let b):
48+ return NSNumber(value: b)
49+ case .null:
50+ return NSNull()
51+ }
52+
53+ }
54+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/JSONSubscripting.swiftnew file+613
@@ -0,0 +1,613 @@
1+//
2+// JSONSubscripting.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 8/15/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+// MARK: JSONPathType
10+
11+/// A protocol used to define a path within an instance of `JSON` that leads to some desired value.
12+///
13+/// A custom type, such as a `RawRepresentable` enum, may be made to conform to `JSONPathType`
14+/// and used with the subscript APIs.
15+public protocol JSONPathType {
16+ /// Use `self` to key into a `dictionary`.
17+ ///
18+ /// Unlike Swift dictionaries, failing to find a value for a key should throw
19+ /// an error rather than convert to `nil`.
20+ ///
21+ /// Upon failure, implementers should throw an error from `JSON.Error`.
22+ func value(in dictionary: [String : JSON]) throws -> JSON
23+
24+ /// Use `self` to index into an `array`.
25+ ///
26+ /// Unlike Swift arrays, attempting to index outside the collection's bounds
27+ /// should throw an error rather than crash.
28+ ///
29+ /// Upon failure, implementers should throw an error from `JSON.Error`.
30+ func value(in array: [JSON]) throws -> JSON
31+}
32+
33+extension JSONPathType {
34+
35+ /// The default behavior for keying into a dictionary is to throw
36+ /// `JSON.Error.UnexpectedSubscript`.
37+ public func value(in dictionary: [String : JSON]) throws -> JSON {
38+ throw JSON.Error.unexpectedSubscript(type: Self.self)
39+ }
40+
41+ /// The default behavior for indexing into an array is to throw
42+ /// `JSON.Error.UnexpectedSubscript`.
43+ public func value(in array: [JSON]) throws -> JSON {
44+ throw JSON.Error.unexpectedSubscript(type: Self.self)
45+ }
46+
47+}
48+
49+extension String: JSONPathType {
50+
51+ /// A method used to retrieve a value from a given dictionary for a specific key.
52+ /// - parameter dictionary: A `Dictionary` with `String` keys and `JSON` values.
53+ /// - throws: `.KeyNotFound` with an associated value of `self`, where `self` is a `String`,
54+ /// should the key not be present within the `JSON`.
55+ /// - returns: The `JSON` value associated with the given key.
56+ public func value(in dictionary: [String : JSON]) throws -> JSON {
57+ guard let next = dictionary[self] else {
58+ throw JSON.Error.keyNotFound(key: self)
59+ }
60+ return next
61+ }
62+
63+}
64+
65+extension Int: JSONPathType {
66+
67+ /// A method used to retrieve a value from a given array for a specific index.
68+ /// - parameter array: An `Array` of `JSON`.
69+ /// - throws: `.IndexOutOfBounds` with an associated value of `self`, where `self` is an `Int`,
70+ /// should the index not be within the valid range for the array of `JSON`.
71+ /// - returns: The `JSON` value found at the given index.
72+ public func value(in array: [JSON]) throws -> JSON {
73+ guard case array.indices = self else {
74+ throw JSON.Error.indexOutOfBounds(index: self)
75+ }
76+ return array[self]
77+ }
78+
79+}
80+
81+// MARK: - Subscripting core
82+
83+private extension JSON {
84+
85+ enum SubscriptError: Swift.Error {
86+ case subscriptIntoNull(JSONPathType)
87+ }
88+
89+ func value(for pathFragment: JSONPathType, detectingNull: Bool) throws -> JSON {
90+ switch self {
91+ case .null where detectingNull:
92+ throw SubscriptError.subscriptIntoNull(pathFragment)
93+ case let .dictionary(dict):
94+ return try pathFragment.value(in: dict)
95+ case let .array(array):
96+ return try pathFragment.value(in: array)
97+ default:
98+ throw Error.unexpectedSubscript(type: type(of: pathFragment))
99+ }
100+ }
101+
102+ func value(at path: [JSONPathType], detectingNull: Bool = false) throws -> JSON {
103+ var result = self
104+ for pathFragment in path {
105+ result = try result.value(for: pathFragment, detectingNull: detectingNull)
106+ }
107+ return result
108+ }
109+
110+}
111+
112+// MARK: - Subscripting operator
113+
114+extension JSON {
115+
116+ public subscript(key: String) -> JSON? {
117+ return try? value(for: key, detectingNull: false)
118+ }
119+
120+ public subscript(index: Int) -> JSON? {
121+ return try? value(for: index, detectingNull: false)
122+ }
123+
124+}
125+
126+// MARK: - Simple member unpacking
127+
128+extension JSON {
129+
130+ /// Attempts to decode into the returning type from a path into JSON.
131+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
132+ /// - parameter type: If the context this method is called from does not
133+ /// make the return type clear, pass a type implementing `JSONDecodable`
134+ /// to disambiguate the type to decode with.
135+ /// - returns: An initialized member from the inner JSON.
136+ /// - throws: One of the following errors contained in `JSON.Error`:
137+ /// * `KeyNotFound`: A given `String` key does not exist inside a
138+ /// descendant `JSON` dictionary.
139+ /// * `IndexOutOfBounds`: A given `Int` index is outside the bounds of a
140+ /// descendant `JSON` array.
141+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
142+ /// corresponding `JSON` value.
143+ /// * `TypeNotConvertible`: The target value's type inside of
144+ /// the `JSON` instance does not match `Decoded`.
145+ public func decode<Decoded: JSONDecodable>(at path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> Decoded {
146+ return try Decoded(json: value(at: path))
147+ }
148+
149+ /// Retrieves a `Double` from a path into JSON.
150+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
151+ /// - returns: A floating-point `Double`
152+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
153+ /// - seealso: `JSON.decode(at:type:)`
154+ public func getDouble(at path: JSONPathType...) throws -> Double {
155+ return try Double(json: value(at: path))
156+ }
157+
158+ /// Retrieves an `Int` from a path into JSON.
159+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
160+ /// - returns: A numeric `Int`
161+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
162+ /// - seealso: `JSON.decode(at:type:)`
163+ public func getInt(at path: JSONPathType...) throws -> Int {
164+ return try Int(json: value(at: path))
165+ }
166+
167+ /// Retrieves a `String` from a path into JSON.
168+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
169+ /// - returns: A textual `String`
170+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
171+ /// - seealso: `JSON.decode(at:type:)`
172+ public func getString(at path: JSONPathType...) throws -> String {
173+ return try String(json: value(at: path))
174+ }
175+
176+ /// Retrieves a `Bool` from a path into JSON.
177+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
178+ /// - returns: A truthy `Bool`
179+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
180+ /// - seealso: `JSON.decode(at:type:)`
181+ public func getBool(at path: JSONPathType...) throws -> Bool {
182+ return try Bool(json: value(at: path))
183+ }
184+
185+ /// Retrieves a `[JSON]` from a path into JSON.
186+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
187+ /// - returns: An `Array` of `JSON` elements
188+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
189+ /// - seealso: `JSON.decode(at:type:)`
190+ public func getArray(at path: JSONPathType...) throws -> [JSON] {
191+ return try JSON.getArray(from: value(at: path))
192+ }
193+
194+ /// Attempts to decode many values from a descendant JSON array at a path
195+ /// into JSON.
196+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
197+ /// - parameter type: If the context this method is called from does not
198+ /// make the return type clear, pass a type implementing `JSONDecodable`
199+ /// to disambiguate the type to decode with.
200+ /// - returns: An `Array` of decoded elements
201+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`, or
202+ /// any error that arises from decoding the contained values.
203+ /// - seealso: `JSON.decode(at:type:)`
204+ public func decodedArray<Decoded: JSONDecodable>(at path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> [Decoded] {
205+ return try JSON.decodedArray(from: value(at: path))
206+ }
207+
208+ /// Retrieves a `[String: JSON]` from a path into JSON.
209+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
210+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
211+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)`.
212+ /// - seealso: `JSON.decode(at:type:)`
213+ public func getDictionary(at path: JSONPathType...) throws -> [String: JSON] {
214+ return try JSON.getDictionary(from: value(at: path))
215+ }
216+
217+ /// Attempts to decode many values from a descendant JSON object at a path
218+ /// into JSON.
219+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
220+ /// - parameter type: If the context this method is called from does not
221+ /// make the return type clear, pass a type implementing `JSONDecodable`
222+ /// to disambiguate the value type to decode with.
223+ /// - returns: A `Dictionary` of `String` keys and decoded values.
224+ /// - throws: One of the `JSON.Error` cases thrown by `decode(at:type:)` or
225+ /// any error that arises from decoding the contained values.
226+ /// - seealso: `JSON.decode(at:type:)`
227+ public func decodedDictionary<Decoded: JSONDecodable>(at path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> [String: Decoded] {
228+ return try JSON.decodedDictionary(from: value(at: path))
229+ }
230+
231+}
232+
233+// MARK: - NotFound-Or-Null-to-Optional unpacking
234+
235+extension JSON {
236+
237+ /// An `OptionSetType` used to represent the different options available for subscripting `JSON` with `null` values or missing keys.
238+ /// * `.NullBecomesNil` - Treat `null` values as `nil`.
239+ /// * `.MissingKeyBecomesNil` - Treat missing keys as `nil`.
240+ public struct SubscriptingOptions: OptionSet {
241+ public let rawValue: Int
242+ public init(rawValue: Int) {
243+ self.rawValue = rawValue
244+ }
245+
246+ /// Treat `null` values as `nil`.
247+ public static let NullBecomesNil = SubscriptingOptions(rawValue: 1 << 0)
248+ /// Treat missing keys as `nil`.
249+ public static let MissingKeyBecomesNil = SubscriptingOptions(rawValue: 1 << 1)
250+ }
251+
252+ fileprivate func mapOptional<Value>(at path: [JSONPathType], alongPath options: SubscriptingOptions, transform: (JSON) throws -> Value) throws -> Value? {
253+ let detectNull = options.contains(.NullBecomesNil)
254+ let detectNotFound = options.contains(.MissingKeyBecomesNil)
255+ var json: JSON?
256+ do {
257+ json = try value(at: path, detectingNull: detectNull)
258+ return try json.map(transform)
259+ } catch Error.indexOutOfBounds where detectNotFound {
260+ return nil
261+ } catch Error.keyNotFound where detectNotFound {
262+ return nil
263+ } catch Error.valueNotConvertible where detectNull && json == .null {
264+ return nil
265+ } catch SubscriptError.subscriptIntoNull where detectNull {
266+ return nil
267+ }
268+ }
269+}
270+
271+extension JSON {
272+
273+ /// Decodes a `JSON` instance if it is not `.Null`, throws otherwise.
274+ /// - parameter json: An instance of `JSON`.
275+ /// - returns: An instance of some type that conforms to `JSONDecodable`.
276+ /// - throws: `Error.ValueNotConvertible` if the `JSON` instance is `.Null`.
277+ private static func getDecoded<Decoded: JSONDecodable>(json: JSON) throws -> Decoded {
278+ guard json != .null else {
279+ throw Error.valueNotConvertible(value: json, to: Decoded.self)
280+ }
281+ return try Decoded.init(json: json)
282+ }
283+
284+ /// Optionally decodes into the returning type from a path into JSON.
285+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
286+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
287+ /// - parameter type: If the context this method is called from does not
288+ /// make the return type clear, pass a type implementing `JSONDecodable`
289+ /// to disambiguate the type to decode with.
290+ /// - returns: A decoded value from the inner JSON if found, or `nil`.
291+ /// - throws: One of the following errors contained in `JSON.Error`:
292+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
293+ /// `JSON` dictionary.
294+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
295+ /// descendant `JSON` array.
296+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
297+ /// corresponding `JSON` value.
298+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
299+ /// instance does not match the decoded value.
300+ /// * Any error that arises from decoding the value.
301+ public func decode<Decoded: JSONDecodable>(at path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> Decoded? {
302+ return try mapOptional(at: path, alongPath: options, transform: JSON.getDecoded)
303+ }
304+
305+ /// Optionally retrieves a `Double` from a path into JSON.
306+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
307+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
308+ /// - returns: A `Double` if a value could be found, otherwise `nil`.
309+ /// - throws: One of the following errors contained in `JSON.Error`:
310+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
311+ /// `JSON` dictionary.
312+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
313+ /// descendant `JSON` array.
314+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
315+ /// corresponding `JSON` value.
316+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
317+ /// instance does not match the decoded value.
318+ public func getDouble(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Double? {
319+ return try mapOptional(at: path, alongPath: options, transform: Double.init)
320+ }
321+
322+ /// Optionally retrieves a `Int` from a path into JSON.
323+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
324+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
325+ /// - returns: A numeric `Int` if a value could be found, otherwise `nil`.
326+ /// - throws: One of the following errors contained in `JSON.Error`:
327+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
328+ /// `JSON` dictionary.
329+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
330+ /// descendant `JSON` array.
331+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
332+ /// corresponding `JSON` value.
333+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
334+ /// instance does not match the decoded value.
335+ public func getInt(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Int? {
336+ return try mapOptional(at: path, alongPath: options, transform: Int.init)
337+ }
338+
339+ /// Optionally retrieves a `String` from a path into JSON.
340+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
341+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
342+ /// - returns: A text `String` if a value could be found, otherwise `nil`.
343+ /// - throws: One of the following errors contained in `JSON.Error`:
344+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
345+ /// `JSON` dictionary.
346+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
347+ /// descendant `JSON` array.
348+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
349+ /// corresponding `JSON` value.
350+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
351+ /// instance does not match the decoded value.
352+ public func getString(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> String? {
353+ return try mapOptional(at: path, alongPath: options, transform: String.init)
354+ }
355+
356+ /// Optionally retrieves a `Bool` from a path into JSON.
357+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
358+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
359+ /// - returns: A truthy `Bool` if a value could be found, otherwise `nil`.
360+ /// - throws: One of the following errors contained in `JSON.Error`:
361+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
362+ /// `JSON` dictionary.
363+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
364+ /// descendant `JSON` array.
365+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
366+ /// corresponding `JSON` value.
367+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
368+ /// instance does not match the decoded value.
369+ public func getBool(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Bool? {
370+ return try mapOptional(at: path, alongPath: options, transform: Bool.init)
371+ }
372+
373+ /// Optionally retrieves a `[JSON]` from a path into the recieving structure.
374+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
375+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
376+ /// - returns: An `Array` of `JSON` elements if a value could be found,
377+ /// otherwise `nil`.
378+ /// - throws: One of the following errors contained in `JSON.Error`:
379+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
380+ /// `JSON` dictionary.
381+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
382+ /// descendant `JSON` array.
383+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
384+ /// corresponding `JSON` value.
385+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
386+ /// instance does not match the decoded value.
387+ public func getArray(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [JSON]? {
388+ return try mapOptional(at: path, alongPath: options, transform: JSON.getArray)
389+ }
390+
391+ /// Optionally decodes many values from a descendant array at a path into
392+ /// JSON.
393+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
394+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
395+ /// - parameter type: If the context this method is called from does not
396+ /// make the return type clear, pass a type implementing `JSONDecodable`
397+ /// to disambiguate the value type to decode with.
398+ /// - returns: An `Array` of decoded elements if found, otherwise `nil`.
399+ /// - throws: One of the following errors contained in `JSON.Error`:
400+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
401+ /// `JSON` dictionary.
402+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
403+ /// descendant `JSON` array.
404+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
405+ /// corresponding `JSON` value.
406+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
407+ /// instance does not match the decoded value.
408+ /// * Any error that arises from decoding the value.
409+ public func decodedArray<Decoded: JSONDecodable>(at path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> [Decoded]? {
410+ return try mapOptional(at: path, alongPath: options, transform: JSON.decodedArray)
411+ }
412+
413+ /// Optionally retrieves a `[String: JSON]` from a path into the recieving
414+ /// structure.
415+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
416+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
417+ /// - returns: A `Dictionary` of `String` mapping to `JSON` elements if a
418+ /// value could be found, otherwise `nil`.
419+ /// - throws: One of the following errors contained in `JSON.Error`:
420+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
421+ /// `JSON` dictionary.
422+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
423+ /// descendant `JSON` array.
424+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
425+ /// corresponding `JSON` value.
426+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
427+ /// instance does not match the decoded value.
428+ public func getDictionary(at path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [String: JSON]? {
429+ return try mapOptional(at: path, alongPath: options, transform: JSON.getDictionary)
430+ }
431+
432+ /// Optionally attempts to decode many values from a descendant object at a path
433+ /// into JSON.
434+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
435+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
436+ /// - parameter type: If the context this method is called from does not
437+ /// make the return type clear, pass a type implementing `JSONDecodable`
438+ /// to disambiguate the value type to decode with.
439+ /// - returns: A `Dictionary` of `String` mapping to decoded elements if a
440+ /// value could be found, otherwise `nil`.
441+ /// - throws: One of the following errors contained in `JSON.Error`:
442+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
443+ /// `JSON` dictionary.
444+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
445+ /// descendant `JSON` array.
446+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
447+ /// corresponding `JSON` value.
448+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
449+ /// instance does not match the decoded value.
450+ /// * Any error that arises from decoding the value.
451+ public func decodedDictionary<Decoded: JSONDecodable>(at path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> [String: Decoded]? {
452+ return try mapOptional(at: path, alongPath: options, transform: JSON.decodedDictionary)
453+ }
454+
455+}
456+
457+// MARK: - Missing-with-fallback unpacking
458+
459+extension JSON {
460+
461+ fileprivate func mapOptional<Value>(at path: [JSONPathType], fallback: () -> Value, transform: (JSON) throws -> Value) throws -> Value {
462+ return try mapOptional(at: path, alongPath: .MissingKeyBecomesNil, transform: transform) ?? fallback()
463+ }
464+
465+ /// Attempts to decode into the returning type from a path into
466+ /// JSON, or returns a fallback if not found.
467+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
468+ /// - parameter fallback: Value to use when one is missing at the subscript.
469+ /// - returns: An initialized member from the inner JSON.
470+ /// - throws: One of the following errors contained in `JSON.Error`:
471+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
472+ /// corresponding `JSON` value.
473+ /// * `TypeNotConvertible`: The target value's type inside of
474+ /// the `JSON` instance does not match `Decoded`.
475+ public func decode<Decoded: JSONDecodable>(at path: JSONPathType..., or fallback: @autoclosure() -> Decoded) throws -> Decoded {
476+ return try mapOptional(at: path, fallback: fallback, transform: Decoded.init)
477+ }
478+
479+ /// Retrieves a `Double` from a path into JSON or a fallback if not found.
480+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
481+ /// - parameter fallback: `Double` to use when one is missing at the subscript.
482+ /// - returns: A floating-point `Double`
483+ /// - throws: One of the `JSON.Error` cases thrown by calling `mapOptional(at:fallback:transform:)`.
484+ public func getDouble(at path: JSONPathType..., or fallback: @autoclosure() -> Double) throws -> Double {
485+ return try mapOptional(at: path, fallback: fallback, transform: Double.init)
486+ }
487+
488+ /// Retrieves an `Int` from a path into JSON or a fallback if not found.
489+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
490+ /// - parameter fallback: `Int` to use when one is missing at the subscript.
491+ /// - returns: A numeric `Int`
492+ /// - throws: One of the following errors contained in `JSON.Error`:
493+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
494+ /// `JSON` dictionary.
495+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
496+ /// descendant `JSON` array.
497+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
498+ /// corresponding `JSON` value.
499+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
500+ /// instance does not match the decoded value.
501+ public func getInt(at path: JSONPathType..., or fallback: @autoclosure() -> Int) throws -> Int {
502+ return try mapOptional(at: path, fallback: fallback, transform: Int.init)
503+ }
504+
505+ /// Retrieves a `String` from a path into JSON or a fallback if not found.
506+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
507+ /// - parameter fallback: `String` to use when one is missing at the subscript.
508+ /// - returns: A textual `String`
509+ /// - throws: One of the following errors contained in `JSON.Error`:
510+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
511+ /// `JSON` dictionary.
512+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
513+ /// descendant `JSON` array.
514+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
515+ /// corresponding `JSON` value.
516+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
517+ /// instance does not match the decoded value.
518+ public func getString(at path: JSONPathType..., or fallback: @autoclosure() -> String) throws -> String {
519+ return try mapOptional(at: path, fallback: fallback, transform: String.init)
520+ }
521+
522+ /// Retrieves a `Bool` from a path into JSON or a fallback if not found.
523+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
524+ /// - parameter fallback: `Bool` to use when one is missing at the subscript.
525+ /// - returns: A truthy `Bool`
526+ /// - throws: One of the following errors contained in `JSON.Error`:
527+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
528+ /// `JSON` dictionary.
529+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
530+ /// descendant `JSON` array.
531+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
532+ /// corresponding `JSON` value.
533+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
534+ /// instance does not match the decoded value.
535+ public func getBool(at path: JSONPathType..., or fallback: @autoclosure() -> Bool) throws -> Bool {
536+ return try mapOptional(at: path, fallback: fallback, transform: Bool.init)
537+ }
538+
539+ /// Retrieves a `[JSON]` from a path into JSON or a fallback if not found.
540+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
541+ /// - parameter fallback: `Array` to use when one is missing at the subscript.
542+ /// - returns: An `Array` of `JSON` elements
543+ /// - throws: One of the following errors contained in `JSON.Error`:
544+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
545+ /// `JSON` dictionary.
546+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
547+ /// descendant `JSON` array.
548+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
549+ /// corresponding `JSON` value.
550+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
551+ /// instance does not match the decoded value.
552+ public func getArray(at path: JSONPathType..., or fallback: @autoclosure() -> [JSON]) throws -> [JSON] {
553+ return try mapOptional(at: path, fallback: fallback, transform: JSON.getArray)
554+ }
555+
556+ /// Attempts to decodes many values from a desendant JSON array at a path
557+ /// into the recieving structure, returning a fallback if not found.
558+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
559+ /// - parameter fallback: `Array` to use when one is missing at the subscript.
560+ /// - returns: An `Array` of decoded elements
561+ /// - throws: One of the following errors contained in `JSON.Error`:
562+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
563+ /// `JSON` dictionary.
564+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
565+ /// descendant `JSON` array.
566+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
567+ /// corresponding `JSON` value.
568+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
569+ /// instance does not match the decoded value.
570+ /// * Any error that arises from decoding the value.
571+ public func decodedArray<Decoded: JSONDecodable>(at path: JSONPathType..., or fallback: @autoclosure() -> [Decoded]) throws -> [Decoded] {
572+ return try mapOptional(at: path, fallback: fallback, transform: JSON.decodedArray)
573+ }
574+
575+ /// Retrieves a `[String: JSON]` from a path into JSON or a fallback if not
576+ /// found.
577+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
578+ /// - parameter fallback: `Dictionary` to use when one is missing at the subscript.
579+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
580+ /// - throws: One of the following errors contained in `JSON.Error`:
581+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
582+ /// `JSON` dictionary.
583+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
584+ /// descendant `JSON` array.
585+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
586+ /// corresponding `JSON` value.
587+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
588+ /// instance does not match the decoded value.
589+ public func getDictionary(at path: JSONPathType..., or fallback: @autoclosure() -> [String: JSON]) throws -> [String: JSON] {
590+ return try mapOptional(at: path, fallback: fallback, transform: JSON.getDictionary)
591+ }
592+
593+ /// Attempts to decode many values from a descendant JSON object at a path
594+ /// into the receiving structure, returning a fallback if not found.
595+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
596+ /// - parameter fallback: Value to use when one is missing at the subscript
597+ /// - returns: A `Dictionary` of `String` mapping to decoded elements.
598+ /// - throws: One of the following errors contained in `JSON.Error`:
599+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
600+ /// `JSON` dictionary.
601+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
602+ /// descendant `JSON` array.
603+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
604+ /// corresponding `JSON` value.
605+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
606+ /// instance does not match the decoded value.
607+ /// * Any error that arises from decoding the value.
608+ public func decodedDictionary<Decoded: JSONDecodable>(at path: JSONPathType..., or fallback: @autoclosure() -> [String: Decoded]) throws -> [String: Decoded] {
609+ return try mapOptional(at: path, fallback: fallback, transform: JSON.decodedDictionary)
610+ }
611+
612+
613+}
tests/JSONTestSuite/parsers/test_Freddy_20161018/test_Freddy/main.swiftnew file+40
@@ -0,0 +1,40 @@
1+//
2+// main.swift
3+// test_Freddy
4+//
5+// Created by nst on 10/08/16.
6+// Copyright © 2016 Nicolas Seriot. All rights reserved.
7+//
8+
9+import Foundation
10+
11+func main() {
12+
13+ guard ProcessInfo.processInfo.arguments.count == 2 else {
14+ let url = URL(fileURLWithPath: ProcessInfo.processInfo.arguments[0])
15+ let programName = url.lastPathComponent
16+ print("Usage: ./\(programName) file.json")
17+ exit(1)
18+ }
19+
20+ let path = ProcessInfo.processInfo.arguments[1]
21+ let url = NSURL.fileURL(withPath:path)
22+
23+ do {
24+ let data = try Data(contentsOf:url)
25+ do {
26+ let o = try JSONParser.parse(utf8: data)
27+ exit(0)
28+ } catch {
29+ exit(1)
30+ }
31+
32+ } catch let e {
33+ print("*** CANNOT READ DATA AT \(url)")
34+ print(e)
35+ exit(1)
36+ }
37+
38+}
39+
40+main()
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/bin/test_Freddy_2_1_0new file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.pbxprojnew file+300
@@ -0,0 +1,300 @@
1+// !$*UTF8*$!
2+{
3+ archiveVersion = 1;
4+ classes = {
5+ };
6+ objectVersion = 46;
7+ objects = {
8+
9+/* Begin PBXBuildFile section */
10+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03D84ABA1D5B0A1000776402 /* main.swift */; };
11+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7781D5B75600021630C /* JSON.swift */; };
12+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7791D5B75600021630C /* JSONDecodable.swift */; };
13+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77A1D5B75600021630C /* JSONEncodable.swift */; };
14+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */; };
15+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */; };
16+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77D1D5B75600021630C /* JSONParser.swift */; };
17+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77E1D5B75600021630C /* JSONParsing.swift */; };
18+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F77F1D5B75600021630C /* JSONSerializing.swift */; };
19+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03F8F7801D5B75600021630C /* JSONSubscripting.swift */; };
20+/* End PBXBuildFile section */
21+
22+/* Begin PBXCopyFilesBuildPhase section */
23+ 03D84AB51D5B0A1000776402 /* CopyFiles */ = {
24+ isa = PBXCopyFilesBuildPhase;
25+ buildActionMask = 2147483647;
26+ dstPath = /usr/share/man/man1;
27+ dstSubfolderSpec = 0;
28+ files = (
29+ );
30+ runOnlyForDeploymentPostprocessing = 1;
31+ };
32+/* End PBXCopyFilesBuildPhase section */
33+
34+/* Begin PBXFileReference section */
35+ 03D84AB71D5B0A1000776402 /* test_Freddy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_Freddy; sourceTree = BUILT_PRODUCTS_DIR; };
36+ 03D84ABA1D5B0A1000776402 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
37+ 03F8F7781D5B75600021630C /* JSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSON.swift; path = test_Freddy/JSON.swift; sourceTree = "<group>"; };
38+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONDecodable.swift; path = test_Freddy/JSONDecodable.swift; sourceTree = "<group>"; };
39+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodable.swift; path = test_Freddy/JSONEncodable.swift; sourceTree = "<group>"; };
40+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONEncodingDetector.swift; path = test_Freddy/JSONEncodingDetector.swift; sourceTree = "<group>"; };
41+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONLiteralConvertible.swift; path = test_Freddy/JSONLiteralConvertible.swift; sourceTree = "<group>"; };
42+ 03F8F77D1D5B75600021630C /* JSONParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParser.swift; path = test_Freddy/JSONParser.swift; sourceTree = "<group>"; };
43+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONParsing.swift; path = test_Freddy/JSONParsing.swift; sourceTree = "<group>"; };
44+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSerializing.swift; path = test_Freddy/JSONSerializing.swift; sourceTree = "<group>"; };
45+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = JSONSubscripting.swift; path = test_Freddy/JSONSubscripting.swift; sourceTree = "<group>"; };
46+/* End PBXFileReference section */
47+
48+/* Begin PBXFrameworksBuildPhase section */
49+ 03D84AB41D5B0A1000776402 /* Frameworks */ = {
50+ isa = PBXFrameworksBuildPhase;
51+ buildActionMask = 2147483647;
52+ files = (
53+ );
54+ runOnlyForDeploymentPostprocessing = 0;
55+ };
56+/* End PBXFrameworksBuildPhase section */
57+
58+/* Begin PBXGroup section */
59+ 03D84AAE1D5B0A1000776402 = {
60+ isa = PBXGroup;
61+ children = (
62+ 03F8F7781D5B75600021630C /* JSON.swift */,
63+ 03F8F7791D5B75600021630C /* JSONDecodable.swift */,
64+ 03F8F77A1D5B75600021630C /* JSONEncodable.swift */,
65+ 03F8F77B1D5B75600021630C /* JSONEncodingDetector.swift */,
66+ 03F8F77C1D5B75600021630C /* JSONLiteralConvertible.swift */,
67+ 03F8F77D1D5B75600021630C /* JSONParser.swift */,
68+ 03F8F77E1D5B75600021630C /* JSONParsing.swift */,
69+ 03F8F77F1D5B75600021630C /* JSONSerializing.swift */,
70+ 03F8F7801D5B75600021630C /* JSONSubscripting.swift */,
71+ 03D84AB91D5B0A1000776402 /* test_Freddy */,
72+ 03D84AB81D5B0A1000776402 /* Products */,
73+ );
74+ sourceTree = "<group>";
75+ };
76+ 03D84AB81D5B0A1000776402 /* Products */ = {
77+ isa = PBXGroup;
78+ children = (
79+ 03D84AB71D5B0A1000776402 /* test_Freddy */,
80+ );
81+ name = Products;
82+ sourceTree = "<group>";
83+ };
84+ 03D84AB91D5B0A1000776402 /* test_Freddy */ = {
85+ isa = PBXGroup;
86+ children = (
87+ 03D84ABA1D5B0A1000776402 /* main.swift */,
88+ );
89+ path = test_Freddy;
90+ sourceTree = "<group>";
91+ };
92+/* End PBXGroup section */
93+
94+/* Begin PBXNativeTarget section */
95+ 03D84AB61D5B0A1000776402 /* test_Freddy */ = {
96+ isa = PBXNativeTarget;
97+ buildConfigurationList = 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */;
98+ buildPhases = (
99+ 03D84AB31D5B0A1000776402 /* Sources */,
100+ 03D84AB41D5B0A1000776402 /* Frameworks */,
101+ 03D84AB51D5B0A1000776402 /* CopyFiles */,
102+ );
103+ buildRules = (
104+ );
105+ dependencies = (
106+ );
107+ name = test_Freddy;
108+ productName = test_Freddy;
109+ productReference = 03D84AB71D5B0A1000776402 /* test_Freddy */;
110+ productType = "com.apple.product-type.tool";
111+ };
112+/* End PBXNativeTarget section */
113+
114+/* Begin PBXProject section */
115+ 03D84AAF1D5B0A1000776402 /* Project object */ = {
116+ isa = PBXProject;
117+ attributes = {
118+ LastSwiftUpdateCheck = 0800;
119+ LastUpgradeCheck = 0800;
120+ ORGANIZATIONNAME = "Nicolas Seriot";
121+ TargetAttributes = {
122+ 03D84AB61D5B0A1000776402 = {
123+ CreatedOnToolsVersion = 8.0;
124+ DevelopmentTeam = VBYRKYS73S;
125+ DevelopmentTeamName = "Nicolas Seriot";
126+ ProvisioningStyle = Automatic;
127+ };
128+ };
129+ };
130+ buildConfigurationList = 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */;
131+ compatibilityVersion = "Xcode 3.2";
132+ developmentRegion = English;
133+ hasScannedForEncodings = 0;
134+ knownRegions = (
135+ en,
136+ );
137+ mainGroup = 03D84AAE1D5B0A1000776402;
138+ productRefGroup = 03D84AB81D5B0A1000776402 /* Products */;
139+ projectDirPath = "";
140+ projectRoot = "";
141+ targets = (
142+ 03D84AB61D5B0A1000776402 /* test_Freddy */,
143+ );
144+ };
145+/* End PBXProject section */
146+
147+/* Begin PBXSourcesBuildPhase section */
148+ 03D84AB31D5B0A1000776402 /* Sources */ = {
149+ isa = PBXSourcesBuildPhase;
150+ buildActionMask = 2147483647;
151+ files = (
152+ 03F8F7881D5B75600021630C /* JSONSerializing.swift in Sources */,
153+ 03F8F7821D5B75600021630C /* JSONDecodable.swift in Sources */,
154+ 03F8F7851D5B75600021630C /* JSONLiteralConvertible.swift in Sources */,
155+ 03F8F7871D5B75600021630C /* JSONParsing.swift in Sources */,
156+ 03F8F7861D5B75600021630C /* JSONParser.swift in Sources */,
157+ 03F8F7831D5B75600021630C /* JSONEncodable.swift in Sources */,
158+ 03D84ABB1D5B0A1000776402 /* main.swift in Sources */,
159+ 03F8F7811D5B75600021630C /* JSON.swift in Sources */,
160+ 03F8F7891D5B75600021630C /* JSONSubscripting.swift in Sources */,
161+ 03F8F7841D5B75600021630C /* JSONEncodingDetector.swift in Sources */,
162+ );
163+ runOnlyForDeploymentPostprocessing = 0;
164+ };
165+/* End PBXSourcesBuildPhase section */
166+
167+/* Begin XCBuildConfiguration section */
168+ 03D84ABC1D5B0A1000776402 /* Debug */ = {
169+ isa = XCBuildConfiguration;
170+ buildSettings = {
171+ ALWAYS_SEARCH_USER_PATHS = NO;
172+ CLANG_ANALYZER_NONNULL = YES;
173+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
174+ CLANG_CXX_LIBRARY = "libc++";
175+ CLANG_ENABLE_MODULES = YES;
176+ CLANG_ENABLE_OBJC_ARC = YES;
177+ CLANG_WARN_BOOL_CONVERSION = YES;
178+ CLANG_WARN_CONSTANT_CONVERSION = YES;
179+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
180+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
181+ CLANG_WARN_EMPTY_BODY = YES;
182+ CLANG_WARN_ENUM_CONVERSION = YES;
183+ CLANG_WARN_INT_CONVERSION = YES;
184+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
185+ CLANG_WARN_UNREACHABLE_CODE = YES;
186+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
187+ CODE_SIGN_IDENTITY = "-";
188+ COPY_PHASE_STRIP = NO;
189+ DEBUG_INFORMATION_FORMAT = dwarf;
190+ ENABLE_STRICT_OBJC_MSGSEND = YES;
191+ ENABLE_TESTABILITY = YES;
192+ GCC_C_LANGUAGE_STANDARD = gnu99;
193+ GCC_DYNAMIC_NO_PIC = NO;
194+ GCC_NO_COMMON_BLOCKS = YES;
195+ GCC_OPTIMIZATION_LEVEL = 0;
196+ GCC_PREPROCESSOR_DEFINITIONS = (
197+ "DEBUG=1",
198+ "$(inherited)",
199+ );
200+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
201+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
202+ GCC_WARN_UNDECLARED_SELECTOR = YES;
203+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
204+ GCC_WARN_UNUSED_FUNCTION = YES;
205+ GCC_WARN_UNUSED_VARIABLE = YES;
206+ MACOSX_DEPLOYMENT_TARGET = 10.11;
207+ MTL_ENABLE_DEBUG_INFO = YES;
208+ ONLY_ACTIVE_ARCH = YES;
209+ SDKROOT = macosx;
210+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
211+ };
212+ name = Debug;
213+ };
214+ 03D84ABD1D5B0A1000776402 /* Release */ = {
215+ isa = XCBuildConfiguration;
216+ buildSettings = {
217+ ALWAYS_SEARCH_USER_PATHS = NO;
218+ CLANG_ANALYZER_NONNULL = YES;
219+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
220+ CLANG_CXX_LIBRARY = "libc++";
221+ CLANG_ENABLE_MODULES = YES;
222+ CLANG_ENABLE_OBJC_ARC = YES;
223+ CLANG_WARN_BOOL_CONVERSION = YES;
224+ CLANG_WARN_CONSTANT_CONVERSION = YES;
225+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
226+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
227+ CLANG_WARN_EMPTY_BODY = YES;
228+ CLANG_WARN_ENUM_CONVERSION = YES;
229+ CLANG_WARN_INT_CONVERSION = YES;
230+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
231+ CLANG_WARN_UNREACHABLE_CODE = YES;
232+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
233+ CODE_SIGN_IDENTITY = "-";
234+ COPY_PHASE_STRIP = NO;
235+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
236+ ENABLE_NS_ASSERTIONS = NO;
237+ ENABLE_STRICT_OBJC_MSGSEND = YES;
238+ GCC_C_LANGUAGE_STANDARD = gnu99;
239+ GCC_NO_COMMON_BLOCKS = YES;
240+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
241+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
242+ GCC_WARN_UNDECLARED_SELECTOR = YES;
243+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
244+ GCC_WARN_UNUSED_FUNCTION = YES;
245+ GCC_WARN_UNUSED_VARIABLE = YES;
246+ MACOSX_DEPLOYMENT_TARGET = 10.11;
247+ MTL_ENABLE_DEBUG_INFO = NO;
248+ SDKROOT = macosx;
249+ };
250+ name = Release;
251+ };
252+ 03D84ABF1D5B0A1000776402 /* Debug */ = {
253+ isa = XCBuildConfiguration;
254+ buildSettings = {
255+ FRAMEWORK_SEARCH_PATHS = (
256+ "$(inherited)",
257+ "$(PROJECT_DIR)",
258+ );
259+ PRODUCT_NAME = "$(TARGET_NAME)";
260+ SWIFT_VERSION = 2.3;
261+ };
262+ name = Debug;
263+ };
264+ 03D84AC01D5B0A1000776402 /* Release */ = {
265+ isa = XCBuildConfiguration;
266+ buildSettings = {
267+ FRAMEWORK_SEARCH_PATHS = (
268+ "$(inherited)",
269+ "$(PROJECT_DIR)",
270+ );
271+ PRODUCT_NAME = "$(TARGET_NAME)";
272+ SWIFT_VERSION = 2.3;
273+ };
274+ name = Release;
275+ };
276+/* End XCBuildConfiguration section */
277+
278+/* Begin XCConfigurationList section */
279+ 03D84AB21D5B0A1000776402 /* Build configuration list for PBXProject "test_Freddy" */ = {
280+ isa = XCConfigurationList;
281+ buildConfigurations = (
282+ 03D84ABC1D5B0A1000776402 /* Debug */,
283+ 03D84ABD1D5B0A1000776402 /* Release */,
284+ );
285+ defaultConfigurationIsVisible = 0;
286+ defaultConfigurationName = Release;
287+ };
288+ 03D84ABE1D5B0A1000776402 /* Build configuration list for PBXNativeTarget "test_Freddy" */ = {
289+ isa = XCConfigurationList;
290+ buildConfigurations = (
291+ 03D84ABF1D5B0A1000776402 /* Debug */,
292+ 03D84AC01D5B0A1000776402 /* Release */,
293+ );
294+ defaultConfigurationIsVisible = 0;
295+ defaultConfigurationName = Release;
296+ };
297+/* End XCConfigurationList section */
298+ };
299+ rootObject = 03D84AAF1D5B0A1000776402 /* Project object */;
300+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Workspace
3+ version = "1.0">
4+ <FileRef
5+ location = "self:test_Freddy.xcodeproj">
6+ </FileRef>
7+</Workspace>
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/xcshareddata/test_Freddy.xcscmblueprintnew file+30
@@ -0,0 +1,30 @@
1+{
2+ "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A",
3+ "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
4+
5+ },
6+ "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
7+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : 0,
8+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : 0
9+ },
10+ "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "7B3DFA55-F9BF-41D8-8FD5-204D3162EB03",
11+ "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
12+ "6ADA245F937D8ED6D99F5A7865E19F5267A169E2" : "dropbox\/JSON\/test_Freddy\/Vendor\/Freddy\/",
13+ "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A" : "dropbox\/"
14+ },
15+ "DVTSourceControlWorkspaceBlueprintNameKey" : "test_Freddy",
16+ "DVTSourceControlWorkspaceBlueprintVersion" : 204,
17+ "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "JSON\/test_Freddy\/test_Freddy.xcodeproj",
18+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
19+ {
20+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/bignerdranch\/Freddy.git",
21+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
22+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "6ADA245F937D8ED6D99F5A7865E19F5267A169E2"
23+ },
24+ {
25+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "\/Users\/nst\/Dropbox\/dropbox.git",
26+ "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
27+ "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "ED13D74FC1ED9BC322EA1859E5AD7D001676FA6A"
28+ }
29+ ]
30+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_Freddy.xcschemenew file+91
@@ -0,0 +1,91 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Scheme
3+ LastUpgradeVersion = "0800"
4+ version = "1.3">
5+ <BuildAction
6+ parallelizeBuildables = "YES"
7+ buildImplicitDependencies = "YES">
8+ <BuildActionEntries>
9+ <BuildActionEntry
10+ buildForTesting = "YES"
11+ buildForRunning = "YES"
12+ buildForProfiling = "YES"
13+ buildForArchiving = "YES"
14+ buildForAnalyzing = "YES">
15+ <BuildableReference
16+ BuildableIdentifier = "primary"
17+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
18+ BuildableName = "test_Freddy"
19+ BlueprintName = "test_Freddy"
20+ ReferencedContainer = "container:test_Freddy.xcodeproj">
21+ </BuildableReference>
22+ </BuildActionEntry>
23+ </BuildActionEntries>
24+ </BuildAction>
25+ <TestAction
26+ buildConfiguration = "Debug"
27+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+ shouldUseLaunchSchemeArgsEnv = "YES">
30+ <Testables>
31+ </Testables>
32+ <MacroExpansion>
33+ <BuildableReference
34+ BuildableIdentifier = "primary"
35+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
36+ BuildableName = "test_Freddy"
37+ BlueprintName = "test_Freddy"
38+ ReferencedContainer = "container:test_Freddy.xcodeproj">
39+ </BuildableReference>
40+ </MacroExpansion>
41+ <AdditionalOptions>
42+ </AdditionalOptions>
43+ </TestAction>
44+ <LaunchAction
45+ buildConfiguration = "Debug"
46+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48+ launchStyle = "0"
49+ useCustomWorkingDirectory = "NO"
50+ ignoresPersistentStateOnLaunch = "NO"
51+ debugDocumentVersioning = "YES"
52+ debugServiceExtension = "internal"
53+ allowLocationSimulation = "YES">
54+ <BuildableProductRunnable
55+ runnableDebuggingMode = "0">
56+ <BuildableReference
57+ BuildableIdentifier = "primary"
58+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
59+ BuildableName = "test_Freddy"
60+ BlueprintName = "test_Freddy"
61+ ReferencedContainer = "container:test_Freddy.xcodeproj">
62+ </BuildableReference>
63+ </BuildableProductRunnable>
64+ <AdditionalOptions>
65+ </AdditionalOptions>
66+ </LaunchAction>
67+ <ProfileAction
68+ buildConfiguration = "Release"
69+ shouldUseLaunchSchemeArgsEnv = "YES"
70+ savedToolIdentifier = ""
71+ useCustomWorkingDirectory = "NO"
72+ debugDocumentVersioning = "YES">
73+ <BuildableProductRunnable
74+ runnableDebuggingMode = "0">
75+ <BuildableReference
76+ BuildableIdentifier = "primary"
77+ BlueprintIdentifier = "03D84AB61D5B0A1000776402"
78+ BuildableName = "test_Freddy"
79+ BlueprintName = "test_Freddy"
80+ ReferencedContainer = "container:test_Freddy.xcodeproj">
81+ </BuildableReference>
82+ </BuildableProductRunnable>
83+ </ProfileAction>
84+ <AnalyzeAction
85+ buildConfiguration = "Debug">
86+ </AnalyzeAction>
87+ <ArchiveAction
88+ buildConfiguration = "Release"
89+ revealArchiveInOrganizer = "YES">
90+ </ArchiveAction>
91+</Scheme>
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22
@@ -0,0 +1,22 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+<plist version="1.0">
4+<dict>
5+ <key>SchemeUserState</key>
6+ <dict>
7+ <key>test_Freddy.xcscheme</key>
8+ <dict>
9+ <key>orderHint</key>
10+ <integer>0</integer>
11+ </dict>
12+ </dict>
13+ <key>SuppressBuildableAutocreation</key>
14+ <dict>
15+ <key>03D84AB61D5B0A1000776402</key>
16+ <dict>
17+ <key>primary</key>
18+ <true/>
19+ </dict>
20+ </dict>
21+</dict>
22+</plist>
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSON.swiftnew file+95
@@ -0,0 +1,95 @@
1+//
2+// JSON.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// An enum to describe the structure of JSON.
10+public enum JSON {
11+ /// A case for denoting an array with an associated value of `[JSON]`
12+ case Array([JSON])
13+ /// A case for denoting a dictionary with an associated value of `[Swift.String: JSON]`
14+ case Dictionary([Swift.String: JSON])
15+ /// A case for denoting a double with an associated value of `Swift.Double`.
16+ case Double(Swift.Double)
17+ /// A case for denoting an integer with an associated value of `Swift.Int`.
18+ case Int(Swift.Int)
19+ /// A case for denoting a string with an associated value of `Swift.String`.
20+ case String(Swift.String)
21+ /// A case for denoting a boolean with an associated value of `Swift.Bool`.
22+ case Bool(Swift.Bool)
23+ /// A case for denoting null.
24+ case Null
25+}
26+
27+// MARK: - Errors
28+
29+extension JSON {
30+
31+ /// An enum to encapsulate errors that may arise in working with `JSON`.
32+ public enum Error: ErrorType {
33+ /// The `index` is out of bounds for a JSON array
34+ case IndexOutOfBounds(index: Swift.Int)
35+
36+ /// The `key` was not found in the JSON dictionary
37+ case KeyNotFound(key: Swift.String)
38+
39+ /// The JSON is not subscriptable with `type`
40+ case UnexpectedSubscript(type: JSONPathType.Type)
41+
42+ /// Unexpected JSON `value` was found that is not convertible `to` type
43+ case ValueNotConvertible(value: JSON, to: Any.Type)
44+ }
45+
46+}
47+
48+// MARK: - Test Equality
49+
50+/// Return `true` if `lhs` is equal to `rhs`.
51+public func ==(lhs: JSON, rhs: JSON) -> Bool {
52+ switch (lhs, rhs) {
53+ case (.Array(let arrL), .Array(let arrR)):
54+ return arrL == arrR
55+ case (.Dictionary(let dictL), .Dictionary(let dictR)):
56+ return dictL == dictR
57+ case (.String(let strL), .String(let strR)):
58+ return strL == strR
59+ case (.Double(let dubL), .Double(let dubR)):
60+ return dubL == dubR
61+ case (.Double(let dubL), .Int(let intR)):
62+ return dubL == Double(intR)
63+ case (.Int(let intL), .Int(let intR)):
64+ return intL == intR
65+ case (.Int(let intL), .Double(let dubR)):
66+ return Double(intL) == dubR
67+ case (.Bool(let bL), .Bool(let bR)):
68+ return bL == bR
69+ case (.Null, .Null):
70+ return true
71+ default:
72+ return false
73+ }
74+}
75+
76+extension JSON: Equatable {}
77+
78+// MARK: - Printing
79+
80+extension JSON: CustomStringConvertible {
81+
82+ /// A textual representation of `self`.
83+ public var description: Swift.String {
84+ switch self {
85+ case .Array(let arr): return Swift.String(arr)
86+ case .Dictionary(let dict): return Swift.String(dict)
87+ case .String(let string): return string
88+ case .Double(let double): return Swift.String(double)
89+ case .Int(let int): return Swift.String(int)
90+ case .Bool(let bool): return Swift.String(bool)
91+ case .Null: return "null"
92+ }
93+ }
94+
95+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONDecodable.swiftnew file+151
@@ -0,0 +1,151 @@
1+//
2+// JSONDecodable.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/24/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+/// A protocol to provide functionality for creating a model object with a `JSON`
10+/// value.
11+public protocol JSONDecodable {
12+
13+ /// Creates an instance of the model with a `JSON` instance.
14+ /// - parameter json: An instance of a `JSON` value from which to
15+ /// construct an instance of the implementing type.
16+ /// - throws: Any `JSON.Error` for errors derived from inspecting the
17+ /// `JSON` value, or any other error involved in decoding.
18+ init(json: JSON) throws
19+
20+}
21+
22+extension Double: JSONDecodable {
23+
24+ /// An initializer to create an instance of `Double` from a `JSON` value.
25+ /// - parameter json: An instance of `JSON`.
26+ /// - throws: The initializer will throw an instance of `JSON.Error` if
27+ /// an instance of `Double` cannot be created from the `JSON` value that was
28+ /// passed to this initializer.
29+ public init(json: JSON) throws {
30+ switch json {
31+ case let .Double(double):
32+ self = double
33+ case let .Int(int):
34+ self = Swift.Double(int)
35+ default:
36+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Double)
37+ }
38+ }
39+
40+}
41+
42+extension Int: JSONDecodable {
43+
44+ /// An initializer to create an instance of `Int` from a `JSON` value.
45+ /// - parameter json: An instance of `JSON`.
46+ /// - throws: The initializer will throw an instance of `JSON.Error` if
47+ /// an instance of `Int` cannot be created from the `JSON` value that was
48+ /// passed to this initializer.
49+ public init(json: JSON) throws {
50+ switch json {
51+ case let .Double(double) where double <= Double(Swift.Int.max):
52+ self = Swift.Int(double)
53+ case let .Int(int):
54+ self = int
55+ default:
56+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Int)
57+ }
58+ }
59+
60+}
61+
62+extension String: JSONDecodable {
63+
64+ /// An initializer to create an instance of `String` from a `JSON` value.
65+ /// - parameter json: An instance of `JSON`.
66+ /// - throws: The initializer will throw an instance of `JSON.Error` if
67+ /// an instance of `String` cannot be created from the `JSON` value that was
68+ /// passed to this initializer.
69+ public init(json: JSON) throws {
70+ guard case let .String(string) = json else {
71+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.String)
72+ }
73+ self = string
74+ }
75+
76+}
77+
78+extension Bool: JSONDecodable {
79+
80+ /// An initializer to create an instance of `Bool` from a `JSON` value.
81+ /// - parameter json: An instance of `JSON`.
82+ /// - throws: The initializer will throw an instance of `JSON.Error` if
83+ /// an instance of `Bool` cannot be created from the `JSON` value that was
84+ /// passed to this initializer.
85+ public init(json: JSON) throws {
86+ guard case let .Bool(bool) = json else {
87+ throw JSON.Error.ValueNotConvertible(value: json, to: Swift.Bool)
88+ }
89+ self = bool
90+ }
91+
92+}
93+
94+extension RawRepresentable where RawValue: JSONDecodable {
95+
96+ /// An initializer to create an instance of `RawRepresentable` from a `JSON` value.
97+ /// - parameter json: An instance of `JSON`.
98+ /// - throws: The initializer will throw an instance of `JSON.Error` if
99+ /// an instance of `RawRepresentable` cannot be created from the `JSON` value that was
100+ /// passed to this initializer.
101+ public init(json: JSON) throws {
102+ let raw = try json.decode(type: RawValue.self)
103+ guard let value = Self(rawValue: raw) else {
104+ throw JSON.Error.ValueNotConvertible(value: json, to: Self.self)
105+ }
106+ self = value
107+ }
108+}
109+
110+internal extension JSON {
111+
112+ /// Retrieves a `[JSON]` from the JSON.
113+ /// - returns: An `Array` of `JSON` elements
114+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
115+ /// - seealso: `JSON.decode(_:type:)`
116+ static func getArray(json: JSON) throws -> [JSON] {
117+ // Ideally should be expressed as a conditional protocol implementation on Swift.Array.
118+ guard case let .Array(array) = json else {
119+ throw Error.ValueNotConvertible(value: json, to: Swift.Array<JSON>)
120+ }
121+ return array
122+ }
123+
124+ /// Retrieves a `[String: JSON]` from the JSON.
125+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
126+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`.
127+ /// - seealso: `JSON.decode(_:type:)`
128+ static func getDictionary(json: JSON) throws -> [Swift.String: JSON] {
129+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
130+ guard case let .Dictionary(dictionary) = json else {
131+ throw Error.ValueNotConvertible(value: json, to: Swift.Dictionary<Swift.String, JSON>)
132+ }
133+ return dictionary
134+ }
135+
136+ /// Attempts to decode many values from a descendant JSON array at a path
137+ /// into JSON.
138+ /// - parameter type: If the context this method is called from does not
139+ /// make the return type clear, pass a type implementing `JSONDecodable`
140+ /// to disambiguate the type to decode with.
141+ /// - returns: An `Array` of decoded elements
142+ /// - throws: Any of the `JSON.Error` cases thrown by `decode(type:)`, as
143+ /// well as any error that arises from decoding the contained values.
144+ /// - seealso: `JSON.decode(_:type:)`
145+ static func getArrayOf<Decoded: JSONDecodable>(json: JSON) throws -> [Decoded] {
146+ // Ideally should be expressed as a conditional protocol implementation on Swift.Dictionary.
147+ // This implementation also doesn't do the `type = Type.self` trick.
148+ return try getArray(json).map(Decoded.init)
149+ }
150+
151+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONEncodable.swiftnew file+83
@@ -0,0 +1,83 @@
1+//
2+// JSONEncodable.swift
3+// Freddy
4+//
5+// Created by Matthew Mathias on 1/4/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+/// A protocol to facilitate encoding and decoding of `JSON`.
12+public protocol JSONEncodable {
13+ /// Converts an instance of a conforming type to `JSON`.
14+ /// - returns: An instance of `JSON`.
15+ /// - Note: If conforming to `JSONEncodable` with a custom type of your own, you should return an instance of
16+ /// `JSON.Dictionary`.
17+ func toJSON() -> JSON
18+}
19+
20+extension Array where Element: JSONEncodable {
21+ /// Converts an instance of `Array` whose elements conform to `JSONEncodable` to `JSON`.
22+ /// - returns: An instance of `JSON` where the enum case is `.Array`.
23+ public func toJSON() -> JSON {
24+ let arrayOfJSON = self.map { $0.toJSON() }
25+ return .Array(arrayOfJSON)
26+ }
27+}
28+
29+extension Dictionary where Value: JSONEncodable {
30+ /// Converts an instance of `Dictionary` whose values conform to `JSONEncodable` to `JSON`. The keys in the resulting
31+ /// `JSON.Dictionary` will be of type `String`.
32+ /// - returns: An instance of `JSON` where the enum case is `.Dictionary`.
33+ public func toJSON() -> JSON {
34+ var jsonDictionary = [String: JSON]()
35+
36+ for (k, v) in self {
37+ let key = String(k)
38+ jsonDictionary[key] = v.toJSON()
39+ }
40+
41+ return .Dictionary(jsonDictionary)
42+ }
43+}
44+
45+extension Int: JSONEncodable {
46+ /// Converts an instance of a conforming type to `JSON`.
47+ /// - returns: An instance of `JSON` where the enum case is `.Int`.
48+ public func toJSON() -> JSON {
49+ return .Int(self)
50+ }
51+}
52+
53+extension Double: JSONEncodable {
54+ /// Converts an instance of a conforming type to `JSON`.
55+ /// - returns: An instance of `JSON` where the enum case is `.Double`.
56+ public func toJSON() -> JSON {
57+ return .Double(self)
58+ }
59+}
60+
61+extension String: JSONEncodable {
62+ /// Converts an instance of a conforming type to `JSON`.
63+ /// - returns: An instance of `JSON` where the enum case is `.String`.
64+ public func toJSON() -> JSON {
65+ return .String(self)
66+ }
67+}
68+
69+extension Bool: JSONEncodable {
70+ /// Converts an instance of a conforming type to `JSON`.
71+ /// - returns: An instance of `JSON` where the enum case is `.Bool`.
72+ public func toJSON() -> JSON {
73+ return .Bool(self)
74+ }
75+}
76+
77+extension RawRepresentable where RawValue: JSONEncodable {
78+ /// Converts an instance of a conforming type to `JSON`.
79+ /// - returns: An instance of `JSON` where the enum case is whatever the underlying `RawValue` converts to.
80+ public func toJSON() -> JSON {
81+ return rawValue.toJSON()
82+ }
83+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONEncodingDetector.swiftnew file+110
@@ -0,0 +1,110 @@
1+//
2+// JSONEncodingDetector.swift
3+// Freddy
4+//
5+// Created by Robert Edwards on 1/27/16.
6+// Copyright © 2016 Big Nerd Ranch. All rights reserved.
7+//
8+
9+/// Struct for attempting to detect the Unicode encoding used with the data supplied to the JSONParser
10+public struct JSONEncodingDetector {
11+
12+ //// The Unicode encodings looked for during detection
13+ public enum Encoding {
14+ //// UTF-8
15+ case UTF8
16+ //// UTF-16 Little Endian
17+ case UTF16LE
18+ //// UTF-16 Big Endian
19+ case UTF16BE
20+ //// UTF-32 Little Endian
21+ case UTF32LE
22+ //// UTF-32 Big Endian
23+ case UTF32BE
24+ }
25+
26+ //// The Unicode encodings supported by JSONParser.swift
27+ public static let supportedEncodings: [Encoding] = [.UTF8]
28+
29+ typealias ByteStreamPrefixInformation = (encoding: Encoding, byteOrderMarkLength: Int)
30+
31+ //// Attempts to detect the Unicode encoding used for a given set of data.
32+ ////
33+ //// This function initially looks for a Byte Order Mark in the following form:
34+ ////
35+ //// Bytes | Encoding Form
36+ //// --------------|----------------
37+ //// 00 00 FE FF | UTF-32, big-endian
38+ //// FF FE 00 00 | UTF-32, little-endian
39+ //// FE FF | UTF-16, big-endian
40+ //// FF FE | UTF-16, little-endian
41+ //// EF BB BF | UTF-8
42+ ////
43+ //// If a BOM is not found then we detect using the following approach described in
44+ //// the JSON RFC http://www.ietf.org/rfc/rfc4627.txt:
45+ ////
46+ //// Since the first two characters of a JSON text will always be ASCII
47+ //// characters [RFC0020], it is possible to determine whether an octet
48+ //// stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
49+ //// at the pattern of nulls in the first four octets.
50+ ////
51+ //// 00 00 00 xx UTF-32BE
52+ //// 00 xx 00 xx UTF-16BE
53+ //// xx 00 00 00 UTF-32LE
54+ //// xx 00 xx 00 UTF-16LE
55+ //// xx xx xx xx UTF-8
56+ ////
57+ //// - parameter header: The front Slice of data being read and evaluated.
58+ //// - returns: A tuple containing the detected Unicode encoding and the lenght of the byte order mark.
59+ static func detectEncoding(header: Slice<UnsafeBufferPointer<UInt8>>) -> ByteStreamPrefixInformation {
60+
61+ guard let prefix = prefixFromHeader(header) else {
62+ return (.UTF8, 0)
63+ }
64+
65+ if let prefixInfo = JSONEncodingDetector.encodingFromBOM(prefix) {
66+ return prefixInfo
67+ } else {
68+ switch prefix {
69+ case(0, 0, 0?, _):
70+ return (.UTF32BE, 0)
71+ case(_, 0, 0?, 0?):
72+ return (.UTF32LE, 0)
73+ case (0, _, 0?, _), (0, _, _, _):
74+ return (.UTF16BE, 0)
75+ case (_, 0, _, 0?), (_, 0, _, _):
76+ return (.UTF16LE, 0)
77+ default:
78+ return (.UTF8, 0)
79+ }
80+ }
81+ }
82+
83+ private typealias EncodingBytePrefix = (UInt8, UInt8, UInt8?, UInt8?)
84+
85+ private static func prefixFromHeader(header: Slice<UnsafeBufferPointer<UInt8>>) -> EncodingBytePrefix? {
86+ if header.count >= 4 {
87+ return(header[0], header[1], header[2], header[3])
88+ } else if header.count >= 2 {
89+ return (header[0], header[1], nil, nil)
90+ }
91+ return nil
92+ }
93+
94+ private static func encodingFromBOM(prefix: EncodingBytePrefix) -> ByteStreamPrefixInformation? {
95+ switch prefix {
96+ case(0xFE, 0xFF, _, _):
97+ return (.UTF16BE, 2)
98+ case(0x00, 0x00, 0xFE?, 0xFF?):
99+ return (.UTF32BE, 4)
100+ case(0xEF, 0xBB, 0xBF?, _):
101+ return (.UTF8, 3)
102+ case(0xFF, 0xFE, 0?, 0?):
103+ return (.UTF32LE, 4)
104+ case(0xFF, 0xFE, _, _):
105+ return (.UTF16LE, 2)
106+ default:
107+ return nil
108+ }
109+ }
110+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONLiteralConvertible.swiftnew file+130
@@ -0,0 +1,130 @@
1+//
2+// JSONLiteralConvertible.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 5/11/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+// MARK: - ArrayLiteralConvertible
10+
11+extension JSON: ArrayLiteralConvertible {
12+
13+ /// Create an instance by copying each element of the `collection` into a
14+ /// new `Array`.
15+ public init<Collection: CollectionType where Collection.Generator.Element == JSON>(_ collection: Collection) {
16+ self = .Array(Swift.Array(collection))
17+ }
18+
19+ /// Create an instance initialized with `elements`.
20+ public init(arrayLiteral elements: JSON...) {
21+ self.init(elements)
22+ }
23+
24+}
25+
26+// MARK: - DictionaryLiteralConvertible
27+
28+extension JSON: DictionaryLiteralConvertible {
29+
30+ /// Create an instance by copying each key/value pair of the `pairs` into
31+ /// a new `Dictionary`.
32+ public init<Dictionary: SequenceType where Dictionary.Generator.Element == (Swift.String, JSON)>(_ pairs: Dictionary) {
33+ var dictionary = Swift.Dictionary<Swift.String, JSON>(minimumCapacity: pairs.underestimateCount())
34+ for (key, value) in pairs {
35+ dictionary[key] = value
36+ }
37+ self = .Dictionary(dictionary)
38+ }
39+
40+ /// Create an instance initialized with `pairs`.
41+ public init(dictionaryLiteral pairs: (Swift.String, JSON)...) {
42+ self.init(pairs)
43+ }
44+
45+}
46+
47+// MARK: - FloatLiteralConvertible
48+
49+extension JSON: FloatLiteralConvertible {
50+
51+ /// Create an instance initialized to `Double` `value`.
52+ public init(_ value: Swift.Double) {
53+ self = .Double(value)
54+ }
55+
56+ /// Create a literal instance initialized to `value`.
57+ public init(floatLiteral value: Swift.Double) {
58+ self.init(value)
59+ }
60+
61+}
62+
63+// MARK: - IntegerLiteralConvertible
64+
65+extension JSON: IntegerLiteralConvertible {
66+
67+ /// Create an instance initialized to `Int` by `value`.
68+ public init(_ value: Swift.Int) {
69+ self = .Int(value)
70+ }
71+
72+ /// Create a literal instance initialized to `value`.
73+ public init(integerLiteral value: Swift.Int) {
74+ self.init(value)
75+ }
76+
77+}
78+
79+// MARK: - StringLiteralConvertible
80+
81+extension JSON: StringLiteralConvertible {
82+
83+ /// Create an instance initialized to `String` by `text`.
84+ public init(_ text: Swift.String) {
85+ self = .String(text)
86+ }
87+
88+ /// Create a literal instance initialized to `value`.
89+ public init(stringLiteral value: StringLiteralType) {
90+ self.init(value)
91+ }
92+
93+ /// Create a literal instance initialized to `value`.
94+ public init(extendedGraphemeClusterLiteral value: StringLiteralType) {
95+ self.init(value)
96+ }
97+
98+ /// Create a literal instance initialized to `value`.
99+ public init(unicodeScalarLiteral value: StringLiteralType) {
100+ self.init(value)
101+ }
102+
103+}
104+
105+// MARK: - BooleanLiteralConvertible
106+
107+extension JSON: BooleanLiteralConvertible {
108+
109+ /// Create an instance initialized to `Bool` by `value`.
110+ public init(_ value: Swift.Bool) {
111+ self = .Bool(value)
112+ }
113+
114+ /// Create a literal instance initialized to `value`.
115+ public init(booleanLiteral value: Swift.Bool) {
116+ self.init(value)
117+ }
118+
119+}
120+
121+// MARK: - NilLiteralConvertible
122+
123+extension JSON: NilLiteralConvertible {
124+
125+ /// Create an instance initialized with `nil`.
126+ public init(nilLiteral: ()) {
127+ self = .Null
128+ }
129+
130+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONParser.swiftnew file+903
@@ -0,0 +1,903 @@
1+//
2+// JSONParser.swift
3+// Freddy
4+//
5+// Created by John Gallagher on 4/18/15.
6+// Copyright © 2015 Big Nerd Ranch. Licensed under MIT.
7+//
8+
9+import Foundation
10+
11+private struct Literal {
12+ static let BACKSLASH = UInt8(ascii: "\\")
13+ static let BACKSPACE = UInt8(ascii: "\u{0008}")
14+ static let COLON = UInt8(ascii: ":")
15+ static let COMMA = UInt8(ascii: ",")
16+ static let DOUBLE_QUOTE = UInt8(ascii: "\"")
17+ static let FORMFEED = UInt8(ascii: "\u{000c}")
18+ static let LEFT_BRACE = UInt8(ascii: "{")
19+ static let LEFT_BRACKET = UInt8(ascii: "[")
20+ static let MINUS = UInt8(ascii: "-")
21+ static let NEWLINE = UInt8(ascii: "\n")
22+ static let PERIOD = UInt8(ascii: ".")
23+ static let PLUS = UInt8(ascii: "+")
24+ static let RETURN = UInt8(ascii: "\r")
25+ static let RIGHT_BRACE = UInt8(ascii: "}")
26+ static let RIGHT_BRACKET = UInt8(ascii: "]")
27+ static let SLASH = UInt8(ascii: "/")
28+ static let SPACE = UInt8(ascii: " ")
29+ static let TAB = UInt8(ascii: "\t")
30+
31+ static let a = UInt8(ascii: "a")
32+ static let b = UInt8(ascii: "b")
33+ static let c = UInt8(ascii: "c")
34+ static let d = UInt8(ascii: "d")
35+ static let e = UInt8(ascii: "e")
36+ static let f = UInt8(ascii: "f")
37+ static let l = UInt8(ascii: "l")
38+ static let n = UInt8(ascii: "n")
39+ static let r = UInt8(ascii: "r")
40+ static let s = UInt8(ascii: "s")
41+ static let t = UInt8(ascii: "t")
42+ static let u = UInt8(ascii: "u")
43+
44+ static let A = UInt8(ascii: "A")
45+ static let B = UInt8(ascii: "B")
46+ static let C = UInt8(ascii: "C")
47+ static let D = UInt8(ascii: "D")
48+ static let E = UInt8(ascii: "E")
49+ static let F = UInt8(ascii: "F")
50+
51+ static let zero = UInt8(ascii: "0")
52+ static let one = UInt8(ascii: "1")
53+ static let two = UInt8(ascii: "2")
54+ static let three = UInt8(ascii: "3")
55+ static let four = UInt8(ascii: "4")
56+ static let five = UInt8(ascii: "5")
57+ static let six = UInt8(ascii: "6")
58+ static let seven = UInt8(ascii: "7")
59+ static let eight = UInt8(ascii: "8")
60+ static let nine = UInt8(ascii: "9")
61+}
62+
63+private let ParserMaximumDepth = 512
64+
65+
66+/// A pure Swift JSON parser. This parser is much faster than the
67+/// `NSJSONSerialization`-based parser (due to the overhead of having to
68+/// dynamically cast the Objective-C objects to determine their type); however,
69+/// it is much newer and has restrictions that the `NSJSONSerialization` parser
70+/// does not. Two restrictions in particular are that it requires UTF-8 data as
71+/// input and it does not allow trailing commas in arrays or dictionaries.
72+public struct JSONParser {
73+
74+ private enum Sign: Int {
75+ case Positive = 1
76+ case Negative = -1
77+ }
78+
79+ private let input: UnsafeBufferPointer<UInt8>
80+ private let owner: Any?
81+ private var loc = 0
82+ private var depth = 0
83+
84+ private init<T>(buffer: UnsafeBufferPointer<UInt8>, owner: T) {
85+ self.input = buffer
86+ self.owner = owner
87+ }
88+
89+ /// Decode the root element of the `JSON` stream. This may be any fragment
90+ /// or a structural element, per RFC 7159.
91+ ///
92+ /// The beginning bytes are used to determine the stream's encoding.
93+ /// `JSONParser` currently only supports UTF-8 encoding, with or without
94+ /// a byte-order mark.
95+ ///
96+ /// - throws: `JSONParser.Error` for any decoding failures, including a
97+ /// source location if needed.
98+ public mutating func parse() throws -> JSON {
99+ try guardAgainstUnsupportedEncodings()
100+ let value = try parseValue()
101+ skipWhitespace()
102+ guard loc == input.count else {
103+ throw Error.EndOfStreamGarbage(offset: loc)
104+ }
105+ return value
106+ }
107+
108+ private mutating func parseValue() throws -> JSON {
109+ guard depth <= ParserMaximumDepth else {
110+ throw Error.ExceededNestingLimit(offset: loc)
111+ }
112+
113+ guard input.count > 0 else {
114+ throw Error.EndOfStreamUnexpected
115+ }
116+
117+ advancing: while loc < input.count {
118+ do {
119+ switch input[loc] {
120+ case Literal.LEFT_BRACKET:
121+ depth += 1
122+ defer { depth -= 1 }
123+ return try decodeArray()
124+
125+ case Literal.LEFT_BRACE:
126+ depth += 1
127+ defer { depth -= 1 }
128+ return try decodeObject()
129+
130+ case Literal.DOUBLE_QUOTE:
131+ return try decodeString()
132+
133+ case Literal.f:
134+ return try decodeFalse()
135+
136+ case Literal.n:
137+ return try decodeNull()
138+
139+ case Literal.t:
140+ return try decodeTrue()
141+
142+ case Literal.MINUS:
143+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .LeadingMinus))
144+
145+ case Literal.zero:
146+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .LeadingZero))
147+
148+ case Literal.one...Literal.nine:
149+ return try decodeIntegralValue(NumberParser(loc: loc, input: input, state: .PreDecimalDigits))
150+
151+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
152+ loc = loc.successor()
153+
154+ default:
155+ break advancing
156+ }
157+ } catch let InternalError.NumberOverflow(offset: start) {
158+ return try decodeNumberAsString(start)
159+ }
160+ }
161+
162+ throw Error.ValueInvalid(offset: loc, character: UnicodeScalar(input[loc]))
163+ }
164+
165+ private mutating func skipWhitespace() {
166+ while loc < input.count {
167+ switch input[loc] {
168+ case Literal.SPACE, Literal.TAB, Literal.RETURN, Literal.NEWLINE:
169+ loc = loc.successor()
170+
171+ default:
172+ return
173+ }
174+ }
175+ }
176+
177+ private mutating func guardAgainstUnsupportedEncodings() throws {
178+ let header = input.prefix(4)
179+ let encodingPrefixInformation = JSONEncodingDetector.detectEncoding(header)
180+ guard JSONEncodingDetector.supportedEncodings.contains(encodingPrefixInformation.encoding) else {
181+ throw Error.InvalidUnicodeStreamEncoding(detectedEncoding: encodingPrefixInformation.encoding)
182+ }
183+ loc = loc.advancedBy(encodingPrefixInformation.byteOrderMarkLength)
184+ }
185+
186+ private mutating func decodeNull() throws -> JSON {
187+ guard loc.advancedBy(3, limit: input.count) != input.count else {
188+ throw Error.LiteralNilMisspelled(offset: loc)
189+ }
190+
191+ if input[loc+1] != Literal.u
192+ || input[loc+2] != Literal.l
193+ || input[loc+3] != Literal.l {
194+ throw Error.LiteralNilMisspelled(offset: loc)
195+ }
196+
197+ loc += 4
198+ return .Null
199+ }
200+
201+ private mutating func decodeTrue() throws -> JSON {
202+ guard loc.advancedBy(3, limit: input.count) != input.count else {
203+ throw Error.LiteralTrueMisspelled(offset: loc)
204+ }
205+
206+ if input[loc+1] != Literal.r
207+ || input[loc+2] != Literal.u
208+ || input[loc+3] != Literal.e {
209+ throw Error.LiteralTrueMisspelled(offset: loc)
210+ }
211+
212+ loc += 4
213+ return .Bool(true)
214+ }
215+
216+ private mutating func decodeFalse() throws -> JSON {
217+ guard loc.advancedBy(4, limit: input.count) != input.count else {
218+ throw Error.LiteralFalseMisspelled(offset: loc)
219+ }
220+
221+ if input[loc+1] != Literal.a
222+ || input[loc+2] != Literal.l
223+ || input[loc+3] != Literal.s
224+ || input[loc+4] != Literal.e {
225+ throw Error.LiteralFalseMisspelled(offset: loc)
226+ }
227+
228+ loc += 5
229+ return .Bool(false)
230+ }
231+
232+ private var stringDecodingBuffer = [UInt8]()
233+ private mutating func decodeString() throws -> JSON {
234+ let start = loc
235+ loc = loc.successor()
236+ stringDecodingBuffer.removeAll(keepCapacity: true)
237+ while loc < input.count {
238+ switch input[loc] {
239+ case Literal.BACKSLASH:
240+ loc = loc.successor()
241+ switch input[loc] {
242+ case Literal.DOUBLE_QUOTE: stringDecodingBuffer.append(Literal.DOUBLE_QUOTE)
243+ case Literal.BACKSLASH: stringDecodingBuffer.append(Literal.BACKSLASH)
244+ case Literal.SLASH: stringDecodingBuffer.append(Literal.SLASH)
245+ case Literal.b: stringDecodingBuffer.append(Literal.BACKSPACE)
246+ case Literal.f: stringDecodingBuffer.append(Literal.FORMFEED)
247+ case Literal.r: stringDecodingBuffer.append(Literal.RETURN)
248+ case Literal.t: stringDecodingBuffer.append(Literal.TAB)
249+ case Literal.n: stringDecodingBuffer.append(Literal.NEWLINE)
250+ case Literal.u:
251+ loc = loc.successor()
252+ try readUnicodeEscape(start: loc - 2)
253+
254+ // readUnicodeEscape() advances loc on its own, so we'll `continue` now
255+ // to skip the typical "advance past this character" for all the other escapes
256+ continue
257+
258+ default:
259+ throw Error.ControlCharacterUnrecognized(offset: loc)
260+ }
261+ loc = loc.successor()
262+
263+ case Literal.DOUBLE_QUOTE:
264+ loc = loc.successor()
265+ stringDecodingBuffer.append(0)
266+
267+ guard let string = (stringDecodingBuffer.withUnsafeBufferPointer {
268+ String.fromCString(UnsafePointer($0.baseAddress))
269+ }) else {
270+ throw Error.UnicodeEscapeInvalid(offset: start)
271+ }
272+
273+ return .String(string)
274+
275+ case let other:
276+ stringDecodingBuffer.append(other)
277+ loc = loc.successor()
278+ }
279+ }
280+
281+ throw Error.EndOfStreamUnexpected
282+ }
283+
284+ private mutating func readCodeUnit() -> UInt16? {
285+ guard loc + 4 <= input.count else {
286+ return nil
287+ }
288+ var codeUnit: UInt16 = 0
289+ for c in input[loc..<loc+4] {
290+ let nibble: UInt16
291+
292+ switch c {
293+ case Literal.zero...Literal.nine:
294+ nibble = UInt16(c - Literal.zero)
295+
296+ case Literal.a...Literal.f:
297+ nibble = 10 + UInt16(c - Literal.a)
298+
299+ case Literal.A...Literal.F:
300+ nibble = 10 + UInt16(c - Literal.A)
301+
302+ default:
303+ return nil
304+ }
305+ codeUnit = (codeUnit << 4) | nibble
306+ }
307+ loc += 4
308+ return codeUnit
309+ }
310+
311+ private mutating func readUnicodeEscape(start start: Int) throws {
312+ guard let codeUnit = readCodeUnit() else {
313+ throw Error.UnicodeEscapeInvalid(offset: start)
314+ }
315+
316+ let codeUnits: [UInt16]
317+
318+ if UTF16.isLeadSurrogate(codeUnit) {
319+ // First half of a UTF16 surrogate pair - we must parse another code unit and combine them
320+
321+ // First confirm and skip over that we have another "\u"
322+ guard loc + 6 <= input.count && input[loc] == Literal.BACKSLASH && input[loc+1] == Literal.u else {
323+ throw Error.UnicodeEscapeInvalid(offset: start)
324+ }
325+ loc += 2
326+
327+ // Ensure the second code unit is valid for the surrogate pair
328+ guard let secondCodeUnit = readCodeUnit() where UTF16.isTrailSurrogate(secondCodeUnit) else {
329+ throw Error.UnicodeEscapeInvalid(offset: start)
330+ }
331+
332+ codeUnits = [codeUnit, secondCodeUnit]
333+ } else {
334+ codeUnits = [codeUnit]
335+ }
336+
337+ let transcodeHadError = transcode(UTF16.self, UTF8.self, codeUnits.generate(), { self.stringDecodingBuffer.append($0) }, stopOnError: true)
338+
339+ if transcodeHadError {
340+ throw Error.UnicodeEscapeInvalid(offset: start)
341+ }
342+ }
343+
344+ private mutating func decodeArray() throws -> JSON {
345+ let start = loc
346+ loc = loc.successor()
347+ var items = [JSON]()
348+
349+ while loc < input.count {
350+ skipWhitespace()
351+
352+ if loc < input.count && input[loc] == Literal.RIGHT_BRACKET {
353+ loc = loc.successor()
354+ return .Array(items)
355+ }
356+
357+ if !items.isEmpty {
358+ guard loc < input.count && input[loc] == Literal.COMMA else {
359+ throw Error.CollectionMissingSeparator(offset: start)
360+ }
361+ loc = loc.successor()
362+ }
363+
364+ items.append(try parseValue())
365+ }
366+
367+ throw Error.EndOfStreamUnexpected
368+ }
369+
370+ // Decoding objects can be recursive, so we have to keep more than one
371+ // buffer around for building up key/value pairs (to reduce allocations
372+ // when parsing large JSON documents).
373+ //
374+ // Rough estimate of the difference between this and using a fresh
375+ // [(String,JSON)] for the `pairs` variable in decodeObject() below is
376+ // about 12% on an iPhone 5.
377+ private struct DecodeObjectBuffers {
378+ var buffers = [[(String,JSON)]]()
379+
380+ mutating func getBuffer() -> [(String,JSON)] {
381+ if !buffers.isEmpty {
382+ var buffer = buffers.removeLast()
383+ buffer.removeAll(keepCapacity: true)
384+ return buffer
385+ }
386+ return [(String,JSON)]()
387+ }
388+
389+ mutating func putBuffer(buffer: [(String,JSON)]) {
390+ buffers.append(buffer)
391+ }
392+ }
393+
394+ private var decodeObjectBuffers = DecodeObjectBuffers()
395+
396+ private mutating func decodeObject() throws -> JSON {
397+ let start = loc
398+ loc = loc.successor()
399+ var pairs = decodeObjectBuffers.getBuffer()
400+
401+ while loc < input.count {
402+ skipWhitespace()
403+
404+ if loc < input.count && input[loc] == Literal.RIGHT_BRACE {
405+ loc = loc.successor()
406+ var obj = [String:JSON](minimumCapacity: pairs.count)
407+ for (k, v) in pairs {
408+ obj[k] = v
409+ }
410+ decodeObjectBuffers.putBuffer(pairs)
411+ return .Dictionary(obj)
412+ }
413+
414+ if !pairs.isEmpty {
415+ guard loc < input.count && input[loc] == Literal.COMMA else {
416+ throw Error.CollectionMissingSeparator(offset: start)
417+ }
418+ loc = loc.successor()
419+
420+ skipWhitespace()
421+ }
422+
423+ guard loc < input.count && input[loc] == Literal.DOUBLE_QUOTE else {
424+ throw Error.DictionaryMissingKey(offset: start)
425+ }
426+
427+ let key = try decodeString().string()
428+ skipWhitespace()
429+
430+ guard loc < input.count && input[loc] == Literal.COLON else {
431+ throw Error.CollectionMissingSeparator(offset: start)
432+ }
433+ loc = loc.successor()
434+
435+ pairs.append((key, try parseValue()))
436+ }
437+
438+ throw Error.EndOfStreamUnexpected
439+ }
440+
441+ private mutating func decodeIntegralValue(parser: NumberParser) throws -> JSON {
442+ var sign = Sign.Positive
443+ var parser = parser
444+ var value = 0
445+
446+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
447+ // but that causes compile time explosion in Swift 2.2. :-|
448+ while parser.state != .Done {
449+ switch parser.state {
450+ case .LeadingMinus:
451+ sign = .Negative
452+ try parser.parseNegative()
453+
454+ case .LeadingZero:
455+ parser.parseLeadingZero()
456+
457+ case .PreDecimalDigits:
458+ try parser.parsePreDecimalDigits { c in
459+ guard case let (exponent, false) = Int.multiplyWithOverflow(10, value) else {
460+ throw InternalError.NumberOverflow(offset: parser.start)
461+ }
462+
463+ guard case let (newValue, false) = Int.addWithOverflow(exponent, Int(c - Literal.zero)) else {
464+ throw InternalError.NumberOverflow(offset: parser.start)
465+ }
466+
467+ value = newValue
468+ }
469+
470+ case .Decimal, .Exponent:
471+ return try detectingFloatingPointErrors(parser.start) {
472+ try decodeFloatingPointValue(parser, sign: sign, value: Double(value))
473+ }
474+
475+ case .PostDecimalDigits, .ExponentSign, .ExponentDigits:
476+ assertionFailure("Invalid internal state while parsing number")
477+
478+ case .Done:
479+ fatalError("impossible condition")
480+ }
481+ }
482+
483+ guard case let (signedValue, false) = Int.multiplyWithOverflow(sign.rawValue, value) else {
484+ throw InternalError.NumberOverflow(offset: parser.start)
485+ }
486+
487+ loc = parser.loc
488+ return .Int(signedValue)
489+ }
490+
491+ private mutating func decodeFloatingPointValue(parser: NumberParser, sign: Sign, value: Double) throws -> JSON {
492+ var parser = parser
493+ var value = value
494+ var exponentSign = Sign.Positive
495+ var exponent = Double(0)
496+ var position = 0.1
497+
498+ // This would be more natural as `while true { ... }` with a meaningful .Done case,
499+ // but that causes compile time explosion in Swift 2.2. :-|
500+ while parser.state != .Done {
501+ switch parser.state {
502+ case .LeadingMinus, .LeadingZero, .PreDecimalDigits:
503+ assertionFailure("Invalid internal state while parsing number")
504+
505+ case .Decimal:
506+ try parser.parseDecimal()
507+
508+ case .PostDecimalDigits:
509+ parser.parsePostDecimalDigits { c in
510+ value += position * Double(c - Literal.zero)
511+ position /= 10
512+ }
513+
514+ case .Exponent:
515+ exponentSign = try parser.parseExponent()
516+
517+ case .ExponentSign:
518+ try parser.parseExponentSign()
519+
520+ case .ExponentDigits:
521+ parser.parseExponentDigits { c in
522+ exponent = exponent * 10 + Double(c - Literal.zero)
523+ }
524+
525+ case .Done:
526+ fatalError("impossible condition")
527+ }
528+ }
529+
530+ loc = parser.loc
531+ return .Double(Double(sign.rawValue) * value * pow(10, Double(exponentSign.rawValue) * exponent))
532+ }
533+
534+ private mutating func decodeNumberAsString(start: Int) throws -> JSON {
535+ var parser: NumberParser = {
536+ let state: NumberParser.State
537+ switch input[start] {
538+ case Literal.MINUS: state = .LeadingMinus
539+ case Literal.zero: state = .LeadingZero
540+ case Literal.one...Literal.nine: state = .PreDecimalDigits
541+ default:
542+ fatalError("Internal error: decodeNumber called on not-a-number")
543+ }
544+ return NumberParser(loc: start, input: input, state: state)
545+ }()
546+
547+ stringDecodingBuffer.removeAll(keepCapacity: true)
548+
549+ while true {
550+ switch parser.state {
551+ case .LeadingMinus:
552+ try parser.parseNegative()
553+ stringDecodingBuffer.append(Literal.MINUS)
554+
555+ case .LeadingZero:
556+ parser.parseLeadingZero()
557+ stringDecodingBuffer.append(Literal.zero)
558+
559+ case .PreDecimalDigits:
560+ parser.parsePreDecimalDigits { stringDecodingBuffer.append($0) }
561+
562+ case .Decimal:
563+ try parser.parseDecimal()
564+ stringDecodingBuffer.append(Literal.PERIOD)
565+
566+ case .PostDecimalDigits:
567+ parser.parsePostDecimalDigits { stringDecodingBuffer.append($0) }
568+
569+ case .Exponent:
570+ stringDecodingBuffer.append(input[parser.loc])
571+ _ = try parser.parseExponent()
572+
573+ case .ExponentSign:
574+ stringDecodingBuffer.append(input[parser.loc])
575+ try parser.parseExponentSign()
576+
577+ case .ExponentDigits:
578+ parser.parseExponentDigits { stringDecodingBuffer.append($0) }
579+
580+ case .Done:
581+ stringDecodingBuffer.append(0)
582+ guard let string = (stringDecodingBuffer.withUnsafeBufferPointer {
583+ String.fromCString(UnsafePointer($0.baseAddress))
584+ }) else {
585+ // Should never fail - any problems with the number string should
586+ // result in thrown errors above
587+ fatalError("Internal error: Invalid numeric string")
588+ }
589+
590+ loc = parser.loc
591+ return .String(string)
592+ }
593+ }
594+ }
595+
596+ private func detectingFloatingPointErrors<T>(loc: Int, @noescape _ f: () throws -> T) throws -> T {
597+ let flags = FE_UNDERFLOW | FE_OVERFLOW
598+ feclearexcept(flags)
599+ let value = try f()
600+ guard fetestexcept(flags) == 0 else {
601+ throw InternalError.NumberOverflow(offset: loc)
602+ }
603+ return value
604+ }
605+}
606+
607+private struct NumberParser {
608+ enum State {
609+ case LeadingMinus
610+ case LeadingZero
611+ case PreDecimalDigits
612+ case Decimal
613+ case PostDecimalDigits
614+ case Exponent
615+ case ExponentSign
616+ case ExponentDigits
617+ case Done
618+ }
619+
620+ let start: Int
621+ var loc = 0
622+ var state: State
623+ let input: UnsafeBufferPointer<UInt8>
624+
625+ init(loc: Int, input: UnsafeBufferPointer<UInt8>, state: State) {
626+ assert(loc < input.count, "Invalid input to NumberParser")
627+ self.start = loc
628+ self.loc = loc
629+ self.input = input
630+ self.state = state
631+ }
632+
633+ mutating func parseNegative() throws {
634+ assert(state == .LeadingMinus, "Unexpected state entering parseNegative")
635+
636+ loc = loc.successor()
637+ guard loc < input.count else {
638+ throw JSONParser.Error.EndOfStreamUnexpected
639+ }
640+
641+ switch input[loc] {
642+ case Literal.zero:
643+ state = .LeadingZero
644+
645+ case Literal.one...Literal.nine:
646+ state = .PreDecimalDigits
647+
648+ default:
649+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
650+ }
651+ }
652+
653+ mutating func parseLeadingZero() {
654+ assert(state == .LeadingZero, "Unexpected state entering parseLeadingZero")
655+
656+ loc = loc.successor()
657+ guard loc < input.count else {
658+ state = .Done
659+ return
660+ }
661+
662+ guard input[loc] == Literal.PERIOD else {
663+ state = .Done
664+ return
665+ }
666+
667+ state = .Decimal
668+ }
669+
670+ mutating func parsePreDecimalDigits(@noescape f: (UInt8) throws -> Void) rethrows {
671+ assert(state == .PreDecimalDigits, "Unexpected state entering parsePreDecimalDigits")
672+ advancing: while loc < input.count {
673+ let c = input[loc]
674+ switch c {
675+ case Literal.zero...Literal.nine:
676+ try f(c)
677+ loc = loc.successor()
678+
679+ case Literal.PERIOD:
680+ state = .Decimal
681+ return
682+
683+ case Literal.e, Literal.E:
684+ state = .Exponent
685+ return
686+
687+ default:
688+ break advancing
689+ }
690+ }
691+
692+ state = .Done
693+ }
694+
695+ mutating func parseDecimal() throws {
696+ assert(state == .Decimal, "Unexpected state entering parseDecimal")
697+ loc = loc.successor()
698+ guard loc < input.count else {
699+ throw JSONParser.Error.EndOfStreamUnexpected
700+ }
701+
702+ switch input[loc] {
703+ case Literal.zero...Literal.nine:
704+ state = .PostDecimalDigits
705+
706+ default:
707+ throw JSONParser.Error.NumberMissingFractionalDigits(offset: start)
708+ }
709+ }
710+
711+ mutating func parsePostDecimalDigits(@noescape f: (UInt8) throws -> Void) rethrows {
712+ assert(state == .PostDecimalDigits, "Unexpected state entering parsePostDecimalDigits")
713+
714+ advancing: while loc < input.count {
715+ let c = input[loc]
716+ switch c {
717+ case Literal.zero...Literal.nine:
718+ try f(c)
719+ loc = loc.successor()
720+
721+ case Literal.e, Literal.E:
722+ state = .Exponent
723+ return
724+
725+ default:
726+ break advancing
727+ }
728+ }
729+
730+ state = .Done
731+ }
732+
733+ mutating func parseExponent() throws -> JSONParser.Sign {
734+ assert(state == .Exponent, "Unexpected state entering parseExponent")
735+
736+ loc = loc.successor()
737+ guard loc < input.count else {
738+ throw JSONParser.Error.EndOfStreamUnexpected
739+ }
740+
741+ switch input[loc] {
742+ case Literal.zero...Literal.nine:
743+ state = .ExponentDigits
744+
745+ case Literal.PLUS:
746+ state = .ExponentSign
747+
748+ case Literal.MINUS:
749+ state = .ExponentSign
750+ return .Negative
751+
752+ default:
753+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
754+ }
755+
756+ return .Positive
757+ }
758+
759+ mutating func parseExponentSign() throws {
760+ assert(state == .ExponentSign, "Unexpected state entering parseExponentSign")
761+ loc = loc.successor()
762+ guard loc < input.count else {
763+ throw JSONParser.Error.EndOfStreamUnexpected
764+ }
765+
766+ switch input[loc] {
767+ case Literal.zero...Literal.nine:
768+ state = .ExponentDigits
769+
770+ default:
771+ throw JSONParser.Error.NumberSymbolMissingDigits(offset: start)
772+ }
773+ }
774+
775+ mutating func parseExponentDigits(@noescape f: (UInt8) throws -> Void) rethrows {
776+ assert(state == .ExponentDigits, "Unexpected state entering parseExponentDigits")
777+ advancing: while loc < input.count {
778+ let c = input[loc]
779+ switch c {
780+ case Literal.zero...Literal.nine:
781+ try f(c)
782+ loc = loc.successor()
783+
784+ default:
785+ break advancing
786+ }
787+ }
788+
789+ state = .Done
790+ }
791+}
792+
793+public extension JSONParser {
794+
795+ /// Creates a `JSONParser` ready to parse UTF-8 encoded `NSData`.
796+ ///
797+ /// If the data is mutable, it is copied before parsing. The data's lifetime
798+ /// is extended for the duration of parsing.
799+ init(utf8Data inData: NSData) {
800+ let data = inData.copy() as! NSData
801+ let buffer = UnsafeBufferPointer(start: UnsafePointer<UInt8>(data.bytes), count: data.length)
802+ self.init(buffer: buffer, owner: data)
803+ }
804+
805+ /// Creates a `JSONParser` from the code units represented by the `string`.
806+ ///
807+ /// The synthesized string is lifetime-extended for the duration of parsing.
808+ init(string: String) {
809+ let codePoints = string.nulTerminatedUTF8
810+ let buffer = codePoints.withUnsafeBufferPointer { nulTerminatedBuffer in
811+ // don't want to include the nul termination in the buffer - trim it off
812+ UnsafeBufferPointer(start: nulTerminatedBuffer.baseAddress, count: nulTerminatedBuffer.count - 1)
813+ }
814+ self.init(buffer: buffer, owner: codePoints)
815+ }
816+
817+}
818+
819+extension JSONParser: JSONParserType {
820+
821+ /// Creates an instance of `JSON` from UTF-8 encoded `NSData`.
822+ /// - parameter data: An instance of `NSData` to parse `JSON` from.
823+ /// - throws: Any `JSONParser.Error` that arises during decoding.
824+ /// - seealso: JSONParser.parse()
825+ public static func createJSONFromData(data: NSData) throws -> JSON {
826+ var parser = JSONParser(utf8Data: data)
827+ return try parser.parse()
828+ }
829+
830+}
831+
832+// MARK: - Errors
833+
834+extension JSONParser {
835+
836+ /// Enumeration describing possible errors that occur while parsing a JSON
837+ /// document. Most errors include an associated `offset`, representing the
838+ /// offset into the UTF-8 characters making up the document where the error
839+ /// occurred.
840+ public enum Error: ErrorType {
841+ /// The parser ran out of data prematurely. This usually means a value
842+ /// was not escaped, such as a string literal not ending with a double
843+ /// quote.
844+ case EndOfStreamUnexpected
845+
846+ /// Unexpected non-whitespace data was left around `offset` after
847+ /// parsing all valid JSON.
848+ case EndOfStreamGarbage(offset: Int)
849+
850+ /// Too many nested objects or arrays occured at the literal started
851+ /// around `offset`.
852+ case ExceededNestingLimit(offset: Int)
853+
854+ /// A `character` was not a valid start of a value around `offset`.
855+ case ValueInvalid(offset: Int, character: UnicodeScalar)
856+
857+ /// Badly-formed Unicode escape sequence at `offset`. A Unicode escape
858+ /// uses the text "\u" followed by 4 hex digits, such as "\uF09F\uA684"
859+ /// to represent U+1F984, "UNICORN FACE".
860+ case UnicodeEscapeInvalid(offset: Int)
861+
862+ /// Badly-formed control character around `offset`. JSON supports
863+ /// backslash-escaped double quotes, slashes, whitespace control codes,
864+ /// and Unicode escape sequences.
865+ case ControlCharacterUnrecognized(offset: Int)
866+
867+ /// Invalid token, expected `null` around `offset`
868+ case LiteralNilMisspelled(offset: Int)
869+
870+ /// Invalid token, expected `true` around `offset`
871+ case LiteralTrueMisspelled(offset: Int)
872+
873+ /// Invalid token, expected `false` around `offset`
874+ case LiteralFalseMisspelled(offset: Int)
875+
876+ /// Badly-formed collection at given `offset`, expected `,` or `:`
877+ case CollectionMissingSeparator(offset: Int)
878+
879+ /// While parsing an object literal, a value was found without a key
880+ /// around `offset`. The start of a string literal was expected.
881+ case DictionaryMissingKey(offset: Int)
882+
883+ /// Badly-formed number with no digits around `offset`. After a decimal
884+ /// point, a number must include some number of digits.
885+ case NumberMissingFractionalDigits(offset: Int)
886+
887+ /// Badly-formed number with symbols ("-" or "e") but no following
888+ /// digits around `offset`.
889+ case NumberSymbolMissingDigits(offset: Int)
890+
891+ /// Supplied data is encoded in an unsupported format.
892+ case InvalidUnicodeStreamEncoding(detectedEncoding: JSONEncodingDetector.Encoding)
893+ }
894+
895+ private enum InternalError: ErrorType {
896+ /// Attempted to parse an integer outside the range of [Int.min, Int.max]
897+ /// or a double outside the range of representable doubles. Note that
898+ /// for doubles, this could be an overflow or an underflow - we don't
899+ /// get enough information from Swift here to know which it is. The number
900+ /// causing the overflow/underflow began at `offset`.
901+ case NumberOverflow(offset: Int)
902+ }
903+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONParsing.swiftnew file+126
@@ -0,0 +1,126 @@
1+//
2+// JSONParsing.swift
3+// Freddy
4+//
5+// Created by Matthew D. Mathias on 3/17/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+import Foundation
10+
11+// MARK: - Deserialize JSON
12+
13+/// Protocol describing a backend parser that can produce `JSON` from `NSData`.
14+public protocol JSONParserType {
15+
16+ /// Creates an instance of `JSON` from `NSData`.
17+ /// - parameter data: An instance of `NSData` to use to create `JSON`.
18+ /// - throws: An error that may arise from calling `JSONObjectWithData(_:options:)` on `NSJSONSerialization` with the given data.
19+ /// - returns: An instance of `JSON`.
20+ static func createJSONFromData(data: NSData) throws -> JSON
21+
22+}
23+
24+extension JSON {
25+
26+ /// Create `JSON` from UTF-8 `data`. By default, parses using the
27+ /// Swift-native `JSONParser` backend.
28+ public init(data: NSData, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
29+ self = try parser.createJSONFromData(data)
30+ }
31+
32+ /// Create `JSON` from UTF-8 `string`.
33+ public init(jsonString: Swift.String, usingParser parser: JSONParserType.Type = JSONParser.self) throws {
34+ self = try parser.createJSONFromData((jsonString as NSString).dataUsingEncoding(NSUTF8StringEncoding) ?? NSData())
35+ }
36+}
37+
38+// MARK: - NSJSONSerialization
39+
40+extension NSJSONSerialization: JSONParserType {
41+
42+ // MARK: Decode NSData
43+
44+ /// Use the built-in, Objective-C based JSON parser to create `JSON`.
45+ /// - parameter data: An instance of `NSData`.
46+ /// - returns: An instance of `JSON`.
47+ /// - throws: An error that may arise if the `NSData` cannot be parsed into an object.
48+ public static func createJSONFromData(data: NSData) throws -> JSON {
49+ return makeJSON(try NSJSONSerialization.JSONObjectWithData(data, options: []))
50+ }
51+
52+ // MARK: Make JSON
53+
54+ /// Makes a `JSON` object by matching its argument to a case in the `JSON` enum.
55+ /// - parameter object: The instance of `AnyObject` returned from serializing the JSON.
56+ /// - returns: An instance of `JSON` matching the JSON given to the function.
57+ private static func makeJSON(object: AnyObject) -> JSON {
58+ switch object {
59+ case let n as NSNumber:
60+ let numberType = CFNumberGetType(n)
61+ switch numberType {
62+ case .CharType:
63+ return .Bool(n.boolValue)
64+
65+ case .ShortType, .IntType, .LongType, .CFIndexType, .NSIntegerType, .SInt8Type, .SInt16Type, .SInt32Type:
66+ return .Int(n.integerValue)
67+
68+ case .SInt64Type, .LongLongType /* overflows 32-bit Int */:
69+ #if /* 32-bit arch */ arch(arm) || arch(i386)
70+ // Why double, when the Freddy parser would bump to String?
71+ //
72+ // Returning Double avoids making the type depend on whether you're running
73+ // 32-bit or 64-bit code when using the NSJSONSerialization parser.
74+ // NSJSONSerialization appears to bump numbers larger than Int.max to Double on
75+ // 64-bit platforms but use .SInt64Type on 32-bit platforms.
76+ // If we returned a String here, you'd get a String value on 32-bit,
77+ // but a Double value on 64-bit. Instead, we return Double.
78+ //
79+ // This means that, if you switch parsers,
80+ // you'll have to switch from .double to .string for pulling out
81+ // overflowing values, but if you stick with a single parser,
82+ // you at least won't have architecture-dependent lookups!
83+ return .Double(n.doubleValue)
84+ #else
85+ return .Int(n.integerValue)
86+ #endif
87+
88+ case .Float32Type, .Float64Type, .FloatType, .DoubleType, .CGFloatType:
89+ return .Double(n.doubleValue)
90+ }
91+
92+ case let arr as [AnyObject]:
93+ return makeJSONArray(arr)
94+
95+ case let dict as [Swift.String: AnyObject]:
96+ return makeJSONDictionary(dict)
97+
98+ case let s as Swift.String:
99+ return .String(s)
100+
101+ default:
102+ return .Null
103+ }
104+ }
105+
106+ // MARK: Make a JSON Array
107+
108+ /// Makes a `JSON` array from the object passed in.
109+ /// - parameter jsonArray: The array to transform into a `JSON`.
110+ /// - returns: An instance of `JSON` matching the array.
111+ private static func makeJSONArray(jsonArray: [AnyObject]) -> JSON {
112+ return .Array(jsonArray.map(makeJSON))
113+ }
114+
115+ // MARK: Make a JSON Dictionary
116+
117+ /// Makes a `JSON` dictionary from the Cocoa dictionary passed in.
118+ /// - parameter jsonDict: The dictionary to transform into `JSON`.
119+ /// - returns: An instance of `JSON` matching the dictionary.
120+ private static func makeJSONDictionary(jsonDict: [Swift.String: AnyObject]) -> JSON {
121+ return JSON(jsonDict.lazy.map { (key, value) in
122+ (key, makeJSON(value))
123+ })
124+ }
125+
126+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONSerializing.swiftnew file+43
@@ -0,0 +1,43 @@
1+// Copyright (C) 2016 Big Nerd Ranch, Inc. Licensed under the MIT license WITHOUT ANY WARRANTY.
2+
3+import Foundation
4+
5+// MARK: - Serialize JSON
6+
7+extension JSON {
8+
9+ /// Attempt to serialize `JSON` into an `NSData`.
10+ /// - returns: A byte-stream containing the `JSON` ready for wire transfer.
11+ /// - throws: Errors that arise from `NSJSONSerialization`.
12+ /// - see: Foundation.NSJSONSerialization
13+ public func serialize() throws -> NSData {
14+ let obj: AnyObject = toNSJSONSerializationObject()
15+ return try NSJSONSerialization.dataWithJSONObject(obj, options: [])
16+ }
17+
18+ /// A function to help with the serialization of `JSON`.
19+ /// - returns: An `AnyObject` suitable for `NSJSONSerialization`'s use.
20+ private func toNSJSONSerializationObject() -> AnyObject {
21+ switch self {
22+ case .Array(let jsonArray):
23+ return jsonArray.map { $0.toNSJSONSerializationObject() }
24+ case .Dictionary(let jsonDictionary):
25+ var cocoaDictionary = Swift.Dictionary<Swift.String, AnyObject>(minimumCapacity: jsonDictionary.count)
26+ for (key, json) in jsonDictionary {
27+ cocoaDictionary[key] = json.toNSJSONSerializationObject()
28+ }
29+ return cocoaDictionary
30+ case .String(let str):
31+ return str
32+ case .Double(let num):
33+ return num
34+ case .Int(let int):
35+ return int
36+ case .Bool(let b):
37+ return b
38+ case .Null:
39+ return NSNull()
40+ }
41+
42+ }
43+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/JSONSubscripting.swiftnew file+643
@@ -0,0 +1,643 @@
1+//
2+// JSONSubscripting.swift
3+// Freddy
4+//
5+// Created by Zachary Waldowski on 8/15/15.
6+// Copyright © 2015 Big Nerd Ranch. All rights reserved.
7+//
8+
9+// MARK: JSONPathType
10+
11+/// A protocol used to define a path within an instance of `JSON` that leads to some desired value.
12+///
13+/// A custom type, such as a `RawRepresentable` enum, may be made to conform to `JSONPathType`
14+/// and used with the subscript APIs.
15+public protocol JSONPathType {
16+ /// Use `self` to key into a `dictionary`.
17+ ///
18+ /// Unlike Swift dictionaries, failing to find a value for a key should throw
19+ /// an error rather than convert to `nil`.
20+ ///
21+ /// Upon failure, implementers should throw an error from `JSON.Error`.
22+ func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON
23+
24+ /// Use `self` to index into an `array`.
25+ ///
26+ /// Unlike Swift array, attempting to index outside the collection's bounds
27+ /// should throw an error rather than crash.
28+ ///
29+ /// Upon failure, implementers should throw an error from `JSON.Error`.
30+ func valueInArray(array: [JSON]) throws -> JSON
31+}
32+
33+extension JSONPathType {
34+
35+ /// The default behavior for keying into a dictionary is to throw
36+ /// `JSON.Error.UnexpectedSubscript`.
37+ public func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON {
38+ throw JSON.Error.UnexpectedSubscript(type: Self.self)
39+ }
40+
41+ /// The default behavior for indexing into an array is to throw
42+ /// `JSON.Error.UnexpectedSubscript`.
43+ public func valueInArray(array: [JSON]) throws -> JSON {
44+ throw JSON.Error.UnexpectedSubscript(type: Self.self)
45+ }
46+
47+}
48+
49+extension String: JSONPathType {
50+
51+ /// A method used to retrieve a value from a given dictionary for a specific key.
52+ /// - throws: `.KeyNotFound` with an associated value of `self`, where `self` is a `String`,
53+ /// should the key not be present within the `JSON`.
54+ /// - returns: The `JSON` value associated with the given key.
55+ public func valueInDictionary(dictionary: [Swift.String : JSON]) throws -> JSON {
56+ guard let next = dictionary[self] else {
57+ throw JSON.Error.KeyNotFound(key: self)
58+ }
59+ return next
60+ }
61+
62+}
63+
64+extension Int: JSONPathType {
65+
66+ /// A method used to retrieve a value from a given array for a specific index.
67+ /// - throws: `.IndexOutOfBounds` with an associated value of `self`, where `self` is an `Int`,
68+ /// should the index not be within the valid range for the array of `JSON`.
69+ /// - returns: The `JSON` value found at the given index.
70+ public func valueInArray(array: [JSON]) throws -> JSON {
71+ guard case array.indices = self else {
72+ throw JSON.Error.IndexOutOfBounds(index: self)
73+ }
74+ return array[self]
75+ }
76+
77+}
78+
79+// MARK: - Subscripting core
80+
81+private extension JSON {
82+
83+ enum SubscriptError: ErrorType {
84+ case SubscriptIntoNull(JSONPathType)
85+ }
86+
87+ func valueForPathFragment(fragment: JSONPathType, detectNull: Swift.Bool) throws -> JSON {
88+ switch self {
89+ case .Null where detectNull:
90+ throw SubscriptError.SubscriptIntoNull(fragment)
91+ case let .Dictionary(dict):
92+ return try fragment.valueInDictionary(dict)
93+ case let .Array(array):
94+ return try fragment.valueInArray(array)
95+ default:
96+ throw Error.UnexpectedSubscript(type: fragment.dynamicType)
97+ }
98+ }
99+
100+ func valueAtPath(path: [JSONPathType], detectNull: Swift.Bool = false) throws -> JSON {
101+ var result = self
102+ for fragment in path {
103+ result = try result.valueForPathFragment(fragment, detectNull: detectNull)
104+ }
105+ return result
106+ }
107+
108+}
109+
110+// MARK: - Subscripting operator
111+
112+extension JSON {
113+
114+ public subscript(key: Swift.String) -> JSON? {
115+ return try? valueForPathFragment(key, detectNull: false)
116+ }
117+
118+ public subscript(index: Swift.Int) -> JSON? {
119+ return try? valueForPathFragment(index, detectNull: false)
120+ }
121+
122+}
123+
124+// MARK: - Simple member unpacking
125+
126+extension JSON {
127+
128+ /// Attempts to decode into the returning type from a path into JSON.
129+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
130+ /// - parameter type: If the context this method is called from does not
131+ /// make the return type clear, pass a type implementing `JSONDecodable`
132+ /// to disambiguate the type to decode with.
133+ /// - returns: An initialized member from the inner JSON.
134+ /// - throws: One of the following errors contained in `JSON.Error`:
135+ /// * `KeyNotFound`: A given `String` key does not exist inside a
136+ /// descendant `JSON` dictionary.
137+ /// * `IndexOutOfBounds`: A given `Int` index is outside the bounds of a
138+ /// descendant `JSON` array.
139+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
140+ /// corresponding `JSON` value.
141+ /// * `TypeNotConvertible`: The target value's type inside of
142+ /// the `JSON` instance does not match `Decoded`.
143+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> Decoded {
144+ return try Decoded(json: valueAtPath(path))
145+ }
146+
147+ /// Retrieves a `Double` from a path into JSON.
148+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
149+ /// - returns: A floating-point `Double`
150+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
151+ /// - seealso: `JSON.decode(_:type:)`
152+ public func double(path: JSONPathType...) throws -> Swift.Double {
153+ return try Swift.Double(json: valueAtPath(path))
154+ }
155+
156+ /// Retrieves an `Int` from a path into JSON.
157+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
158+ /// - returns: A numeric `Int`
159+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
160+ /// - seealso: `JSON.decode(_:type:)`
161+ public func int(path: JSONPathType...) throws -> Swift.Int {
162+ return try Swift.Int(json: valueAtPath(path))
163+ }
164+
165+ /// Retrieves a `String` from a path into JSON.
166+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
167+ /// - returns: A textual `String`
168+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
169+ /// - seealso: `JSON.decode(_:type:)`
170+ public func string(path: JSONPathType...) throws -> Swift.String {
171+ return try Swift.String(json: valueAtPath(path))
172+ }
173+
174+ /// Retrieves a `Bool` from a path into JSON.
175+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
176+ /// - returns: A truthy `Bool`
177+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
178+ /// - seealso: `JSON.decode(_:type:)`
179+ public func bool(path: JSONPathType...) throws -> Swift.Bool {
180+ return try Swift.Bool(json: valueAtPath(path))
181+ }
182+
183+ /// Retrieves a `[JSON]` from a path into JSON.
184+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
185+ /// - returns: An `Array` of `JSON` elements
186+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
187+ /// - seealso: `JSON.decode(_:type:)`
188+ public func array(path: JSONPathType...) throws -> [JSON] {
189+ return try JSON.getArray(valueAtPath(path))
190+ }
191+
192+ /// Attempts to decodes many values from a desendant JSON array at a path
193+ /// into JSON.
194+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
195+ /// - parameter type: If the context this method is called from does not
196+ /// make the return type clear, pass a type implementing `JSONDecodable`
197+ /// to disambiguate the type to decode with.
198+ /// - returns: An `Array` of decoded elements
199+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`, or
200+ /// any error that arises from decoding the contained values.
201+ /// - seealso: `JSON.decode(_:type:)`
202+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., type: Decoded.Type = Decoded.self) throws -> [Decoded] {
203+ return try JSON.getArrayOf(valueAtPath(path))
204+ }
205+
206+ /// Retrieves a `[String: JSON]` from a path into JSON.
207+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
208+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
209+ /// - throws: One of the `JSON.Error` cases thrown by `decode(_:type:)`.
210+ /// - seealso: `JSON.decode(_:type:)`
211+ public func dictionary(path: JSONPathType...) throws -> [Swift.String: JSON] {
212+ return try JSON.getDictionary(valueAtPath(path))
213+ }
214+
215+}
216+
217+// MARK: - NotFound-Or-Null-to-Optional unpacking
218+
219+extension JSON {
220+
221+ /// An `OptionSetType` used to represent the different options available for subscripting `JSON` with `null` values or missing keys.
222+ /// * `.NullBecomesNil` - Treat `null` values as `nil`.
223+ /// * `.MissingKeyBecomesNil` - Treat missing keys as `nil`.
224+ public struct SubscriptingOptions: OptionSetType {
225+ public let rawValue: Swift.Int
226+ public init(rawValue: Swift.Int) {
227+ self.rawValue = rawValue
228+ }
229+
230+ /// Treat `null` values as `nil`.
231+ public static let NullBecomesNil = SubscriptingOptions(rawValue: 1 << 0)
232+ /// Treat missing keys as `nil`.
233+ public static let MissingKeyBecomesNil = SubscriptingOptions(rawValue: 1 << 1)
234+ }
235+
236+ private func mapOptionalAtPath<Value>(path: [JSONPathType], alongPath: SubscriptingOptions, @noescape transform: JSON throws -> Value) throws -> Value? {
237+ let detectNull = alongPath.contains(.NullBecomesNil)
238+ let detectNotFound = alongPath.contains(.MissingKeyBecomesNil)
239+ var json: JSON?
240+ do {
241+ json = try valueAtPath(path, detectNull: detectNull)
242+ return try json.map(transform)
243+ } catch Error.IndexOutOfBounds where detectNotFound {
244+ return nil
245+ } catch Error.KeyNotFound where detectNotFound {
246+ return nil
247+ } catch Error.ValueNotConvertible where detectNull && json == .Null {
248+ return nil
249+ } catch SubscriptError.SubscriptIntoNull where detectNull {
250+ return nil
251+ }
252+ }
253+}
254+
255+extension JSON {
256+
257+ /// Optionally decodes into the returning type from a path into JSON.
258+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
259+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
260+ /// - parameter type: If the context this method is called from does not
261+ /// make the return type clear, pass a type implementing `JSONDecodable`
262+ /// to disambiguate the type to decode with.
263+ /// - returns: A decoded value from the inner JSON if found, or `nil`.
264+ /// - throws: One of the following errors contained in `JSON.Error`:
265+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
266+ /// `JSON` dictionary.
267+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
268+ /// descendant `JSON` array.
269+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
270+ /// corresponding `JSON` value.
271+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
272+ /// instance does not match the decoded value.
273+ /// * Any error that arises from decoding the value.
274+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> Decoded? {
275+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
276+ }
277+
278+ /// Optionally retrieves a `Double` from a path into JSON.
279+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`.
280+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
281+ /// - returns: A `Double` if a value could be found, otherwise `nil`.
282+ /// - throws: One of the following errors contained in `JSON.Error`:
283+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
284+ /// `JSON` dictionary.
285+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
286+ /// descendant `JSON` array.
287+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
288+ /// corresponding `JSON` value.
289+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
290+ /// instance does not match the decoded value.
291+ public func double(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Double? {
292+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
293+ }
294+
295+ /// Optionally retrieves a `Int` from a path into JSON.
296+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
297+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
298+ /// - returns: A numeric `Int` if a value could be found, otherwise `nil`.
299+ /// - throws: One of the following errors contained in `JSON.Error`:
300+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
301+ /// `JSON` dictionary.
302+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
303+ /// descendant `JSON` array.
304+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
305+ /// corresponding `JSON` value.
306+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
307+ /// instance does not match the decoded value.
308+ public func int(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Int? {
309+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
310+ }
311+
312+ /// Optionally retrieves a `String` from a path into JSON.
313+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
314+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
315+ /// - returns: A text `String` if a value could be found, otherwise `nil`.
316+ /// - throws: One of the following errors contained in `JSON.Error`:
317+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
318+ /// `JSON` dictionary.
319+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
320+ /// descendant `JSON` array.
321+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
322+ /// corresponding `JSON` value.
323+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
324+ /// instance does not match the decoded value.
325+ public func string(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.String? {
326+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
327+ }
328+
329+ /// Optionally retrieves a `Bool` from a path into JSON.
330+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
331+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
332+ /// - returns: A truthy `Bool` if a value could be found, otherwise `nil`.
333+ /// - throws: One of the following errors contained in `JSON.Error`:
334+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
335+ /// `JSON` dictionary.
336+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
337+ /// descendant `JSON` array.
338+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
339+ /// corresponding `JSON` value.
340+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
341+ /// instance does not match the decoded value.
342+ public func bool(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> Swift.Bool? {
343+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
344+ }
345+
346+ /// Optionally retrieves a `[JSON]` from a path into the recieving structure.
347+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
348+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
349+ /// - returns: An `Array` of `JSON` elements if a value could be found,
350+ /// otherwise `nil`.
351+ /// - throws: One of the following errors contained in `JSON.Error`:
352+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
353+ /// `JSON` dictionary.
354+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
355+ /// descendant `JSON` array.
356+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
357+ /// corresponding `JSON` value.
358+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
359+ /// instance does not match the decoded value.
360+ public func array(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [JSON]? {
361+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
362+ }
363+
364+ /// Optionally decodes many values from a descendant array at a path into
365+ /// JSON.
366+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
367+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
368+ /// - returns: An `Array` of decoded elements if found, otherwise `nil`.
369+ /// - throws: One of the following errors contained in `JSON.Error`:
370+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
371+ /// `JSON` dictionary.
372+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
373+ /// descendant `JSON` array.
374+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
375+ /// corresponding `JSON` value.
376+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
377+ /// instance does not match the decoded value.
378+ /// * Any error that arises from decoding the value.
379+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., alongPath options: SubscriptingOptions, type: Decoded.Type = Decoded.self) throws -> [Decoded]? {
380+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
381+ }
382+
383+ /// Optionally retrieves a `[String: JSON]` from a path into the recieving
384+ /// structure.
385+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
386+ /// - parameter alongPath: Options that control what should be done with values that are `null` or keys that are missing.
387+ /// - returns: A `Dictionary` of `String` mapping to `JSON` elements if a
388+ /// value could be found, otherwise `nil`.
389+ /// - throws: One of the following errors contained in `JSON.Error`:
390+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
391+ /// `JSON` dictionary.
392+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
393+ /// descendant `JSON` array.
394+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
395+ /// corresponding `JSON` value.
396+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
397+ /// instance does not match the decoded value.
398+ public func dictionary(path: JSONPathType..., alongPath options: SubscriptingOptions) throws -> [Swift.String: JSON]? {
399+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
400+ }
401+
402+}
403+
404+// MARK: - Missing-with-fallback unpacking
405+
406+extension JSON {
407+
408+ private func mapOptionalAtPath<Value>(path: [JSONPathType], @noescape fallback: () -> Value, @noescape transform: JSON throws -> Value) throws -> Value {
409+ return try mapOptionalAtPath(path, alongPath: .MissingKeyBecomesNil, transform: transform) ?? fallback()
410+ }
411+
412+ /// Attempts to decode into the returning type from a path into
413+ /// JSON, or returns a fallback if not found.
414+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
415+ /// - parameter fallback: Value to use when one is missing at the subscript.
416+ /// - returns: An initialized member from the inner JSON.
417+ /// - throws: One of the following errors contained in `JSON.Error`:
418+ /// * `UnexpectedSubscript`: A given subscript cannot be used with the
419+ /// corresponding `JSON` value.
420+ /// * `TypeNotConvertible`: The target value's type inside of
421+ /// the `JSON` instance does not match `Decoded`.
422+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., @autoclosure or fallback: () -> Decoded) throws -> Decoded {
423+ return try mapOptionalAtPath(path, fallback: fallback, transform: Decoded.init)
424+ }
425+
426+ /// Retrieves a `Double` from a path into JSON or a fallback if not found.
427+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
428+ /// - parameter fallback: Array to use when one is missing at the subscript.
429+ /// - returns: A floating-point `Double`
430+ /// - throws: One of the `JSON.Error` cases thrown by calling `mapOptionalAtPath(_:fallback:transform:)`.
431+ /// - seealso: `optionalAtPath(_:ifNotFound)`.
432+ public func double(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Double) throws -> Swift.Double {
433+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Double.init)
434+ }
435+
436+ /// Retrieves an `Int` from a path into JSON or a fallback if not found.
437+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
438+ /// - parameter fallback: Array to use when one is missing at the subscript.
439+ /// - returns: A numeric `Int`
440+ /// - throws: One of the following errors contained in `JSON.Error`:
441+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
442+ /// `JSON` dictionary.
443+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
444+ /// descendant `JSON` array.
445+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
446+ /// corresponding `JSON` value.
447+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
448+ /// instance does not match the decoded value.
449+ public func int(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Int) throws -> Swift.Int {
450+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Int.init)
451+ }
452+
453+ /// Retrieves a `String` from a path into JSON or a fallback if not found.
454+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
455+ /// - parameter fallback: Array to use when one is missing at the subscript.
456+ /// - returns: A textual `String`
457+ /// - throws: One of the following errors contained in `JSON.Error`:
458+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
459+ /// `JSON` dictionary.
460+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
461+ /// descendant `JSON` array.
462+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
463+ /// corresponding `JSON` value.
464+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
465+ /// instance does not match the decoded value.
466+ public func string(path: JSONPathType..., @autoclosure or fallback: () -> Swift.String) throws -> Swift.String {
467+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.String.init)
468+ }
469+
470+ /// Retrieves a `Bool` from a path into JSON or a fallback if not found.
471+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
472+ /// - parameter fallback: Array to use when one is missing at the subscript.
473+ /// - returns: A truthy `Bool`
474+ /// - throws: One of the following errors contained in `JSON.Error`:
475+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
476+ /// `JSON` dictionary.
477+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
478+ /// descendant `JSON` array.
479+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
480+ /// corresponding `JSON` value.
481+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
482+ /// instance does not match the decoded value.
483+ public func bool(path: JSONPathType..., @autoclosure or fallback: () -> Swift.Bool) throws -> Swift.Bool {
484+ return try mapOptionalAtPath(path, fallback: fallback, transform: Swift.Bool.init)
485+ }
486+
487+ /// Retrieves a `[JSON]` from a path into JSON or a fallback if not found.
488+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
489+ /// - parameter fallback: Array to use when one is missing at the subscript.
490+ /// - returns: An `Array` of `JSON` elements
491+ /// - throws: One of the following errors contained in `JSON.Error`:
492+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
493+ /// `JSON` dictionary.
494+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
495+ /// descendant `JSON` array.
496+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
497+ /// corresponding `JSON` value.
498+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
499+ /// instance does not match the decoded value.
500+ public func array(path: JSONPathType..., @autoclosure or fallback: () -> [JSON]) throws -> [JSON] {
501+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getArray)
502+ }
503+
504+ /// Attempts to decodes many values from a desendant JSON array at a path
505+ /// into the recieving structure, returning a fallback if not found.
506+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
507+ /// - parameter fallback: Array to use when one is missing at the subscript.
508+ /// - returns: An `Array` of decoded elements
509+ /// - throws: One of the following errors contained in `JSON.Error`:
510+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
511+ /// `JSON` dictionary.
512+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
513+ /// descendant `JSON` array.
514+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
515+ /// corresponding `JSON` value.
516+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
517+ /// instance does not match the decoded value.
518+ /// * Any error that arises from decoding the value.
519+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., @autoclosure or fallback: () -> [Decoded]) throws -> [Decoded] {
520+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getArrayOf)
521+ }
522+
523+ /// Retrieves a `[String: JSON]` from a path into JSON or a fallback if not
524+ /// found.
525+ /// - parameter path: 0 or more `String` or `Int` that subscript the `JSON`
526+ /// - parameter fallback: Value to use when one is missing at the subscript
527+ /// - returns: An `Dictionary` of `String` mapping to `JSON` elements
528+ /// - throws: One of the following errors contained in `JSON.Error`:
529+ /// * `KeyNotFound`: A key `path` does not exist inside a descendant
530+ /// `JSON` dictionary.
531+ /// * `IndexOutOfBounds`: An index `path` is outside the bounds of a
532+ /// descendant `JSON` array.
533+ /// * `UnexpectedSubscript`: A `path` item cannot be used with the
534+ /// corresponding `JSON` value.
535+ /// * `TypeNotConvertible`: The target value's type inside of the `JSON`
536+ /// instance does not match the decoded value.
537+ public func dictionary(path: JSONPathType..., @autoclosure or fallback: () -> [Swift.String: JSON]) throws -> [Swift.String: JSON] {
538+ return try mapOptionalAtPath(path, fallback: fallback, transform: JSON.getDictionary)
539+ }
540+
541+}
542+
543+// MARK: - Deprecated methods
544+
545+extension JSON {
546+
547+ @available(*, deprecated, message="Use 'decode(_:alongPath:type:)' with options '[.MissingKeyBecomesNil]'")
548+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., ifNotFound: Swift.Bool, type: Decoded.Type = Decoded.self) throws -> Decoded? {
549+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
550+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
551+ }
552+
553+ @available(*, deprecated, message="Use 'decode(_:alongPath:type:)' with options '[.NullBecomesNil]'")
554+ public func decode<Decoded: JSONDecodable>(path: JSONPathType..., ifNull: Swift.Bool, type: Decoded.Type = Decoded.self) throws -> Decoded? {
555+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
556+ return try mapOptionalAtPath(path, alongPath: options, transform: Decoded.init)
557+ }
558+
559+ @available(*, deprecated, message="Use 'double(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
560+ public func double(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Double? {
561+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
562+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
563+ }
564+
565+ @available(*, deprecated, message="Use 'double(_:alongPath:)' with options '[.NullBecomesNil]'")
566+ public func double(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Double? {
567+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
568+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Double.init)
569+ }
570+
571+ @available(*, deprecated, message="Use 'int(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
572+ public func int(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Int? {
573+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
574+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
575+ }
576+
577+ @available(*, deprecated, message="Use 'int(_:alongPath:)' with options '[.NullBecomesNil]'")
578+ public func int(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Int? {
579+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
580+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Int.init)
581+ }
582+
583+ @available(*, deprecated, message="Use 'string(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
584+ public func string(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.String? {
585+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
586+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
587+ }
588+
589+ @available(*, deprecated, message="Use 'string(_:alongPath:)' with options '[.NullBecomesNil]'")
590+ public func string(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.String? {
591+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
592+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.String.init)
593+ }
594+
595+ @available(*, deprecated, message="Use 'bool(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
596+ public func bool(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> Swift.Bool? {
597+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
598+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
599+ }
600+
601+ @available(*, deprecated, message="Use 'bool(_:alongPath:)' with options '[.NullBecomesNil]'")
602+ public func bool(path: JSONPathType..., ifNull: Swift.Bool) throws -> Swift.Bool? {
603+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
604+ return try mapOptionalAtPath(path, alongPath: options, transform: Swift.Bool.init)
605+ }
606+
607+ @available(*, deprecated, message="Use 'array(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
608+ public func array(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [JSON]? {
609+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
610+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
611+ }
612+
613+ @available(*, deprecated, message="Use 'array(_:alongPath:)' with options '[.NullBecomesNil]'")
614+ public func array(path: JSONPathType..., ifNull: Swift.Bool) throws -> [JSON]? {
615+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
616+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArray)
617+ }
618+
619+ @available(*, deprecated, message="Use 'arrayOf(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
620+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [Decoded]? {
621+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
622+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
623+ }
624+
625+ @available(*, deprecated, message="Use 'arrayOf(_:alongPath:)' with options '[.NullBecomesNil]'")
626+ public func arrayOf<Decoded: JSONDecodable>(path: JSONPathType..., ifNull: Swift.Bool) throws -> [Decoded]? {
627+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
628+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getArrayOf)
629+ }
630+
631+ @available(*, deprecated, message="Use 'dictionary(_:alongPath:)' with options '[.MissingKeyBecomesNil]'")
632+ public func dictionary(path: JSONPathType..., ifNotFound: Swift.Bool) throws -> [Swift.String: JSON]? {
633+ let options: SubscriptingOptions = ifNotFound ? [.MissingKeyBecomesNil] : []
634+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
635+ }
636+
637+ @available(*, deprecated, message="Use 'dictionary(_:alongPath:)' with options '[.NullBecomesNil]'")
638+ public func dictionary(path: JSONPathType..., ifNull: Swift.Bool) throws -> [Swift.String: JSON]? {
639+ let options: SubscriptingOptions = ifNull ? [.NullBecomesNil] : []
640+ return try mapOptionalAtPath(path, alongPath: options, transform: JSON.getDictionary)
641+ }
642+
643+}
tests/JSONTestSuite/parsers/test_Freddy_2_1_0/test_Freddy/main.swiftnew file+37
@@ -0,0 +1,37 @@
1+//
2+// main.swift
3+// test_Freddy
4+//
5+// Created by nst on 10/08/16.
6+// Copyright © 2016 Nicolas Seriot. All rights reserved.
7+//
8+
9+import Foundation
10+
11+func main() {
12+
13+ guard Process.arguments.count == 2 else {
14+ let url = NSURL(fileURLWithPath: Process.arguments[0])
15+ guard let programName = url.lastPathComponent else { exit(1) }
16+ print("Usage: ./\(programName) file.json")
17+ exit(1)
18+ }
19+
20+ let path = Process.arguments[1]
21+ let url = NSURL.fileURLWithPath(path)
22+
23+ guard let data = NSData(contentsOfURL:url) else {
24+ print("*** CANNOT READ DATA AT \(url)")
25+ return
26+ }
27+
28+ var p = JSONParser(utf8Data: data)
29+ do {
30+ try p.parse()
31+ exit(0)
32+ } catch {
33+ exit(1)
34+ }
35+}
36+
37+main()
tests/JSONTestSuite/parsers/test_JSONKit/JSONKit.hnew file+251
@@ -0,0 +1,251 @@
1+//
2+// JSONKit.h
3+// http://github.com/johnezang/JSONKit
4+// Dual licensed under either the terms of the BSD License, or alternatively
5+// under the terms of the Apache License, Version 2.0, as specified below.
6+//
7+
8+/*
9+ Copyright (c) 2011, John Engelhart
10+
11+ All rights reserved.
12+
13+ Redistribution and use in source and binary forms, with or without
14+ modification, are permitted provided that the following conditions are met:
15+
16+ * Redistributions of source code must retain the above copyright
17+ notice, this list of conditions and the following disclaimer.
18+
19+ * Redistributions in binary form must reproduce the above copyright
20+ notice, this list of conditions and the following disclaimer in the
21+ documentation and/or other materials provided with the distribution.
22+
23+ * Neither the name of the Zang Industries nor the names of its
24+ contributors may be used to endorse or promote products derived from
25+ this software without specific prior written permission.
26+
27+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
33+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38+*/
39+
40+/*
41+ Copyright 2011 John Engelhart
42+
43+ Licensed under the Apache License, Version 2.0 (the "License");
44+ you may not use this file except in compliance with the License.
45+ You may obtain a copy of the License at
46+
47+ http://www.apache.org/licenses/LICENSE-2.0
48+
49+ Unless required by applicable law or agreed to in writing, software
50+ distributed under the License is distributed on an "AS IS" BASIS,
51+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
52+ See the License for the specific language governing permissions and
53+ limitations under the License.
54+*/
55+
56+#include <stddef.h>
57+#include <stdint.h>
58+#include <limits.h>
59+#include <TargetConditionals.h>
60+#include <AvailabilityMacros.h>
61+
62+#ifdef __OBJC__
63+#import <Foundation/NSArray.h>
64+#import <Foundation/NSData.h>
65+#import <Foundation/NSDictionary.h>
66+#import <Foundation/NSError.h>
67+#import <Foundation/NSObjCRuntime.h>
68+#import <Foundation/NSString.h>
69+#endif // __OBJC__
70+
71+#ifdef __cplusplus
72+extern "C" {
73+#endif
74+
75+
76+// For Mac OS X < 10.5.
77+#ifndef NSINTEGER_DEFINED
78+#define NSINTEGER_DEFINED
79+#if defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
80+typedef long NSInteger;
81+typedef unsigned long NSUInteger;
82+#define NSIntegerMin LONG_MIN
83+#define NSIntegerMax LONG_MAX
84+#define NSUIntegerMax ULONG_MAX
85+#else // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
86+typedef int NSInteger;
87+typedef unsigned int NSUInteger;
88+#define NSIntegerMin INT_MIN
89+#define NSIntegerMax INT_MAX
90+#define NSUIntegerMax UINT_MAX
91+#endif // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
92+#endif // NSINTEGER_DEFINED
93+
94+
95+#ifndef _JSONKIT_H_
96+#define _JSONKIT_H_
97+
98+#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__APPLE_CC__) && (__APPLE_CC__ >= 5465)
99+#define JK_DEPRECATED_ATTRIBUTE __attribute__((deprecated))
100+#else
101+#define JK_DEPRECATED_ATTRIBUTE
102+#endif
103+
104+#define JSONKIT_VERSION_MAJOR 1
105+#define JSONKIT_VERSION_MINOR 4
106+
107+typedef NSUInteger JKFlags;
108+
109+/*
110+ JKParseOptionComments : Allow C style // and /_* ... *_/ (without a _, obviously) comments in JSON.
111+ JKParseOptionUnicodeNewlines : Allow Unicode recommended (?:\r\n|[\n\v\f\r\x85\p{Zl}\p{Zp}]) newlines.
112+ JKParseOptionLooseUnicode : Normally the decoder will stop with an error at any malformed Unicode.
113+ This option allows JSON with malformed Unicode to be parsed without reporting an error.
114+ Any malformed Unicode is replaced with \uFFFD, or "REPLACEMENT CHARACTER".
115+ */
116+
117+enum {
118+ JKParseOptionNone = 0,
119+ JKParseOptionStrict = 0,
120+ JKParseOptionComments = (1 << 0),
121+ JKParseOptionUnicodeNewlines = (1 << 1),
122+ JKParseOptionLooseUnicode = (1 << 2),
123+ JKParseOptionPermitTextAfterValidJSON = (1 << 3),
124+ JKParseOptionValidFlags = (JKParseOptionComments | JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode | JKParseOptionPermitTextAfterValidJSON),
125+};
126+typedef JKFlags JKParseOptionFlags;
127+
128+enum {
129+ JKSerializeOptionNone = 0,
130+ JKSerializeOptionPretty = (1 << 0),
131+ JKSerializeOptionEscapeUnicode = (1 << 1),
132+ JKSerializeOptionEscapeForwardSlashes = (1 << 4),
133+ JKSerializeOptionValidFlags = (JKSerializeOptionPretty | JKSerializeOptionEscapeUnicode | JKSerializeOptionEscapeForwardSlashes),
134+};
135+typedef JKFlags JKSerializeOptionFlags;
136+
137+#ifdef __OBJC__
138+
139+typedef struct JKParseState JKParseState; // Opaque internal, private type.
140+
141+// As a general rule of thumb, if you use a method that doesn't accept a JKParseOptionFlags argument, it defaults to JKParseOptionStrict
142+
143+@interface JSONDecoder : NSObject {
144+ JKParseState *parseState;
145+}
146++ (id)decoder;
147++ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
148+- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
149+- (void)clearCache;
150+
151+// The parse... methods were deprecated in v1.4 in favor of the v1.4 objectWith... methods.
152+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead.
153+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead.
154+// The NSData MUST be UTF8 encoded JSON.
155+- (id)parseJSONData:(NSData *)jsonData JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData: instead.
156+- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData:error: instead.
157+
158+// Methods that return immutable collection objects.
159+- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length;
160+- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error;
161+// The NSData MUST be UTF8 encoded JSON.
162+- (id)objectWithData:(NSData *)jsonData;
163+- (id)objectWithData:(NSData *)jsonData error:(NSError **)error;
164+
165+// Methods that return mutable collection objects.
166+- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length;
167+- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error;
168+// The NSData MUST be UTF8 encoded JSON.
169+- (id)mutableObjectWithData:(NSData *)jsonData;
170+- (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error;
171+
172+@end
173+
174+////////////
175+#pragma mark Deserializing methods
176+////////////
177+
178+@interface NSString (JSONKitDeserializing)
179+- (id)objectFromJSONString;
180+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
181+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
182+- (id)mutableObjectFromJSONString;
183+- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
184+- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
185+@end
186+
187+@interface NSData (JSONKitDeserializing)
188+// The NSData MUST be UTF8 encoded JSON.
189+- (id)objectFromJSONData;
190+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
191+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
192+- (id)mutableObjectFromJSONData;
193+- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
194+- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
195+@end
196+
197+////////////
198+#pragma mark Serializing methods
199+////////////
200+
201+@interface NSString (JSONKitSerializing)
202+// Convenience methods for those that need to serialize the receiving NSString (i.e., instead of having to serialize a NSArray with a single NSString, you can "serialize to JSON" just the NSString).
203+// Normally, a string that is serialized to JSON has quotation marks surrounding it, which you may or may not want when serializing a single string, and can be controlled with includeQuotes:
204+// includeQuotes:YES `a "test"...` -> `"a \"test\"..."`
205+// includeQuotes:NO `a "test"...` -> `a \"test\"...`
206+- (NSData *)JSONData; // Invokes JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES
207+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error;
208+- (NSString *)JSONString; // Invokes JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES
209+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error;
210+@end
211+
212+@interface NSArray (JSONKitSerializing)
213+- (NSData *)JSONData;
214+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
215+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
216+- (NSString *)JSONString;
217+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
218+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
219+@end
220+
221+@interface NSDictionary (JSONKitSerializing)
222+- (NSData *)JSONData;
223+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
224+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
225+- (NSString *)JSONString;
226+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
227+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
228+@end
229+
230+#ifdef __BLOCKS__
231+
232+@interface NSArray (JSONKitSerializingBlockAdditions)
233+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error;
234+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error;
235+@end
236+
237+@interface NSDictionary (JSONKitSerializingBlockAdditions)
238+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error;
239+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error;
240+@end
241+
242+#endif
243+
244+
245+#endif // __OBJC__
246+
247+#endif // _JSONKIT_H_
248+
249+#ifdef __cplusplus
250+} // extern "C"
251+#endif
tests/JSONTestSuite/parsers/test_JSONKit/JSONKit.mnew file+3065
@@ -0,0 +1,3065 @@
1+//
2+// JSONKit.m
3+// http://github.com/johnezang/JSONKit
4+// Dual licensed under either the terms of the BSD License, or alternatively
5+// under the terms of the Apache License, Version 2.0, as specified below.
6+//
7+
8+/*
9+ Copyright (c) 2011, John Engelhart
10+
11+ All rights reserved.
12+
13+ Redistribution and use in source and binary forms, with or without
14+ modification, are permitted provided that the following conditions are met:
15+
16+ * Redistributions of source code must retain the above copyright
17+ notice, this list of conditions and the following disclaimer.
18+
19+ * Redistributions in binary form must reproduce the above copyright
20+ notice, this list of conditions and the following disclaimer in the
21+ documentation and/or other materials provided with the distribution.
22+
23+ * Neither the name of the Zang Industries nor the names of its
24+ contributors may be used to endorse or promote products derived from
25+ this software without specific prior written permission.
26+
27+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
33+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38+*/
39+
40+/*
41+ Copyright 2011 John Engelhart
42+
43+ Licensed under the Apache License, Version 2.0 (the "License");
44+ you may not use this file except in compliance with the License.
45+ You may obtain a copy of the License at
46+
47+ http://www.apache.org/licenses/LICENSE-2.0
48+
49+ Unless required by applicable law or agreed to in writing, software
50+ distributed under the License is distributed on an "AS IS" BASIS,
51+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
52+ See the License for the specific language governing permissions and
53+ limitations under the License.
54+*/
55+
56+
57+/*
58+ Acknowledgments:
59+
60+ The bulk of the UTF8 / UTF32 conversion and verification comes
61+ from ConvertUTF.[hc]. It has been modified from the original sources.
62+
63+ The original sources were obtained from http://www.unicode.org/.
64+ However, the web site no longer seems to host the files. Instead,
65+ the Unicode FAQ http://www.unicode.org/faq//utf_bom.html#gen4
66+ points to International Components for Unicode (ICU)
67+ http://site.icu-project.org/ as an example of how to write a UTF
68+ converter.
69+
70+ The decision to use the ConvertUTF.[ch] code was made to leverage
71+ "proven" code. Hopefully the local modifications are bug free.
72+
73+ The code in isValidCodePoint() is derived from the ICU code in
74+ utf.h for the macros U_IS_UNICODE_NONCHAR and U_IS_UNICODE_CHAR.
75+
76+ From the original ConvertUTF.[ch]:
77+
78+ * Copyright 2001-2004 Unicode, Inc.
79+ *
80+ * Disclaimer
81+ *
82+ * This source code is provided as is by Unicode, Inc. No claims are
83+ * made as to fitness for any particular purpose. No warranties of any
84+ * kind are expressed or implied. The recipient agrees to determine
85+ * applicability of information provided. If this file has been
86+ * purchased on magnetic or optical media from Unicode, Inc., the
87+ * sole remedy for any claim will be exchange of defective media
88+ * within 90 days of receipt.
89+ *
90+ * Limitations on Rights to Redistribute This Code
91+ *
92+ * Unicode, Inc. hereby grants the right to freely use the information
93+ * supplied in this file in the creation of products supporting the
94+ * Unicode Standard, and to make copies of this file in any form
95+ * for internal or external distribution as long as this notice
96+ * remains attached.
97+
98+*/
99+
100+#include <stdio.h>
101+#include <stdlib.h>
102+#include <stdint.h>
103+#include <string.h>
104+#include <assert.h>
105+#include <sys/errno.h>
106+#include <math.h>
107+#include <limits.h>
108+#include <objc/runtime.h>
109+
110+#import "JSONKit.h"
111+
112+//#include <CoreFoundation/CoreFoundation.h>
113+#include <CoreFoundation/CFString.h>
114+#include <CoreFoundation/CFArray.h>
115+#include <CoreFoundation/CFDictionary.h>
116+#include <CoreFoundation/CFNumber.h>
117+
118+//#import <Foundation/Foundation.h>
119+#import <Foundation/NSArray.h>
120+#import <Foundation/NSAutoreleasePool.h>
121+#import <Foundation/NSData.h>
122+#import <Foundation/NSDictionary.h>
123+#import <Foundation/NSException.h>
124+#import <Foundation/NSNull.h>
125+#import <Foundation/NSObjCRuntime.h>
126+
127+#ifndef __has_feature
128+#define __has_feature(x) 0
129+#endif
130+
131+#ifdef JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS
132+#warning As of JSONKit v1.4, JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS is no longer required. It is no longer a valid option.
133+#endif
134+
135+#ifdef __OBJC_GC__
136+#error JSONKit does not support Objective-C Garbage Collection
137+#endif
138+
139+#if __has_feature(objc_arc)
140+#error JSONKit does not support Objective-C Automatic Reference Counting (ARC)
141+#endif
142+
143+// The following checks are really nothing more than sanity checks.
144+// JSONKit technically has a few problems from a "strictly C99 conforming" standpoint, though they are of the pedantic nitpicking variety.
145+// In practice, though, for the compilers and architectures we can reasonably expect this code to be compiled for, these pedantic nitpicks aren't really a problem.
146+// Since we're limited as to what we can do with pre-processor #if checks, these checks are not nearly as through as they should be.
147+
148+#if (UINT_MAX != 0xffffffffU) || (INT_MIN != (-0x7fffffff-1)) || (ULLONG_MAX != 0xffffffffffffffffULL) || (LLONG_MIN != (-0x7fffffffffffffffLL-1LL))
149+#error JSONKit requires the C 'int' and 'long long' types to be 32 and 64 bits respectively.
150+#endif
151+
152+#if !defined(__LP64__) && ((UINT_MAX != ULONG_MAX) || (INT_MAX != LONG_MAX) || (INT_MIN != LONG_MIN) || (WORD_BIT != LONG_BIT))
153+#error JSONKit requires the C 'int' and 'long' types to be the same on 32-bit architectures.
154+#endif
155+
156+// Cocoa / Foundation uses NS*Integer as the type for a lot of arguments. We make sure that NS*Integer is something we are expecting and is reasonably compatible with size_t / ssize_t
157+
158+#if (NSUIntegerMax != ULONG_MAX) || (NSIntegerMax != LONG_MAX) || (NSIntegerMin != LONG_MIN)
159+#error JSONKit requires NSInteger and NSUInteger to be the same size as the C 'long' type.
160+#endif
161+
162+#if (NSUIntegerMax != SIZE_MAX) || (NSIntegerMax != SSIZE_MAX)
163+#error JSONKit requires NSInteger and NSUInteger to be the same size as the C 'size_t' type.
164+#endif
165+
166+
167+// For DJB hash.
168+#define JK_HASH_INIT (1402737925UL)
169+
170+// Use __builtin_clz() instead of trailingBytesForUTF8[] table lookup.
171+#define JK_FAST_TRAILING_BYTES
172+
173+// JK_CACHE_SLOTS must be a power of 2. Default size is 1024 slots.
174+#define JK_CACHE_SLOTS_BITS (10)
175+#define JK_CACHE_SLOTS (1UL << JK_CACHE_SLOTS_BITS)
176+// JK_CACHE_PROBES is the number of probe attempts.
177+#define JK_CACHE_PROBES (4UL)
178+// JK_INIT_CACHE_AGE must be < (1 << AGE) - 1, where AGE is sizeof(typeof(AGE)) * 8.
179+#define JK_INIT_CACHE_AGE (0)
180+
181+// JK_TOKENBUFFER_SIZE is the default stack size for the temporary buffer used to hold "non-simple" strings (i.e., contains \ escapes)
182+#define JK_TOKENBUFFER_SIZE (1024UL * 2UL)
183+
184+// JK_STACK_OBJS is the default number of spaces reserved on the stack for temporarily storing pointers to Obj-C objects before they can be transferred to a NSArray / NSDictionary.
185+#define JK_STACK_OBJS (1024UL * 1UL)
186+
187+#define JK_JSONBUFFER_SIZE (1024UL * 4UL)
188+#define JK_UTF8BUFFER_SIZE (1024UL * 16UL)
189+
190+#define JK_ENCODE_CACHE_SLOTS (1024UL)
191+
192+
193+#if defined (__GNUC__) && (__GNUC__ >= 4)
194+#define JK_ATTRIBUTES(attr, ...) __attribute__((attr, ##__VA_ARGS__))
195+#define JK_EXPECTED(cond, expect) __builtin_expect((long)(cond), (expect))
196+#define JK_EXPECT_T(cond) JK_EXPECTED(cond, 1U)
197+#define JK_EXPECT_F(cond) JK_EXPECTED(cond, 0U)
198+#define JK_PREFETCH(ptr) __builtin_prefetch(ptr)
199+#else // defined (__GNUC__) && (__GNUC__ >= 4)
200+#define JK_ATTRIBUTES(attr, ...)
201+#define JK_EXPECTED(cond, expect) (cond)
202+#define JK_EXPECT_T(cond) (cond)
203+#define JK_EXPECT_F(cond) (cond)
204+#define JK_PREFETCH(ptr)
205+#endif // defined (__GNUC__) && (__GNUC__ >= 4)
206+
207+#define JK_STATIC_INLINE static __inline__ JK_ATTRIBUTES(always_inline)
208+#define JK_ALIGNED(arg) JK_ATTRIBUTES(aligned(arg))
209+#define JK_UNUSED_ARG JK_ATTRIBUTES(unused)
210+#define JK_WARN_UNUSED JK_ATTRIBUTES(warn_unused_result)
211+#define JK_WARN_UNUSED_CONST JK_ATTRIBUTES(warn_unused_result, const)
212+#define JK_WARN_UNUSED_PURE JK_ATTRIBUTES(warn_unused_result, pure)
213+#define JK_WARN_UNUSED_SENTINEL JK_ATTRIBUTES(warn_unused_result, sentinel)
214+#define JK_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(nonnull(arg, ##__VA_ARGS__))
215+#define JK_WARN_UNUSED_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(arg, ##__VA_ARGS__))
216+#define JK_WARN_UNUSED_CONST_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, const, nonnull(arg, ##__VA_ARGS__))
217+#define JK_WARN_UNUSED_PURE_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, pure, nonnull(arg, ##__VA_ARGS__))
218+
219+#if defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
220+#define JK_ALLOC_SIZE_NON_NULL_ARGS_WARN_UNUSED(as, nn, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(nn, ##__VA_ARGS__), alloc_size(as))
221+#else // defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
222+#define JK_ALLOC_SIZE_NON_NULL_ARGS_WARN_UNUSED(as, nn, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(nn, ##__VA_ARGS__))
223+#endif // defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
224+
225+
226+@class JKArray, JKDictionaryEnumerator, JKDictionary;
227+
228+enum {
229+ JSONNumberStateStart = 0,
230+ JSONNumberStateFinished = 1,
231+ JSONNumberStateError = 2,
232+ JSONNumberStateWholeNumberStart = 3,
233+ JSONNumberStateWholeNumberMinus = 4,
234+ JSONNumberStateWholeNumberZero = 5,
235+ JSONNumberStateWholeNumber = 6,
236+ JSONNumberStatePeriod = 7,
237+ JSONNumberStateFractionalNumberStart = 8,
238+ JSONNumberStateFractionalNumber = 9,
239+ JSONNumberStateExponentStart = 10,
240+ JSONNumberStateExponentPlusMinus = 11,
241+ JSONNumberStateExponent = 12,
242+};
243+
244+enum {
245+ JSONStringStateStart = 0,
246+ JSONStringStateParsing = 1,
247+ JSONStringStateFinished = 2,
248+ JSONStringStateError = 3,
249+ JSONStringStateEscape = 4,
250+ JSONStringStateEscapedUnicode1 = 5,
251+ JSONStringStateEscapedUnicode2 = 6,
252+ JSONStringStateEscapedUnicode3 = 7,
253+ JSONStringStateEscapedUnicode4 = 8,
254+ JSONStringStateEscapedUnicodeSurrogate1 = 9,
255+ JSONStringStateEscapedUnicodeSurrogate2 = 10,
256+ JSONStringStateEscapedUnicodeSurrogate3 = 11,
257+ JSONStringStateEscapedUnicodeSurrogate4 = 12,
258+ JSONStringStateEscapedNeedEscapeForSurrogate = 13,
259+ JSONStringStateEscapedNeedEscapedUForSurrogate = 14,
260+};
261+
262+enum {
263+ JKParseAcceptValue = (1 << 0),
264+ JKParseAcceptComma = (1 << 1),
265+ JKParseAcceptEnd = (1 << 2),
266+ JKParseAcceptValueOrEnd = (JKParseAcceptValue | JKParseAcceptEnd),
267+ JKParseAcceptCommaOrEnd = (JKParseAcceptComma | JKParseAcceptEnd),
268+};
269+
270+enum {
271+ JKClassUnknown = 0,
272+ JKClassString = 1,
273+ JKClassNumber = 2,
274+ JKClassArray = 3,
275+ JKClassDictionary = 4,
276+ JKClassNull = 5,
277+};
278+
279+enum {
280+ JKManagedBufferOnStack = 1,
281+ JKManagedBufferOnHeap = 2,
282+ JKManagedBufferLocationMask = (0x3),
283+ JKManagedBufferLocationShift = (0),
284+
285+ JKManagedBufferMustFree = (1 << 2),
286+};
287+typedef JKFlags JKManagedBufferFlags;
288+
289+enum {
290+ JKObjectStackOnStack = 1,
291+ JKObjectStackOnHeap = 2,
292+ JKObjectStackLocationMask = (0x3),
293+ JKObjectStackLocationShift = (0),
294+
295+ JKObjectStackMustFree = (1 << 2),
296+};
297+typedef JKFlags JKObjectStackFlags;
298+
299+enum {
300+ JKTokenTypeInvalid = 0,
301+ JKTokenTypeNumber = 1,
302+ JKTokenTypeString = 2,
303+ JKTokenTypeObjectBegin = 3,
304+ JKTokenTypeObjectEnd = 4,
305+ JKTokenTypeArrayBegin = 5,
306+ JKTokenTypeArrayEnd = 6,
307+ JKTokenTypeSeparator = 7,
308+ JKTokenTypeComma = 8,
309+ JKTokenTypeTrue = 9,
310+ JKTokenTypeFalse = 10,
311+ JKTokenTypeNull = 11,
312+ JKTokenTypeWhiteSpace = 12,
313+};
314+typedef NSUInteger JKTokenType;
315+
316+// These are prime numbers to assist with hash slot probing.
317+enum {
318+ JKValueTypeNone = 0,
319+ JKValueTypeString = 5,
320+ JKValueTypeLongLong = 7,
321+ JKValueTypeUnsignedLongLong = 11,
322+ JKValueTypeDouble = 13,
323+};
324+typedef NSUInteger JKValueType;
325+
326+enum {
327+ JKEncodeOptionAsData = 1,
328+ JKEncodeOptionAsString = 2,
329+ JKEncodeOptionAsTypeMask = 0x7,
330+ JKEncodeOptionCollectionObj = (1 << 3),
331+ JKEncodeOptionStringObj = (1 << 4),
332+ JKEncodeOptionStringObjTrimQuotes = (1 << 5),
333+
334+};
335+typedef NSUInteger JKEncodeOptionType;
336+
337+typedef NSUInteger JKHash;
338+
339+typedef struct JKTokenCacheItem JKTokenCacheItem;
340+typedef struct JKTokenCache JKTokenCache;
341+typedef struct JKTokenValue JKTokenValue;
342+typedef struct JKParseToken JKParseToken;
343+typedef struct JKPtrRange JKPtrRange;
344+typedef struct JKObjectStack JKObjectStack;
345+typedef struct JKBuffer JKBuffer;
346+typedef struct JKConstBuffer JKConstBuffer;
347+typedef struct JKConstPtrRange JKConstPtrRange;
348+typedef struct JKRange JKRange;
349+typedef struct JKManagedBuffer JKManagedBuffer;
350+typedef struct JKFastClassLookup JKFastClassLookup;
351+typedef struct JKEncodeCache JKEncodeCache;
352+typedef struct JKEncodeState JKEncodeState;
353+typedef struct JKObjCImpCache JKObjCImpCache;
354+typedef struct JKHashTableEntry JKHashTableEntry;
355+
356+typedef id (*NSNumberAllocImp)(id receiver, SEL selector);
357+typedef id (*NSNumberInitWithUnsignedLongLongImp)(id receiver, SEL selector, unsigned long long value);
358+typedef id (*JKClassFormatterIMP)(id receiver, SEL selector, id object);
359+#ifdef __BLOCKS__
360+typedef id (^JKClassFormatterBlock)(id formatObject);
361+#endif
362+
363+
364+struct JKPtrRange {
365+ unsigned char *ptr;
366+ size_t length;
367+};
368+
369+struct JKConstPtrRange {
370+ const unsigned char *ptr;
371+ size_t length;
372+};
373+
374+struct JKRange {
375+ size_t location, length;
376+};
377+
378+struct JKManagedBuffer {
379+ JKPtrRange bytes;
380+ JKManagedBufferFlags flags;
381+ size_t roundSizeUpToMultipleOf;
382+};
383+
384+struct JKObjectStack {
385+ void **objects, **keys;
386+ CFHashCode *cfHashes;
387+ size_t count, index, roundSizeUpToMultipleOf;
388+ JKObjectStackFlags flags;
389+};
390+
391+struct JKBuffer {
392+ JKPtrRange bytes;
393+};
394+
395+struct JKConstBuffer {
396+ JKConstPtrRange bytes;
397+};
398+
399+struct JKTokenValue {
400+ JKConstPtrRange ptrRange;
401+ JKValueType type;
402+ JKHash hash;
403+ union {
404+ long long longLongValue;
405+ unsigned long long unsignedLongLongValue;
406+ double doubleValue;
407+ } number;
408+ JKTokenCacheItem *cacheItem;
409+};
410+
411+struct JKParseToken {
412+ JKConstPtrRange tokenPtrRange;
413+ JKTokenType type;
414+ JKTokenValue value;
415+ JKManagedBuffer tokenBuffer;
416+};
417+
418+struct JKTokenCacheItem {
419+ void *object;
420+ JKHash hash;
421+ CFHashCode cfHash;
422+ size_t size;
423+ unsigned char *bytes;
424+ JKValueType type;
425+};
426+
427+struct JKTokenCache {
428+ JKTokenCacheItem *items;
429+ size_t count;
430+ unsigned int prng_lfsr;
431+ unsigned char age[JK_CACHE_SLOTS];
432+};
433+
434+struct JKObjCImpCache {
435+ Class NSNumberClass;
436+ NSNumberAllocImp NSNumberAlloc;
437+ NSNumberInitWithUnsignedLongLongImp NSNumberInitWithUnsignedLongLong;
438+};
439+
440+struct JKParseState {
441+ JKParseOptionFlags parseOptionFlags;
442+ JKConstBuffer stringBuffer;
443+ size_t atIndex, lineNumber, lineStartIndex;
444+ size_t prev_atIndex, prev_lineNumber, prev_lineStartIndex;
445+ JKParseToken token;
446+ JKObjectStack objectStack;
447+ JKTokenCache cache;
448+ JKObjCImpCache objCImpCache;
449+ NSError *error;
450+ int errorIsPrev;
451+ BOOL mutableCollections;
452+};
453+
454+struct JKFastClassLookup {
455+ void *stringClass;
456+ void *numberClass;
457+ void *arrayClass;
458+ void *dictionaryClass;
459+ void *nullClass;
460+};
461+
462+struct JKEncodeCache {
463+ id object;
464+ size_t offset;
465+ size_t length;
466+};
467+
468+struct JKEncodeState {
469+ JKManagedBuffer utf8ConversionBuffer;
470+ JKManagedBuffer stringBuffer;
471+ size_t atIndex;
472+ JKFastClassLookup fastClassLookup;
473+ JKEncodeCache cache[JK_ENCODE_CACHE_SLOTS];
474+ JKSerializeOptionFlags serializeOptionFlags;
475+ JKEncodeOptionType encodeOption;
476+ size_t depth;
477+ NSError *error;
478+ id classFormatterDelegate;
479+ SEL classFormatterSelector;
480+ JKClassFormatterIMP classFormatterIMP;
481+#ifdef __BLOCKS__
482+ JKClassFormatterBlock classFormatterBlock;
483+#endif
484+};
485+
486+// This is a JSONKit private class.
487+@interface JKSerializer : NSObject {
488+ JKEncodeState *encodeState;
489+}
490+
491+#ifdef __BLOCKS__
492+#define JKSERIALIZER_BLOCKS_PROTO id(^)(id object)
493+#else
494+#define JKSERIALIZER_BLOCKS_PROTO id
495+#endif
496+
497++ (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
498+- (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
499+- (void)releaseState;
500+
501+@end
502+
503+struct JKHashTableEntry {
504+ NSUInteger keyHash;
505+ id key, object;
506+};
507+
508+
509+typedef uint32_t UTF32; /* at least 32 bits */
510+typedef uint16_t UTF16; /* at least 16 bits */
511+typedef uint8_t UTF8; /* typically 8 bits */
512+
513+typedef enum {
514+ conversionOK, /* conversion successful */
515+ sourceExhausted, /* partial character in source, but hit end */
516+ targetExhausted, /* insuff. room in target for conversion */
517+ sourceIllegal /* source sequence is illegal/malformed */
518+} ConversionResult;
519+
520+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
521+#define UNI_MAX_BMP (UTF32)0x0000FFFF
522+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
523+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
524+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
525+#define UNI_SUR_HIGH_START (UTF32)0xD800
526+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
527+#define UNI_SUR_LOW_START (UTF32)0xDC00
528+#define UNI_SUR_LOW_END (UTF32)0xDFFF
529+
530+
531+#if !defined(JK_FAST_TRAILING_BYTES)
532+static const char trailingBytesForUTF8[256] = {
533+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
534+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
535+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
536+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
537+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
538+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
539+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
540+ 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
541+};
542+#endif
543+
544+static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL };
545+static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
546+
547+#define JK_AT_STRING_PTR(x) (&((x)->stringBuffer.bytes.ptr[(x)->atIndex]))
548+#define JK_END_STRING_PTR(x) (&((x)->stringBuffer.bytes.ptr[(x)->stringBuffer.bytes.length]))
549+
550+
551+static JKArray *_JKArrayCreate(id *objects, NSUInteger count, BOOL mutableCollection);
552+static void _JKArrayInsertObjectAtIndex(JKArray *array, id newObject, NSUInteger objectIndex);
553+static void _JKArrayReplaceObjectAtIndexWithObject(JKArray *array, NSUInteger objectIndex, id newObject);
554+static void _JKArrayRemoveObjectAtIndex(JKArray *array, NSUInteger objectIndex);
555+
556+
557+static NSUInteger _JKDictionaryCapacityForCount(NSUInteger count);
558+static JKDictionary *_JKDictionaryCreate(id *keys, NSUInteger *keyHashes, id *objects, NSUInteger count, BOOL mutableCollection);
559+static JKHashTableEntry *_JKDictionaryHashEntry(JKDictionary *dictionary);
560+static NSUInteger _JKDictionaryCapacity(JKDictionary *dictionary);
561+static void _JKDictionaryResizeIfNeccessary(JKDictionary *dictionary);
562+static void _JKDictionaryRemoveObjectWithEntry(JKDictionary *dictionary, JKHashTableEntry *entry);
563+static void _JKDictionaryAddObject(JKDictionary *dictionary, NSUInteger keyHash, id key, id object);
564+static JKHashTableEntry *_JKDictionaryHashTableEntryForKey(JKDictionary *dictionary, id aKey);
565+
566+
567+static void _JSONDecoderCleanup(JSONDecoder *decoder);
568+
569+static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection);
570+
571+
572+static void jk_managedBuffer_release(JKManagedBuffer *managedBuffer);
573+static void jk_managedBuffer_setToStackBuffer(JKManagedBuffer *managedBuffer, unsigned char *ptr, size_t length);
574+static unsigned char *jk_managedBuffer_resize(JKManagedBuffer *managedBuffer, size_t newSize);
575+static void jk_objectStack_release(JKObjectStack *objectStack);
576+static void jk_objectStack_setToStackBuffer(JKObjectStack *objectStack, void **objects, void **keys, CFHashCode *cfHashes, size_t count);
577+static int jk_objectStack_resize(JKObjectStack *objectStack, size_t newCount);
578+
579+static void jk_error(JKParseState *parseState, NSString *format, ...);
580+static int jk_parse_string(JKParseState *parseState);
581+static int jk_parse_number(JKParseState *parseState);
582+static size_t jk_parse_is_newline(JKParseState *parseState, const unsigned char *atCharacterPtr);
583+JK_STATIC_INLINE int jk_parse_skip_newline(JKParseState *parseState);
584+JK_STATIC_INLINE void jk_parse_skip_whitespace(JKParseState *parseState);
585+static int jk_parse_next_token(JKParseState *parseState);
586+static void jk_error_parse_accept_or3(JKParseState *parseState, int state, NSString *or1String, NSString *or2String, NSString *or3String);
587+static void *jk_create_dictionary(JKParseState *parseState, size_t startingObjectIndex);
588+static void *jk_parse_dictionary(JKParseState *parseState);
589+static void *jk_parse_array(JKParseState *parseState);
590+static void *jk_object_for_token(JKParseState *parseState);
591+static void *jk_cachedObjects(JKParseState *parseState);
592+JK_STATIC_INLINE void jk_cache_age(JKParseState *parseState);
593+JK_STATIC_INLINE void jk_set_parsed_token(JKParseState *parseState, const unsigned char *ptr, size_t length, JKTokenType type, size_t advanceBy);
594+
595+
596+static void jk_encode_error(JKEncodeState *encodeState, NSString *format, ...);
597+static int jk_encode_printf(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, ...);
598+static int jk_encode_write(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format);
599+static int jk_encode_writePrettyPrintWhiteSpace(JKEncodeState *encodeState);
600+static int jk_encode_write1slow(JKEncodeState *encodeState, ssize_t depthChange, const char *format);
601+static int jk_encode_write1fast(JKEncodeState *encodeState, ssize_t depthChange JK_UNUSED_ARG, const char *format);
602+static int jk_encode_writen(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, size_t length);
603+JK_STATIC_INLINE JKHash jk_encode_object_hash(void *objectPtr);
604+JK_STATIC_INLINE void jk_encode_updateCache(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object);
605+static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *objectPtr);
606+
607+#define jk_encode_write1(es, dc, f) (JK_EXPECT_F(_jk_encode_prettyPrint) ? jk_encode_write1slow(es, dc, f) : jk_encode_write1fast(es, dc, f))
608+
609+
610+JK_STATIC_INLINE size_t jk_min(size_t a, size_t b);
611+JK_STATIC_INLINE size_t jk_max(size_t a, size_t b);
612+JK_STATIC_INLINE JKHash jk_calculateHash(JKHash currentHash, unsigned char c);
613+
614+// JSONKit v1.4 used both a JKArray : NSArray and JKMutableArray : NSMutableArray, and the same for the dictionary collection type.
615+// However, Louis Gerbarg (via cocoa-dev) pointed out that Cocoa / Core Foundation actually implements only a single class that inherits from the
616+// mutable version, and keeps an ivar bit for whether or not that instance is mutable. This means that the immutable versions of the collection
617+// classes receive the mutating methods, but this is handled by having those methods throw an exception when the ivar bit is set to immutable.
618+// We adopt the same strategy here. It's both cleaner and gets rid of the method swizzling hackery used in JSONKit v1.4.
619+
620+
621+// This is a workaround for issue #23 https://github.com/johnezang/JSONKit/pull/23
622+// Basically, there seem to be a problem with using +load in static libraries on iOS. However, __attribute__ ((constructor)) does work correctly.
623+// Since we do not require anything "special" that +load provides, and we can accomplish the same thing using __attribute__ ((constructor)), the +load logic was moved here.
624+
625+static Class _JKArrayClass = NULL;
626+static size_t _JKArrayInstanceSize = 0UL;
627+static Class _JKDictionaryClass = NULL;
628+static size_t _JKDictionaryInstanceSize = 0UL;
629+
630+// For JSONDecoder...
631+static Class _jk_NSNumberClass = NULL;
632+static NSNumberAllocImp _jk_NSNumberAllocImp = NULL;
633+static NSNumberInitWithUnsignedLongLongImp _jk_NSNumberInitWithUnsignedLongLongImp = NULL;
634+
635+extern void jk_collectionClassLoadTimeInitialization(void) __attribute__ ((constructor));
636+
637+void jk_collectionClassLoadTimeInitialization(void) {
638+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Though technically not required, the run time environment at load time initialization may be less than ideal.
639+
640+ _JKArrayClass = objc_getClass("JKArray");
641+ _JKArrayInstanceSize = jk_max(16UL, class_getInstanceSize(_JKArrayClass));
642+
643+ _JKDictionaryClass = objc_getClass("JKDictionary");
644+ _JKDictionaryInstanceSize = jk_max(16UL, class_getInstanceSize(_JKDictionaryClass));
645+
646+ // For JSONDecoder...
647+ _jk_NSNumberClass = [NSNumber class];
648+ _jk_NSNumberAllocImp = (NSNumberAllocImp)[NSNumber methodForSelector:@selector(alloc)];
649+
650+ // Hacktacular. Need to do it this way due to the nature of class clusters.
651+ id temp_NSNumber = [NSNumber alloc];
652+ _jk_NSNumberInitWithUnsignedLongLongImp = (NSNumberInitWithUnsignedLongLongImp)[temp_NSNumber methodForSelector:@selector(initWithUnsignedLongLong:)];
653+ [[temp_NSNumber init] release];
654+ temp_NSNumber = NULL;
655+
656+ [pool release]; pool = NULL;
657+}
658+
659+
660+#pragma mark -
661+@interface JKArray : NSMutableArray <NSCopying, NSMutableCopying, NSFastEnumeration> {
662+ id *objects;
663+ NSUInteger count, capacity, mutations;
664+}
665+@end
666+
667+@implementation JKArray
668+
669++ (id)allocWithZone:(NSZone *)zone
670+{
671+#pragma unused(zone)
672+ [NSException raise:NSInvalidArgumentException format:@"*** - [%@ %@]: The %@ class is private to JSONKit and should not be used in this fashion.", NSStringFromClass([self class]), NSStringFromSelector(_cmd), NSStringFromClass([self class])];
673+ return(NULL);
674+}
675+
676+static JKArray *_JKArrayCreate(id *objects, NSUInteger count, BOOL mutableCollection) {
677+ NSCParameterAssert((objects != NULL) && (_JKArrayClass != NULL) && (_JKArrayInstanceSize > 0UL));
678+ JKArray *array = NULL;
679+ if(JK_EXPECT_T((array = (JKArray *)calloc(1UL, _JKArrayInstanceSize)) != NULL)) { // Directly allocate the JKArray instance via calloc.
680+ object_setClass(array, _JKArrayClass);
681+ if((array = [array init]) == NULL) { return(NULL); }
682+ array->capacity = count;
683+ array->count = count;
684+ if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { [array autorelease]; return(NULL); }
685+ memcpy(array->objects, objects, array->capacity * sizeof(id));
686+ array->mutations = (mutableCollection == NO) ? 0UL : 1UL;
687+ }
688+ return(array);
689+}
690+
691+// Note: The caller is responsible for -retaining the object that is to be added.
692+static void _JKArrayInsertObjectAtIndex(JKArray *array, id newObject, NSUInteger objectIndex) {
693+ NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex <= array->count) && (newObject != NULL));
694+ if(!((array != NULL) && (array->objects != NULL) && (objectIndex <= array->count) && (newObject != NULL))) { [newObject autorelease]; return; }
695+ if((array->count + 1UL) >= array->capacity) {
696+ id *newObjects = NULL;
697+ if((newObjects = (id *)realloc(array->objects, sizeof(id) * (array->capacity + 16UL))) == NULL) { [NSException raise:NSMallocException format:@"Unable to resize objects array."]; }
698+ array->objects = newObjects;
699+ array->capacity += 16UL;
700+ memset(&array->objects[array->count], 0, sizeof(id) * (array->capacity - array->count));
701+ }
702+ array->count++;
703+ if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex + 1UL], &array->objects[objectIndex], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[objectIndex] = NULL; }
704+ array->objects[objectIndex] = newObject;
705+}
706+
707+// Note: The caller is responsible for -retaining the object that is to be added.
708+static void _JKArrayReplaceObjectAtIndexWithObject(JKArray *array, NSUInteger objectIndex, id newObject) {
709+ NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL) && (newObject != NULL));
710+ if(!((array != NULL) && (array->objects != NULL) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL) && (newObject != NULL))) { [newObject autorelease]; return; }
711+ CFRelease(array->objects[objectIndex]);
712+ array->objects[objectIndex] = NULL;
713+ array->objects[objectIndex] = newObject;
714+}
715+
716+static void _JKArrayRemoveObjectAtIndex(JKArray *array, NSUInteger objectIndex) {
717+ NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL));
718+ if(!((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL))) { return; }
719+ CFRelease(array->objects[objectIndex]);
720+ array->objects[objectIndex] = NULL;
721+ if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex], &array->objects[objectIndex + 1UL], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[array->count - 1UL] = NULL; }
722+ array->count--;
723+}
724+
725+- (void)dealloc
726+{
727+ if(JK_EXPECT_T(objects != NULL)) {
728+ NSUInteger atObject = 0UL;
729+ for(atObject = 0UL; atObject < count; atObject++) { if(JK_EXPECT_T(objects[atObject] != NULL)) { CFRelease(objects[atObject]); objects[atObject] = NULL; } }
730+ free(objects); objects = NULL;
731+ }
732+
733+ [super dealloc];
734+}
735+
736+- (NSUInteger)count
737+{
738+ NSParameterAssert((objects != NULL) && (count <= capacity));
739+ return(count);
740+}
741+
742+- (void)getObjects:(id *)objectsPtr range:(NSRange)range
743+{
744+ NSParameterAssert((objects != NULL) && (count <= capacity));
745+ if((objectsPtr == NULL) && (NSMaxRange(range) > 0UL)) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: pointer to objects array is NULL but range length is %lu", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)NSMaxRange(range)]; }
746+ if((range.location > count) || (NSMaxRange(range) > count)) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)NSMaxRange(range), (unsigned long)count]; }
747+#ifndef __clang_analyzer__
748+ memcpy(objectsPtr, objects + range.location, range.length * sizeof(id));
749+#endif
750+}
751+
752+- (id)objectAtIndex:(NSUInteger)objectIndex
753+{
754+ if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; }
755+ NSParameterAssert((objects != NULL) && (count <= capacity) && (objects[objectIndex] != NULL));
756+ return(objects[objectIndex]);
757+}
758+
759+- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
760+{
761+ NSParameterAssert((state != NULL) && (stackbuf != NULL) && (len > 0UL) && (objects != NULL) && (count <= capacity));
762+ if(JK_EXPECT_F(state->state == 0UL)) { state->mutationsPtr = (unsigned long *)&mutations; state->itemsPtr = stackbuf; }
763+ if(JK_EXPECT_F(state->state >= count)) { return(0UL); }
764+
765+ NSUInteger enumeratedCount = 0UL;
766+ while(JK_EXPECT_T(enumeratedCount < len) && JK_EXPECT_T(state->state < count)) { NSParameterAssert(objects[state->state] != NULL); stackbuf[enumeratedCount++] = objects[state->state++]; }
767+
768+ return(enumeratedCount);
769+}
770+
771+- (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex
772+{
773+ if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
774+ if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
775+ if(objectIndex > count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)(count + 1UL)]; }
776+#ifdef __clang_analyzer__
777+ [anObject retain]; // Stupid clang analyzer... Issue #19.
778+#else
779+ anObject = [anObject retain];
780+#endif
781+ _JKArrayInsertObjectAtIndex(self, anObject, objectIndex);
782+ mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL;
783+}
784+
785+- (void)removeObjectAtIndex:(NSUInteger)objectIndex
786+{
787+ if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
788+ if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; }
789+ _JKArrayRemoveObjectAtIndex(self, objectIndex);
790+ mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL;
791+}
792+
793+- (void)replaceObjectAtIndex:(NSUInteger)objectIndex withObject:(id)anObject
794+{
795+ if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
796+ if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
797+ if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; }
798+#ifdef __clang_analyzer__
799+ [anObject retain]; // Stupid clang analyzer... Issue #19.
800+#else
801+ anObject = [anObject retain];
802+#endif
803+ _JKArrayReplaceObjectAtIndexWithObject(self, objectIndex, anObject);
804+ mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL;
805+}
806+
807+- (id)copyWithZone:(NSZone *)zone
808+{
809+ NSParameterAssert((objects != NULL) && (count <= capacity));
810+ return((mutations == 0UL) ? [self retain] : [(NSArray *)[NSArray allocWithZone:zone] initWithObjects:objects count:count]);
811+}
812+
813+- (id)mutableCopyWithZone:(NSZone *)zone
814+{
815+ NSParameterAssert((objects != NULL) && (count <= capacity));
816+ return([(NSMutableArray *)[NSMutableArray allocWithZone:zone] initWithObjects:objects count:count]);
817+}
818+
819+@end
820+
821+
822+#pragma mark -
823+@interface JKDictionaryEnumerator : NSEnumerator {
824+ id collection;
825+ NSUInteger nextObject;
826+}
827+
828+- (id)initWithJKDictionary:(JKDictionary *)initDictionary;
829+- (NSArray *)allObjects;
830+- (id)nextObject;
831+
832+@end
833+
834+@implementation JKDictionaryEnumerator
835+
836+- (id)initWithJKDictionary:(JKDictionary *)initDictionary
837+{
838+ NSParameterAssert(initDictionary != NULL);
839+ if((self = [super init]) == NULL) { return(NULL); }
840+ if((collection = (id)CFRetain(initDictionary)) == NULL) { [self autorelease]; return(NULL); }
841+ return(self);
842+}
843+
844+- (void)dealloc
845+{
846+ if(collection != NULL) { CFRelease(collection); collection = NULL; }
847+ [super dealloc];
848+}
849+
850+- (NSArray *)allObjects
851+{
852+ NSParameterAssert(collection != NULL);
853+ NSUInteger count = [(NSDictionary *)collection count], atObject = 0UL;
854+ id objects[count];
855+
856+ while((objects[atObject] = [self nextObject]) != NULL) { NSParameterAssert(atObject < count); atObject++; }
857+
858+ return([NSArray arrayWithObjects:objects count:atObject]);
859+}
860+
861+- (id)nextObject
862+{
863+ NSParameterAssert((collection != NULL) && (_JKDictionaryHashEntry(collection) != NULL));
864+ JKHashTableEntry *entry = _JKDictionaryHashEntry(collection);
865+ NSUInteger capacity = _JKDictionaryCapacity(collection);
866+ id returnObject = NULL;
867+
868+ if(entry != NULL) { while((nextObject < capacity) && ((returnObject = entry[nextObject++].key) == NULL)) { /* ... */ } }
869+
870+ return(returnObject);
871+}
872+
873+@end
874+
875+#pragma mark -
876+@interface JKDictionary : NSMutableDictionary <NSCopying, NSMutableCopying, NSFastEnumeration> {
877+ NSUInteger count, capacity, mutations;
878+ JKHashTableEntry *entry;
879+}
880+@end
881+
882+@implementation JKDictionary
883+
884++ (id)allocWithZone:(NSZone *)zone
885+{
886+#pragma unused(zone)
887+ [NSException raise:NSInvalidArgumentException format:@"*** - [%@ %@]: The %@ class is private to JSONKit and should not be used in this fashion.", NSStringFromClass([self class]), NSStringFromSelector(_cmd), NSStringFromClass([self class])];
888+ return(NULL);
889+}
890+
891+// These values are taken from Core Foundation CF-550 CFBasicHash.m. As a bonus, they align very well with our JKHashTableEntry struct too.
892+static const NSUInteger jk_dictionaryCapacities[] = {
893+ 0UL, 3UL, 7UL, 13UL, 23UL, 41UL, 71UL, 127UL, 191UL, 251UL, 383UL, 631UL, 1087UL, 1723UL,
894+ 2803UL, 4523UL, 7351UL, 11959UL, 19447UL, 31231UL, 50683UL, 81919UL, 132607UL,
895+ 214519UL, 346607UL, 561109UL, 907759UL, 1468927UL, 2376191UL, 3845119UL,
896+ 6221311UL, 10066421UL, 16287743UL, 26354171UL, 42641881UL, 68996069UL,
897+ 111638519UL, 180634607UL, 292272623UL, 472907251UL
898+};
899+
900+static NSUInteger _JKDictionaryCapacityForCount(NSUInteger count) {
901+ NSUInteger bottom = 0UL, top = sizeof(jk_dictionaryCapacities) / sizeof(NSUInteger), mid = 0UL, tableSize = (NSUInteger)lround(floor(((double)count) * 1.33));
902+ while(top > bottom) { mid = (top + bottom) / 2UL; if(jk_dictionaryCapacities[mid] < tableSize) { bottom = mid + 1UL; } else { top = mid; } }
903+ return(jk_dictionaryCapacities[bottom]);
904+}
905+
906+static void _JKDictionaryResizeIfNeccessary(JKDictionary *dictionary) {
907+ NSCParameterAssert((dictionary != NULL) && (dictionary->entry != NULL) && (dictionary->count <= dictionary->capacity));
908+
909+ NSUInteger capacityForCount = 0UL;
910+ if(dictionary->capacity < (capacityForCount = _JKDictionaryCapacityForCount(dictionary->count + 1UL))) { // resize
911+ NSUInteger oldCapacity = dictionary->capacity;
912+#ifndef NS_BLOCK_ASSERTIONS
913+ NSUInteger oldCount = dictionary->count;
914+#endif
915+ JKHashTableEntry *oldEntry = dictionary->entry;
916+ if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * capacityForCount)) == NULL)) { [NSException raise:NSMallocException format:@"Unable to allocate memory for hash table."]; }
917+ dictionary->capacity = capacityForCount;
918+ dictionary->count = 0UL;
919+
920+ NSUInteger idx = 0UL;
921+ for(idx = 0UL; idx < oldCapacity; idx++) { if(oldEntry[idx].key != NULL) { _JKDictionaryAddObject(dictionary, oldEntry[idx].keyHash, oldEntry[idx].key, oldEntry[idx].object); oldEntry[idx].keyHash = 0UL; oldEntry[idx].key = NULL; oldEntry[idx].object = NULL; } }
922+ NSCParameterAssert((oldCount == dictionary->count));
923+ free(oldEntry); oldEntry = NULL;
924+ }
925+}
926+
927+static JKDictionary *_JKDictionaryCreate(id *keys, NSUInteger *keyHashes, id *objects, NSUInteger count, BOOL mutableCollection) {
928+ NSCParameterAssert((keys != NULL) && (keyHashes != NULL) && (objects != NULL) && (_JKDictionaryClass != NULL) && (_JKDictionaryInstanceSize > 0UL));
929+ JKDictionary *dictionary = NULL;
930+ if(JK_EXPECT_T((dictionary = (JKDictionary *)calloc(1UL, _JKDictionaryInstanceSize)) != NULL)) { // Directly allocate the JKDictionary instance via calloc.
931+ object_setClass(dictionary, _JKDictionaryClass);
932+ if((dictionary = [dictionary init]) == NULL) { return(NULL); }
933+ dictionary->capacity = _JKDictionaryCapacityForCount(count);
934+ dictionary->count = 0UL;
935+
936+ if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { [dictionary autorelease]; return(NULL); }
937+
938+ NSUInteger idx = 0UL;
939+ for(idx = 0UL; idx < count; idx++) { _JKDictionaryAddObject(dictionary, keyHashes[idx], keys[idx], objects[idx]); }
940+
941+ dictionary->mutations = (mutableCollection == NO) ? 0UL : 1UL;
942+ }
943+ return(dictionary);
944+}
945+
946+- (void)dealloc
947+{
948+ if(JK_EXPECT_T(entry != NULL)) {
949+ NSUInteger atEntry = 0UL;
950+ for(atEntry = 0UL; atEntry < capacity; atEntry++) {
951+ if(JK_EXPECT_T(entry[atEntry].key != NULL)) { CFRelease(entry[atEntry].key); entry[atEntry].key = NULL; }
952+ if(JK_EXPECT_T(entry[atEntry].object != NULL)) { CFRelease(entry[atEntry].object); entry[atEntry].object = NULL; }
953+ }
954+
955+ free(entry); entry = NULL;
956+ }
957+
958+ [super dealloc];
959+}
960+
961+static JKHashTableEntry *_JKDictionaryHashEntry(JKDictionary *dictionary) {
962+ NSCParameterAssert(dictionary != NULL);
963+ return(dictionary->entry);
964+}
965+
966+static NSUInteger _JKDictionaryCapacity(JKDictionary *dictionary) {
967+ NSCParameterAssert(dictionary != NULL);
968+ return(dictionary->capacity);
969+}
970+
971+static void _JKDictionaryRemoveObjectWithEntry(JKDictionary *dictionary, JKHashTableEntry *entry) {
972+ NSCParameterAssert((dictionary != NULL) && (entry != NULL) && (entry->key != NULL) && (entry->object != NULL) && (dictionary->count > 0UL) && (dictionary->count <= dictionary->capacity));
973+ CFRelease(entry->key); entry->key = NULL;
974+ CFRelease(entry->object); entry->object = NULL;
975+ entry->keyHash = 0UL;
976+ dictionary->count--;
977+ // In order for certain invariants that are used to speed up the search for a particular key, we need to "re-add" all the entries in the hash table following this entry until we hit a NULL entry.
978+ NSUInteger removeIdx = entry - dictionary->entry, idx = 0UL;
979+ NSCParameterAssert((removeIdx < dictionary->capacity));
980+ for(idx = 0UL; idx < dictionary->capacity; idx++) {
981+ NSUInteger entryIdx = (removeIdx + idx + 1UL) % dictionary->capacity;
982+ JKHashTableEntry *atEntry = &dictionary->entry[entryIdx];
983+ if(atEntry->key == NULL) { break; }
984+ NSUInteger keyHash = atEntry->keyHash;
985+ id key = atEntry->key, object = atEntry->object;
986+ NSCParameterAssert(object != NULL);
987+ atEntry->keyHash = 0UL;
988+ atEntry->key = NULL;
989+ atEntry->object = NULL;
990+ NSUInteger addKeyEntry = keyHash % dictionary->capacity, addIdx = 0UL;
991+ for(addIdx = 0UL; addIdx < dictionary->capacity; addIdx++) {
992+ JKHashTableEntry *atAddEntry = &dictionary->entry[((addKeyEntry + addIdx) % dictionary->capacity)];
993+ if(JK_EXPECT_T(atAddEntry->key == NULL)) { NSCParameterAssert((atAddEntry->keyHash == 0UL) && (atAddEntry->object == NULL)); atAddEntry->key = key; atAddEntry->object = object; atAddEntry->keyHash = keyHash; break; }
994+ }
995+ }
996+}
997+
998+static void _JKDictionaryAddObject(JKDictionary *dictionary, NSUInteger keyHash, id key, id object) {
999+ NSCParameterAssert((dictionary != NULL) && (key != NULL) && (object != NULL) && (dictionary->count < dictionary->capacity) && (dictionary->entry != NULL));
1000+ NSUInteger keyEntry = keyHash % dictionary->capacity, idx = 0UL;
1001+ for(idx = 0UL; idx < dictionary->capacity; idx++) {
1002+ NSUInteger entryIdx = (keyEntry + idx) % dictionary->capacity;
1003+ JKHashTableEntry *atEntry = &dictionary->entry[entryIdx];
1004+ if(JK_EXPECT_F(atEntry->keyHash == keyHash) && JK_EXPECT_T(atEntry->key != NULL) && (JK_EXPECT_F(key == atEntry->key) || JK_EXPECT_F(CFEqual(atEntry->key, key)))) { _JKDictionaryRemoveObjectWithEntry(dictionary, atEntry); }
1005+ if(JK_EXPECT_T(atEntry->key == NULL)) { NSCParameterAssert((atEntry->keyHash == 0UL) && (atEntry->object == NULL)); atEntry->key = key; atEntry->object = object; atEntry->keyHash = keyHash; dictionary->count++; return; }
1006+ }
1007+
1008+ // We should never get here. If we do, we -release the key / object because it's our responsibility.
1009+ CFRelease(key);
1010+ CFRelease(object);
1011+}
1012+
1013+- (NSUInteger)count
1014+{
1015+ return(count);
1016+}
1017+
1018+static JKHashTableEntry *_JKDictionaryHashTableEntryForKey(JKDictionary *dictionary, id aKey) {
1019+ NSCParameterAssert((dictionary != NULL) && (dictionary->entry != NULL) && (dictionary->count <= dictionary->capacity));
1020+ if((aKey == NULL) || (dictionary->capacity == 0UL)) { return(NULL); }
1021+ NSUInteger keyHash = CFHash(aKey), keyEntry = (keyHash % dictionary->capacity), idx = 0UL;
1022+ JKHashTableEntry *atEntry = NULL;
1023+ for(idx = 0UL; idx < dictionary->capacity; idx++) {
1024+ atEntry = &dictionary->entry[(keyEntry + idx) % dictionary->capacity];
1025+ if(JK_EXPECT_T(atEntry->keyHash == keyHash) && JK_EXPECT_T(atEntry->key != NULL) && ((atEntry->key == aKey) || CFEqual(atEntry->key, aKey))) { NSCParameterAssert(atEntry->object != NULL); return(atEntry); break; }
1026+ if(JK_EXPECT_F(atEntry->key == NULL)) { NSCParameterAssert(atEntry->object == NULL); return(NULL); break; } // If the key was in the table, we would have found it by now.
1027+ }
1028+ return(NULL);
1029+}
1030+
1031+- (id)objectForKey:(id)aKey
1032+{
1033+ NSParameterAssert((entry != NULL) && (count <= capacity));
1034+ JKHashTableEntry *entryForKey = _JKDictionaryHashTableEntryForKey(self, aKey);
1035+ return((entryForKey != NULL) ? entryForKey->object : NULL);
1036+}
1037+
1038+- (void)getObjects:(id *)objects andKeys:(id *)keys
1039+{
1040+ NSParameterAssert((entry != NULL) && (count <= capacity));
1041+ NSUInteger atEntry = 0UL; NSUInteger arrayIdx = 0UL;
1042+ for(atEntry = 0UL; atEntry < capacity; atEntry++) {
1043+ if(JK_EXPECT_T(entry[atEntry].key != NULL)) {
1044+ NSCParameterAssert((entry[atEntry].object != NULL) && (arrayIdx < count));
1045+ if(JK_EXPECT_T(keys != NULL)) { keys[arrayIdx] = entry[atEntry].key; }
1046+ if(JK_EXPECT_T(objects != NULL)) { objects[arrayIdx] = entry[atEntry].object; }
1047+ arrayIdx++;
1048+ }
1049+ }
1050+}
1051+
1052+- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
1053+{
1054+ NSParameterAssert((state != NULL) && (stackbuf != NULL) && (len > 0UL) && (entry != NULL) && (count <= capacity));
1055+ if(JK_EXPECT_F(state->state == 0UL)) { state->mutationsPtr = (unsigned long *)&mutations; state->itemsPtr = stackbuf; }
1056+ if(JK_EXPECT_F(state->state >= capacity)) { return(0UL); }
1057+
1058+ NSUInteger enumeratedCount = 0UL;
1059+ while(JK_EXPECT_T(enumeratedCount < len) && JK_EXPECT_T(state->state < capacity)) { if(JK_EXPECT_T(entry[state->state].key != NULL)) { stackbuf[enumeratedCount++] = entry[state->state].key; } state->state++; }
1060+
1061+ return(enumeratedCount);
1062+}
1063+
1064+- (NSEnumerator *)keyEnumerator
1065+{
1066+ return([[[JKDictionaryEnumerator alloc] initWithJKDictionary:self] autorelease]);
1067+}
1068+
1069+- (void)setObject:(id)anObject forKey:(id)aKey
1070+{
1071+ if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
1072+ if(aKey == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil key", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
1073+ if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil value (key: %@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), aKey]; }
1074+
1075+ _JKDictionaryResizeIfNeccessary(self);
1076+#ifndef __clang_analyzer__
1077+ aKey = [aKey copy]; // Why on earth would clang complain that this -copy "might leak",
1078+ anObject = [anObject retain]; // but this -retain doesn't!?
1079+#endif // __clang_analyzer__
1080+ _JKDictionaryAddObject(self, CFHash(aKey), aKey, anObject);
1081+ mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL;
1082+}
1083+
1084+- (void)removeObjectForKey:(id)aKey
1085+{
1086+ if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
1087+ if(aKey == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to remove nil key", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; }
1088+ JKHashTableEntry *entryForKey = _JKDictionaryHashTableEntryForKey(self, aKey);
1089+ if(entryForKey != NULL) {
1090+ _JKDictionaryRemoveObjectWithEntry(self, entryForKey);
1091+ mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL;
1092+ }
1093+}
1094+
1095+- (id)copyWithZone:(NSZone *)zone
1096+{
1097+ NSParameterAssert((entry != NULL) && (count <= capacity));
1098+ return((mutations == 0UL) ? [self retain] : [[NSDictionary allocWithZone:zone] initWithDictionary:self]);
1099+}
1100+
1101+- (id)mutableCopyWithZone:(NSZone *)zone
1102+{
1103+ NSParameterAssert((entry != NULL) && (count <= capacity));
1104+ return([[NSMutableDictionary allocWithZone:zone] initWithDictionary:self]);
1105+}
1106+
1107+@end
1108+
1109+
1110+
1111+#pragma mark -
1112+
1113+JK_STATIC_INLINE size_t jk_min(size_t a, size_t b) { return((a < b) ? a : b); }
1114+JK_STATIC_INLINE size_t jk_max(size_t a, size_t b) { return((a > b) ? a : b); }
1115+
1116+JK_STATIC_INLINE JKHash jk_calculateHash(JKHash currentHash, unsigned char c) { return((((currentHash << 5) + currentHash) + (c - 29)) ^ (currentHash >> 19)); }
1117+
1118+
1119+static void jk_error(JKParseState *parseState, NSString *format, ...) {
1120+ NSCParameterAssert((parseState != NULL) && (format != NULL));
1121+
1122+ va_list varArgsList;
1123+ va_start(varArgsList, format);
1124+ NSString *formatString = [[[NSString alloc] initWithFormat:format arguments:varArgsList] autorelease];
1125+ va_end(varArgsList);
1126+
1127+#if 0
1128+ const unsigned char *lineStart = parseState->stringBuffer.bytes.ptr + parseState->lineStartIndex;
1129+ const unsigned char *lineEnd = lineStart;
1130+ const unsigned char *atCharacterPtr = NULL;
1131+
1132+ for(atCharacterPtr = lineStart; atCharacterPtr < JK_END_STRING_PTR(parseState); atCharacterPtr++) { lineEnd = atCharacterPtr; if(jk_parse_is_newline(parseState, atCharacterPtr)) { break; } }
1133+
1134+ NSString *lineString = @"", *carretString = @"";
1135+ if(lineStart < JK_END_STRING_PTR(parseState)) {
1136+ lineString = [[[NSString alloc] initWithBytes:lineStart length:(lineEnd - lineStart) encoding:NSUTF8StringEncoding] autorelease];
1137+ carretString = [NSString stringWithFormat:@"%*.*s^", (int)(parseState->atIndex - parseState->lineStartIndex), (int)(parseState->atIndex - parseState->lineStartIndex), " "];
1138+ }
1139+#endif
1140+
1141+ if(parseState->error == NULL) {
1142+ parseState->error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo:
1143+ [NSDictionary dictionaryWithObjectsAndKeys:
1144+ formatString, NSLocalizedDescriptionKey,
1145+ [NSNumber numberWithUnsignedLong:parseState->atIndex], @"JKAtIndexKey",
1146+ [NSNumber numberWithUnsignedLong:parseState->lineNumber], @"JKLineNumberKey",
1147+ //lineString, @"JKErrorLine0Key",
1148+ //carretString, @"JKErrorLine1Key",
1149+ NULL]];
1150+ }
1151+}
1152+
1153+#pragma mark -
1154+#pragma mark Buffer and Object Stack management functions
1155+
1156+static void jk_managedBuffer_release(JKManagedBuffer *managedBuffer) {
1157+ if((managedBuffer->flags & JKManagedBufferMustFree)) {
1158+ if(managedBuffer->bytes.ptr != NULL) { free(managedBuffer->bytes.ptr); managedBuffer->bytes.ptr = NULL; }
1159+ managedBuffer->flags &= ~JKManagedBufferMustFree;
1160+ }
1161+
1162+ managedBuffer->bytes.ptr = NULL;
1163+ managedBuffer->bytes.length = 0UL;
1164+ managedBuffer->flags &= ~JKManagedBufferLocationMask;
1165+}
1166+
1167+static void jk_managedBuffer_setToStackBuffer(JKManagedBuffer *managedBuffer, unsigned char *ptr, size_t length) {
1168+ jk_managedBuffer_release(managedBuffer);
1169+ managedBuffer->bytes.ptr = ptr;
1170+ managedBuffer->bytes.length = length;
1171+ managedBuffer->flags = (managedBuffer->flags & ~JKManagedBufferLocationMask) | JKManagedBufferOnStack;
1172+}
1173+
1174+static unsigned char *jk_managedBuffer_resize(JKManagedBuffer *managedBuffer, size_t newSize) {
1175+ size_t roundedUpNewSize = newSize;
1176+
1177+ if(managedBuffer->roundSizeUpToMultipleOf > 0UL) { roundedUpNewSize = newSize + ((managedBuffer->roundSizeUpToMultipleOf - (newSize % managedBuffer->roundSizeUpToMultipleOf)) % managedBuffer->roundSizeUpToMultipleOf); }
1178+
1179+ if((roundedUpNewSize != managedBuffer->bytes.length) && (roundedUpNewSize > managedBuffer->bytes.length)) {
1180+ if((managedBuffer->flags & JKManagedBufferLocationMask) == JKManagedBufferOnStack) {
1181+ NSCParameterAssert((managedBuffer->flags & JKManagedBufferMustFree) == 0);
1182+ unsigned char *newBuffer = NULL, *oldBuffer = managedBuffer->bytes.ptr;
1183+
1184+ if((newBuffer = (unsigned char *)malloc(roundedUpNewSize)) == NULL) { return(NULL); }
1185+ memcpy(newBuffer, oldBuffer, jk_min(managedBuffer->bytes.length, roundedUpNewSize));
1186+ managedBuffer->flags = (managedBuffer->flags & ~JKManagedBufferLocationMask) | (JKManagedBufferOnHeap | JKManagedBufferMustFree);
1187+ managedBuffer->bytes.ptr = newBuffer;
1188+ managedBuffer->bytes.length = roundedUpNewSize;
1189+ } else {
1190+ NSCParameterAssert(((managedBuffer->flags & JKManagedBufferMustFree) != 0) && ((managedBuffer->flags & JKManagedBufferLocationMask) == JKManagedBufferOnHeap));
1191+ if((managedBuffer->bytes.ptr = (unsigned char *)reallocf(managedBuffer->bytes.ptr, roundedUpNewSize)) == NULL) { return(NULL); }
1192+ managedBuffer->bytes.length = roundedUpNewSize;
1193+ }
1194+ }
1195+
1196+ return(managedBuffer->bytes.ptr);
1197+}
1198+
1199+
1200+
1201+static void jk_objectStack_release(JKObjectStack *objectStack) {
1202+ NSCParameterAssert(objectStack != NULL);
1203+
1204+ NSCParameterAssert(objectStack->index <= objectStack->count);
1205+ size_t atIndex = 0UL;
1206+ for(atIndex = 0UL; atIndex < objectStack->index; atIndex++) {
1207+ if(objectStack->objects[atIndex] != NULL) { CFRelease(objectStack->objects[atIndex]); objectStack->objects[atIndex] = NULL; }
1208+ if(objectStack->keys[atIndex] != NULL) { CFRelease(objectStack->keys[atIndex]); objectStack->keys[atIndex] = NULL; }
1209+ }
1210+ objectStack->index = 0UL;
1211+
1212+ if(objectStack->flags & JKObjectStackMustFree) {
1213+ NSCParameterAssert((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnHeap);
1214+ if(objectStack->objects != NULL) { free(objectStack->objects); objectStack->objects = NULL; }
1215+ if(objectStack->keys != NULL) { free(objectStack->keys); objectStack->keys = NULL; }
1216+ if(objectStack->cfHashes != NULL) { free(objectStack->cfHashes); objectStack->cfHashes = NULL; }
1217+ objectStack->flags &= ~JKObjectStackMustFree;
1218+ }
1219+
1220+ objectStack->objects = NULL;
1221+ objectStack->keys = NULL;
1222+ objectStack->cfHashes = NULL;
1223+
1224+ objectStack->count = 0UL;
1225+ objectStack->flags &= ~JKObjectStackLocationMask;
1226+}
1227+
1228+static void jk_objectStack_setToStackBuffer(JKObjectStack *objectStack, void **objects, void **keys, CFHashCode *cfHashes, size_t count) {
1229+ NSCParameterAssert((objectStack != NULL) && (objects != NULL) && (keys != NULL) && (cfHashes != NULL) && (count > 0UL));
1230+ jk_objectStack_release(objectStack);
1231+ objectStack->objects = objects;
1232+ objectStack->keys = keys;
1233+ objectStack->cfHashes = cfHashes;
1234+ objectStack->count = count;
1235+ objectStack->flags = (objectStack->flags & ~JKObjectStackLocationMask) | JKObjectStackOnStack;
1236+#ifndef NS_BLOCK_ASSERTIONS
1237+ size_t idx;
1238+ for(idx = 0UL; idx < objectStack->count; idx++) { objectStack->objects[idx] = NULL; objectStack->keys[idx] = NULL; objectStack->cfHashes[idx] = 0UL; }
1239+#endif
1240+}
1241+
1242+static int jk_objectStack_resize(JKObjectStack *objectStack, size_t newCount) {
1243+ size_t roundedUpNewCount = newCount;
1244+ int returnCode = 0;
1245+
1246+ void **newObjects = NULL, **newKeys = NULL;
1247+ CFHashCode *newCFHashes = NULL;
1248+
1249+ if(objectStack->roundSizeUpToMultipleOf > 0UL) { roundedUpNewCount = newCount + ((objectStack->roundSizeUpToMultipleOf - (newCount % objectStack->roundSizeUpToMultipleOf)) % objectStack->roundSizeUpToMultipleOf); }
1250+
1251+ if((roundedUpNewCount != objectStack->count) && (roundedUpNewCount > objectStack->count)) {
1252+ if((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnStack) {
1253+ NSCParameterAssert((objectStack->flags & JKObjectStackMustFree) == 0);
1254+
1255+ if((newObjects = (void ** )calloc(1UL, roundedUpNewCount * sizeof(void * ))) == NULL) { returnCode = 1; goto errorExit; }
1256+ memcpy(newObjects, objectStack->objects, jk_min(objectStack->count, roundedUpNewCount) * sizeof(void *));
1257+ if((newKeys = (void ** )calloc(1UL, roundedUpNewCount * sizeof(void * ))) == NULL) { returnCode = 1; goto errorExit; }
1258+ memcpy(newKeys, objectStack->keys, jk_min(objectStack->count, roundedUpNewCount) * sizeof(void *));
1259+
1260+ if((newCFHashes = (CFHashCode *)calloc(1UL, roundedUpNewCount * sizeof(CFHashCode))) == NULL) { returnCode = 1; goto errorExit; }
1261+ memcpy(newCFHashes, objectStack->cfHashes, jk_min(objectStack->count, roundedUpNewCount) * sizeof(CFHashCode));
1262+
1263+ objectStack->flags = (objectStack->flags & ~JKObjectStackLocationMask) | (JKObjectStackOnHeap | JKObjectStackMustFree);
1264+ objectStack->objects = newObjects; newObjects = NULL;
1265+ objectStack->keys = newKeys; newKeys = NULL;
1266+ objectStack->cfHashes = newCFHashes; newCFHashes = NULL;
1267+ objectStack->count = roundedUpNewCount;
1268+ } else {
1269+ NSCParameterAssert(((objectStack->flags & JKObjectStackMustFree) != 0) && ((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnHeap));
1270+ if((newObjects = (void ** )realloc(objectStack->objects, roundedUpNewCount * sizeof(void * ))) != NULL) { objectStack->objects = newObjects; newObjects = NULL; } else { returnCode = 1; goto errorExit; }
1271+ if((newKeys = (void ** )realloc(objectStack->keys, roundedUpNewCount * sizeof(void * ))) != NULL) { objectStack->keys = newKeys; newKeys = NULL; } else { returnCode = 1; goto errorExit; }
1272+ if((newCFHashes = (CFHashCode *)realloc(objectStack->cfHashes, roundedUpNewCount * sizeof(CFHashCode))) != NULL) { objectStack->cfHashes = newCFHashes; newCFHashes = NULL; } else { returnCode = 1; goto errorExit; }
1273+
1274+#ifndef NS_BLOCK_ASSERTIONS
1275+ size_t idx;
1276+ for(idx = objectStack->count; idx < roundedUpNewCount; idx++) { objectStack->objects[idx] = NULL; objectStack->keys[idx] = NULL; objectStack->cfHashes[idx] = 0UL; }
1277+#endif
1278+ objectStack->count = roundedUpNewCount;
1279+ }
1280+ }
1281+
1282+ errorExit:
1283+ if(newObjects != NULL) { free(newObjects); newObjects = NULL; }
1284+ if(newKeys != NULL) { free(newKeys); newKeys = NULL; }
1285+ if(newCFHashes != NULL) { free(newCFHashes); newCFHashes = NULL; }
1286+
1287+ return(returnCode);
1288+}
1289+
1290+////////////
1291+#pragma mark -
1292+#pragma mark Unicode related functions
1293+
1294+JK_STATIC_INLINE ConversionResult isValidCodePoint(UTF32 *u32CodePoint) {
1295+ ConversionResult result = conversionOK;
1296+ UTF32 ch = *u32CodePoint;
1297+
1298+ if(JK_EXPECT_F(ch >= UNI_SUR_HIGH_START) && (JK_EXPECT_T(ch <= UNI_SUR_LOW_END))) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; }
1299+ if(JK_EXPECT_F(ch >= 0xFDD0U) && (JK_EXPECT_F(ch <= 0xFDEFU) || JK_EXPECT_F((ch & 0xFFFEU) == 0xFFFEU)) && JK_EXPECT_T(ch <= 0x10FFFFU)) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; }
1300+ if(JK_EXPECT_F(ch == 0U)) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; }
1301+
1302+ finished:
1303+ *u32CodePoint = ch;
1304+ return(result);
1305+}
1306+
1307+
1308+static int isLegalUTF8(const UTF8 *source, size_t length) {
1309+ const UTF8 *srcptr = source + length;
1310+ UTF8 a;
1311+
1312+ switch(length) {
1313+ default: return(0); // Everything else falls through when "true"...
1314+ case 4: if(JK_EXPECT_F(((a = (*--srcptr)) < 0x80) || (a > 0xBF))) { return(0); }
1315+ case 3: if(JK_EXPECT_F(((a = (*--srcptr)) < 0x80) || (a > 0xBF))) { return(0); }
1316+ case 2: if(JK_EXPECT_F( (a = (*--srcptr)) > 0xBF )) { return(0); }
1317+
1318+ switch(*source) { // no fall-through in this inner switch
1319+ case 0xE0: if(JK_EXPECT_F(a < 0xA0)) { return(0); } break;
1320+ case 0xED: if(JK_EXPECT_F(a > 0x9F)) { return(0); } break;
1321+ case 0xF0: if(JK_EXPECT_F(a < 0x90)) { return(0); } break;
1322+ case 0xF4: if(JK_EXPECT_F(a > 0x8F)) { return(0); } break;
1323+ default: if(JK_EXPECT_F(a < 0x80)) { return(0); }
1324+ }
1325+
1326+ case 1: if(JK_EXPECT_F((JK_EXPECT_T(*source < 0xC2)) && JK_EXPECT_F(*source >= 0x80))) { return(0); }
1327+ }
1328+
1329+ if(JK_EXPECT_F(*source > 0xF4)) { return(0); }
1330+
1331+ return(1);
1332+}
1333+
1334+static ConversionResult ConvertSingleCodePointInUTF8(const UTF8 *sourceStart, const UTF8 *sourceEnd, UTF8 const **nextUTF8, UTF32 *convertedUTF32) {
1335+ ConversionResult result = conversionOK;
1336+ const UTF8 *source = sourceStart;
1337+ UTF32 ch = 0UL;
1338+
1339+#if !defined(JK_FAST_TRAILING_BYTES)
1340+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
1341+#else
1342+ unsigned short extraBytesToRead = __builtin_clz(((*source)^0xff) << 25);
1343+#endif
1344+
1345+ if(JK_EXPECT_F((source + extraBytesToRead + 1) > sourceEnd) || JK_EXPECT_F(!isLegalUTF8(source, extraBytesToRead + 1))) {
1346+ source++;
1347+ while((source < sourceEnd) && (((*source) & 0xc0) == 0x80) && ((source - sourceStart) < (extraBytesToRead + 1))) { source++; }
1348+ NSCParameterAssert(source <= sourceEnd);
1349+ result = ((source < sourceEnd) && (((*source) & 0xc0) != 0x80)) ? sourceIllegal : ((sourceStart + extraBytesToRead + 1) > sourceEnd) ? sourceExhausted : sourceIllegal;
1350+ ch = UNI_REPLACEMENT_CHAR;
1351+ goto finished;
1352+ }
1353+
1354+ switch(extraBytesToRead) { // The cases all fall through.
1355+ case 5: ch += *source++; ch <<= 6;
1356+ case 4: ch += *source++; ch <<= 6;
1357+ case 3: ch += *source++; ch <<= 6;
1358+ case 2: ch += *source++; ch <<= 6;
1359+ case 1: ch += *source++; ch <<= 6;
1360+ case 0: ch += *source++;
1361+ }
1362+ ch -= offsetsFromUTF8[extraBytesToRead];
1363+
1364+ result = isValidCodePoint(&ch);
1365+
1366+ finished:
1367+ *nextUTF8 = source;
1368+ *convertedUTF32 = ch;
1369+
1370+ return(result);
1371+}
1372+
1373+
1374+static ConversionResult ConvertUTF32toUTF8 (UTF32 u32CodePoint, UTF8 **targetStart, UTF8 *targetEnd) {
1375+ const UTF32 byteMask = 0xBF, byteMark = 0x80;
1376+ ConversionResult result = conversionOK;
1377+ UTF8 *target = *targetStart;
1378+ UTF32 ch = u32CodePoint;
1379+ unsigned short bytesToWrite = 0;
1380+
1381+ result = isValidCodePoint(&ch);
1382+
1383+ // Figure out how many bytes the result will require. Turn any illegally large UTF32 things (> Plane 17) into replacement chars.
1384+ if(ch < (UTF32)0x80) { bytesToWrite = 1; }
1385+ else if(ch < (UTF32)0x800) { bytesToWrite = 2; }
1386+ else if(ch < (UTF32)0x10000) { bytesToWrite = 3; }
1387+ else if(ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; }
1388+ else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; result = sourceIllegal; }
1389+
1390+ target += bytesToWrite;
1391+ if (target > targetEnd) { target -= bytesToWrite; result = targetExhausted; goto finished; }
1392+
1393+ switch (bytesToWrite) { // note: everything falls through.
1394+ case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
1395+ case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
1396+ case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
1397+ case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]);
1398+ }
1399+
1400+ target += bytesToWrite;
1401+
1402+ finished:
1403+ *targetStart = target;
1404+ return(result);
1405+}
1406+
1407+JK_STATIC_INLINE int jk_string_add_unicodeCodePoint(JKParseState *parseState, uint32_t unicodeCodePoint, size_t *tokenBufferIdx, JKHash *stringHash) {
1408+ UTF8 *u8s = &parseState->token.tokenBuffer.bytes.ptr[*tokenBufferIdx];
1409+ ConversionResult result;
1410+
1411+ if((result = ConvertUTF32toUTF8(unicodeCodePoint, &u8s, (parseState->token.tokenBuffer.bytes.ptr + parseState->token.tokenBuffer.bytes.length))) != conversionOK) { if(result == targetExhausted) { return(1); } }
1412+ size_t utf8len = u8s - &parseState->token.tokenBuffer.bytes.ptr[*tokenBufferIdx], nextIdx = (*tokenBufferIdx) + utf8len;
1413+
1414+ while(*tokenBufferIdx < nextIdx) { *stringHash = jk_calculateHash(*stringHash, parseState->token.tokenBuffer.bytes.ptr[(*tokenBufferIdx)++]); }
1415+
1416+ return(0);
1417+}
1418+
1419+////////////
1420+#pragma mark -
1421+#pragma mark Decoding / parsing / deserializing functions
1422+
1423+static int jk_parse_string(JKParseState *parseState) {
1424+ NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)));
1425+ const unsigned char *stringStart = JK_AT_STRING_PTR(parseState) + 1;
1426+ const unsigned char *endOfBuffer = JK_END_STRING_PTR(parseState);
1427+ const unsigned char *atStringCharacter = stringStart;
1428+ unsigned char *tokenBuffer = parseState->token.tokenBuffer.bytes.ptr;
1429+ size_t tokenStartIndex = parseState->atIndex;
1430+ size_t tokenBufferIdx = 0UL;
1431+
1432+ int onlySimpleString = 1, stringState = JSONStringStateStart;
1433+ uint16_t escapedUnicode1 = 0U, escapedUnicode2 = 0U;
1434+ uint32_t escapedUnicodeCodePoint = 0U;
1435+ JKHash stringHash = JK_HASH_INIT;
1436+
1437+ while(1) {
1438+ unsigned long currentChar;
1439+
1440+ if(JK_EXPECT_F(atStringCharacter == endOfBuffer)) { /* XXX Add error message */ stringState = JSONStringStateError; goto finishedParsing; }
1441+
1442+ if(JK_EXPECT_F((currentChar = *atStringCharacter++) >= 0x80UL)) {
1443+ const unsigned char *nextValidCharacter = NULL;
1444+ UTF32 u32ch = 0U;
1445+ ConversionResult result;
1446+
1447+ if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(atStringCharacter - 1, endOfBuffer, (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) { goto switchToSlowPath; }
1448+ stringHash = jk_calculateHash(stringHash, currentChar);
1449+ while(atStringCharacter < nextValidCharacter) { NSCParameterAssert(JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)); stringHash = jk_calculateHash(stringHash, *atStringCharacter++); }
1450+ continue;
1451+ } else {
1452+ if(JK_EXPECT_F(currentChar == (unsigned long)'"')) { stringState = JSONStringStateFinished; goto finishedParsing; }
1453+
1454+ if(JK_EXPECT_F(currentChar == (unsigned long)'\\')) {
1455+ switchToSlowPath:
1456+ onlySimpleString = 0;
1457+ stringState = JSONStringStateParsing;
1458+ tokenBufferIdx = (atStringCharacter - stringStart) - 1L;
1459+ if(JK_EXPECT_F((tokenBufferIdx + 16UL) > parseState->token.tokenBuffer.bytes.length)) { if((tokenBuffer = jk_managedBuffer_resize(&parseState->token.tokenBuffer, tokenBufferIdx + 1024UL)) == NULL) { jk_error(parseState, @"Internal error: Unable to resize temporary buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } }
1460+ memcpy(tokenBuffer, stringStart, tokenBufferIdx);
1461+ goto slowMatch;
1462+ }
1463+
1464+ if(JK_EXPECT_F(currentChar < 0x20UL)) { jk_error(parseState, @"Invalid character < 0x20 found in string: 0x%2.2x.", currentChar); stringState = JSONStringStateError; goto finishedParsing; }
1465+
1466+ stringHash = jk_calculateHash(stringHash, currentChar);
1467+ }
1468+ }
1469+
1470+ slowMatch:
1471+
1472+ for(atStringCharacter = (stringStart + ((atStringCharacter - stringStart) - 1L)); (atStringCharacter < endOfBuffer) && (tokenBufferIdx < parseState->token.tokenBuffer.bytes.length); atStringCharacter++) {
1473+ if((tokenBufferIdx + 16UL) > parseState->token.tokenBuffer.bytes.length) { if((tokenBuffer = jk_managedBuffer_resize(&parseState->token.tokenBuffer, tokenBufferIdx + 1024UL)) == NULL) { jk_error(parseState, @"Internal error: Unable to resize temporary buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } }
1474+
1475+ NSCParameterAssert(tokenBufferIdx < parseState->token.tokenBuffer.bytes.length);
1476+
1477+ unsigned long currentChar = (*atStringCharacter), escapedChar;
1478+
1479+ if(JK_EXPECT_T(stringState == JSONStringStateParsing)) {
1480+ if(JK_EXPECT_T(currentChar >= 0x20UL)) {
1481+ if(JK_EXPECT_T(currentChar < (unsigned long)0x80)) { // Not a UTF8 sequence
1482+ if(JK_EXPECT_F(currentChar == (unsigned long)'"')) { stringState = JSONStringStateFinished; atStringCharacter++; goto finishedParsing; }
1483+ if(JK_EXPECT_F(currentChar == (unsigned long)'\\')) { stringState = JSONStringStateEscape; continue; }
1484+ stringHash = jk_calculateHash(stringHash, currentChar);
1485+ tokenBuffer[tokenBufferIdx++] = currentChar;
1486+ continue;
1487+ } else { // UTF8 sequence
1488+ const unsigned char *nextValidCharacter = NULL;
1489+ UTF32 u32ch = 0U;
1490+ ConversionResult result;
1491+
1492+ if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(atStringCharacter, endOfBuffer, (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) {
1493+ if((result == sourceIllegal) && ((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0)) { jk_error(parseState, @"Illegal UTF8 sequence found in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; }
1494+ if(result == sourceExhausted) { jk_error(parseState, @"End of buffer reached while parsing UTF8 in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; }
1495+ if(jk_string_add_unicodeCodePoint(parseState, u32ch, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; }
1496+ atStringCharacter = nextValidCharacter - 1;
1497+ continue;
1498+ } else {
1499+ while(atStringCharacter < nextValidCharacter) { tokenBuffer[tokenBufferIdx++] = *atStringCharacter; stringHash = jk_calculateHash(stringHash, *atStringCharacter++); }
1500+ atStringCharacter--;
1501+ continue;
1502+ }
1503+ }
1504+ } else { // currentChar < 0x20
1505+ jk_error(parseState, @"Invalid character < 0x20 found in string: 0x%2.2x.", currentChar); stringState = JSONStringStateError; goto finishedParsing;
1506+ }
1507+
1508+ } else { // stringState != JSONStringStateParsing
1509+ int isSurrogate = 1;
1510+
1511+ switch(stringState) {
1512+ case JSONStringStateEscape:
1513+ switch(currentChar) {
1514+ case 'u': escapedUnicode1 = 0U; escapedUnicode2 = 0U; escapedUnicodeCodePoint = 0U; stringState = JSONStringStateEscapedUnicode1; break;
1515+
1516+ case 'b': escapedChar = '\b'; goto parsedEscapedChar;
1517+ case 'f': escapedChar = '\f'; goto parsedEscapedChar;
1518+ case 'n': escapedChar = '\n'; goto parsedEscapedChar;
1519+ case 'r': escapedChar = '\r'; goto parsedEscapedChar;
1520+ case 't': escapedChar = '\t'; goto parsedEscapedChar;
1521+ case '\\': escapedChar = '\\'; goto parsedEscapedChar;
1522+ case '/': escapedChar = '/'; goto parsedEscapedChar;
1523+ case '"': escapedChar = '"'; goto parsedEscapedChar;
1524+
1525+ parsedEscapedChar:
1526+ stringState = JSONStringStateParsing;
1527+ stringHash = jk_calculateHash(stringHash, escapedChar);
1528+ tokenBuffer[tokenBufferIdx++] = escapedChar;
1529+ break;
1530+
1531+ default: jk_error(parseState, @"Invalid escape sequence found in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; break;
1532+ }
1533+ break;
1534+
1535+ case JSONStringStateEscapedUnicode1:
1536+ case JSONStringStateEscapedUnicode2:
1537+ case JSONStringStateEscapedUnicode3:
1538+ case JSONStringStateEscapedUnicode4: isSurrogate = 0;
1539+ case JSONStringStateEscapedUnicodeSurrogate1:
1540+ case JSONStringStateEscapedUnicodeSurrogate2:
1541+ case JSONStringStateEscapedUnicodeSurrogate3:
1542+ case JSONStringStateEscapedUnicodeSurrogate4:
1543+ {
1544+ uint16_t hexValue = 0U;
1545+
1546+ switch(currentChar) {
1547+ case '0' ... '9': hexValue = currentChar - '0'; goto parsedHex;
1548+ case 'a' ... 'f': hexValue = (currentChar - 'a') + 10U; goto parsedHex;
1549+ case 'A' ... 'F': hexValue = (currentChar - 'A') + 10U; goto parsedHex;
1550+
1551+ parsedHex:
1552+ if(!isSurrogate) { escapedUnicode1 = (escapedUnicode1 << 4) | hexValue; } else { escapedUnicode2 = (escapedUnicode2 << 4) | hexValue; }
1553+
1554+ if(stringState == JSONStringStateEscapedUnicode4) {
1555+ if(((escapedUnicode1 >= 0xD800U) && (escapedUnicode1 < 0xE000U))) {
1556+ if((escapedUnicode1 >= 0xD800U) && (escapedUnicode1 < 0xDC00U)) { stringState = JSONStringStateEscapedNeedEscapeForSurrogate; }
1557+ else if((escapedUnicode1 >= 0xDC00U) && (escapedUnicode1 < 0xE000U)) {
1558+ if((parseState->parseOptionFlags & JKParseOptionLooseUnicode)) { escapedUnicodeCodePoint = UNI_REPLACEMENT_CHAR; }
1559+ else { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; }
1560+ }
1561+ }
1562+ else { escapedUnicodeCodePoint = escapedUnicode1; }
1563+ }
1564+
1565+ if(stringState == JSONStringStateEscapedUnicodeSurrogate4) {
1566+ if((escapedUnicode2 < 0xdc00) || (escapedUnicode2 > 0xdfff)) {
1567+ if((parseState->parseOptionFlags & JKParseOptionLooseUnicode)) { escapedUnicodeCodePoint = UNI_REPLACEMENT_CHAR; }
1568+ else { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; }
1569+ }
1570+ else { escapedUnicodeCodePoint = ((escapedUnicode1 - 0xd800) * 0x400) + (escapedUnicode2 - 0xdc00) + 0x10000; }
1571+ }
1572+
1573+ if((stringState == JSONStringStateEscapedUnicode4) || (stringState == JSONStringStateEscapedUnicodeSurrogate4)) {
1574+ if((isValidCodePoint(&escapedUnicodeCodePoint) == sourceIllegal) && ((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0)) { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; }
1575+ stringState = JSONStringStateParsing;
1576+ if(jk_string_add_unicodeCodePoint(parseState, escapedUnicodeCodePoint, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; }
1577+ }
1578+ else if((stringState >= JSONStringStateEscapedUnicode1) && (stringState <= JSONStringStateEscapedUnicodeSurrogate4)) { stringState++; }
1579+ break;
1580+
1581+ default: jk_error(parseState, @"Unexpected character found in \\u Unicode escape sequence. Found '%c', expected [0-9a-fA-F].", currentChar); stringState = JSONStringStateError; goto finishedParsing; break;
1582+ }
1583+ }
1584+ break;
1585+
1586+ case JSONStringStateEscapedNeedEscapeForSurrogate:
1587+ if(currentChar == '\\') { stringState = JSONStringStateEscapedNeedEscapedUForSurrogate; }
1588+ else {
1589+ if((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0) { jk_error(parseState, @"Required a second \\u Unicode escape sequence following a surrogate \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; }
1590+ else { stringState = JSONStringStateParsing; atStringCharacter--; if(jk_string_add_unicodeCodePoint(parseState, UNI_REPLACEMENT_CHAR, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } }
1591+ }
1592+ break;
1593+
1594+ case JSONStringStateEscapedNeedEscapedUForSurrogate:
1595+ if(currentChar == 'u') { stringState = JSONStringStateEscapedUnicodeSurrogate1; }
1596+ else {
1597+ if((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0) { jk_error(parseState, @"Required a second \\u Unicode escape sequence following a surrogate \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; }
1598+ else { stringState = JSONStringStateParsing; atStringCharacter -= 2; if(jk_string_add_unicodeCodePoint(parseState, UNI_REPLACEMENT_CHAR, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } }
1599+ }
1600+ break;
1601+
1602+ default: jk_error(parseState, @"Internal error: Unknown stringState. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; break;
1603+ }
1604+ }
1605+ }
1606+
1607+finishedParsing:
1608+
1609+ if(JK_EXPECT_T(stringState == JSONStringStateFinished)) {
1610+ NSCParameterAssert((parseState->stringBuffer.bytes.ptr + tokenStartIndex) < atStringCharacter);
1611+
1612+ parseState->token.tokenPtrRange.ptr = parseState->stringBuffer.bytes.ptr + tokenStartIndex;
1613+ parseState->token.tokenPtrRange.length = (atStringCharacter - parseState->token.tokenPtrRange.ptr);
1614+
1615+ if(JK_EXPECT_T(onlySimpleString)) {
1616+ NSCParameterAssert(((parseState->token.tokenPtrRange.ptr + 1) < endOfBuffer) && (parseState->token.tokenPtrRange.length >= 2UL) && (((parseState->token.tokenPtrRange.ptr + 1) + (parseState->token.tokenPtrRange.length - 2)) < endOfBuffer));
1617+ parseState->token.value.ptrRange.ptr = parseState->token.tokenPtrRange.ptr + 1;
1618+ parseState->token.value.ptrRange.length = parseState->token.tokenPtrRange.length - 2UL;
1619+ } else {
1620+ parseState->token.value.ptrRange.ptr = parseState->token.tokenBuffer.bytes.ptr;
1621+ parseState->token.value.ptrRange.length = tokenBufferIdx;
1622+ }
1623+
1624+ parseState->token.value.hash = stringHash;
1625+ parseState->token.value.type = JKValueTypeString;
1626+ parseState->atIndex = (atStringCharacter - parseState->stringBuffer.bytes.ptr);
1627+ }
1628+
1629+ if(JK_EXPECT_F(stringState != JSONStringStateFinished)) { jk_error(parseState, @"Invalid string."); }
1630+ return(JK_EXPECT_T(stringState == JSONStringStateFinished) ? 0 : 1);
1631+}
1632+
1633+static int jk_parse_number(JKParseState *parseState) {
1634+ NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)));
1635+ const unsigned char *numberStart = JK_AT_STRING_PTR(parseState);
1636+ const unsigned char *endOfBuffer = JK_END_STRING_PTR(parseState);
1637+ const unsigned char *atNumberCharacter = NULL;
1638+ int numberState = JSONNumberStateWholeNumberStart, isFloatingPoint = 0, isNegative = 0, backup = 0;
1639+ size_t startingIndex = parseState->atIndex;
1640+
1641+ for(atNumberCharacter = numberStart; (JK_EXPECT_T(atNumberCharacter < endOfBuffer)) && (JK_EXPECT_T(!(JK_EXPECT_F(numberState == JSONNumberStateFinished) || JK_EXPECT_F(numberState == JSONNumberStateError)))); atNumberCharacter++) {
1642+ unsigned long currentChar = (unsigned long)(*atNumberCharacter), lowerCaseCC = currentChar | 0x20UL;
1643+
1644+ switch(numberState) {
1645+ case JSONNumberStateWholeNumberStart: if (currentChar == '-') { numberState = JSONNumberStateWholeNumberMinus; isNegative = 1; break; }
1646+ case JSONNumberStateWholeNumberMinus: if (currentChar == '0') { numberState = JSONNumberStateWholeNumberZero; break; }
1647+ else if( (currentChar >= '1') && (currentChar <= '9')) { numberState = JSONNumberStateWholeNumber; break; }
1648+ else { /* XXX Add error message */ numberState = JSONNumberStateError; break; }
1649+ case JSONNumberStateExponentStart: if( (currentChar == '+') || (currentChar == '-')) { numberState = JSONNumberStateExponentPlusMinus; break; }
1650+ case JSONNumberStateFractionalNumberStart:
1651+ case JSONNumberStateExponentPlusMinus:if(!((currentChar >= '0') && (currentChar <= '9'))) { /* XXX Add error message */ numberState = JSONNumberStateError; break; }
1652+ else { if(numberState == JSONNumberStateFractionalNumberStart) { numberState = JSONNumberStateFractionalNumber; }
1653+ else { numberState = JSONNumberStateExponent; } break; }
1654+ case JSONNumberStateWholeNumberZero:
1655+ case JSONNumberStateWholeNumber: if (currentChar == '.') { numberState = JSONNumberStateFractionalNumberStart; isFloatingPoint = 1; break; }
1656+ case JSONNumberStateFractionalNumber: if (lowerCaseCC == 'e') { numberState = JSONNumberStateExponentStart; isFloatingPoint = 1; break; }
1657+ case JSONNumberStateExponent: if(!((currentChar >= '0') && (currentChar <= '9')) || (numberState == JSONNumberStateWholeNumberZero)) { numberState = JSONNumberStateFinished; backup = 1; break; }
1658+ break;
1659+ default: /* XXX Add error message */ numberState = JSONNumberStateError; break;
1660+ }
1661+ }
1662+
1663+ parseState->token.tokenPtrRange.ptr = parseState->stringBuffer.bytes.ptr + startingIndex;
1664+ parseState->token.tokenPtrRange.length = (atNumberCharacter - parseState->token.tokenPtrRange.ptr) - backup;
1665+ parseState->atIndex = (parseState->token.tokenPtrRange.ptr + parseState->token.tokenPtrRange.length) - parseState->stringBuffer.bytes.ptr;
1666+
1667+ if(JK_EXPECT_T(numberState == JSONNumberStateFinished)) {
1668+ unsigned char numberTempBuf[parseState->token.tokenPtrRange.length + 4UL];
1669+ unsigned char *endOfNumber = NULL;
1670+
1671+ memcpy(numberTempBuf, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length);
1672+ numberTempBuf[parseState->token.tokenPtrRange.length] = 0;
1673+
1674+ errno = 0;
1675+
1676+ // Treat "-0" as a floating point number, which is capable of representing negative zeros.
1677+ if(JK_EXPECT_F(parseState->token.tokenPtrRange.length == 2UL) && JK_EXPECT_F(numberTempBuf[1] == '0') && JK_EXPECT_F(isNegative)) { isFloatingPoint = 1; }
1678+
1679+ if(isFloatingPoint) {
1680+ parseState->token.value.number.doubleValue = strtod((const char *)numberTempBuf, (char **)&endOfNumber); // strtod is documented to return U+2261 (identical to) 0.0 on an underflow error (along with setting errno to ERANGE).
1681+ parseState->token.value.type = JKValueTypeDouble;
1682+ parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.doubleValue;
1683+ parseState->token.value.ptrRange.length = sizeof(double);
1684+ parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type);
1685+ } else {
1686+ if(isNegative) {
1687+ parseState->token.value.number.longLongValue = strtoll((const char *)numberTempBuf, (char **)&endOfNumber, 10);
1688+ parseState->token.value.type = JKValueTypeLongLong;
1689+ parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.longLongValue;
1690+ parseState->token.value.ptrRange.length = sizeof(long long);
1691+ parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type) + (JKHash)parseState->token.value.number.longLongValue;
1692+ } else {
1693+ parseState->token.value.number.unsignedLongLongValue = strtoull((const char *)numberTempBuf, (char **)&endOfNumber, 10);
1694+ parseState->token.value.type = JKValueTypeUnsignedLongLong;
1695+ parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.unsignedLongLongValue;
1696+ parseState->token.value.ptrRange.length = sizeof(unsigned long long);
1697+ parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type) + (JKHash)parseState->token.value.number.unsignedLongLongValue;
1698+ }
1699+ }
1700+
1701+ if(JK_EXPECT_F(errno != 0)) {
1702+ numberState = JSONNumberStateError;
1703+ if(errno == ERANGE) {
1704+ switch(parseState->token.value.type) {
1705+ case JKValueTypeDouble: jk_error(parseState, @"The value '%s' could not be represented as a 'double' due to %s.", numberTempBuf, (parseState->token.value.number.doubleValue == 0.0) ? "underflow" : "overflow"); break; // see above for == 0.0.
1706+ case JKValueTypeLongLong: jk_error(parseState, @"The value '%s' exceeded the minimum value that could be represented: %lld.", numberTempBuf, parseState->token.value.number.longLongValue); break;
1707+ case JKValueTypeUnsignedLongLong: jk_error(parseState, @"The value '%s' exceeded the maximum value that could be represented: %llu.", numberTempBuf, parseState->token.value.number.unsignedLongLongValue); break;
1708+ default: jk_error(parseState, @"Internal error: Unknown token value type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break;
1709+ }
1710+ }
1711+ }
1712+ if(JK_EXPECT_F(endOfNumber != &numberTempBuf[parseState->token.tokenPtrRange.length]) && JK_EXPECT_F(numberState != JSONNumberStateError)) { numberState = JSONNumberStateError; jk_error(parseState, @"The conversion function did not consume all of the number tokens characters."); }
1713+
1714+ size_t hashIndex = 0UL;
1715+ for(hashIndex = 0UL; hashIndex < parseState->token.value.ptrRange.length; hashIndex++) { parseState->token.value.hash = jk_calculateHash(parseState->token.value.hash, parseState->token.value.ptrRange.ptr[hashIndex]); }
1716+ }
1717+
1718+ if(JK_EXPECT_F(numberState != JSONNumberStateFinished)) { jk_error(parseState, @"Invalid number."); }
1719+ return(JK_EXPECT_T((numberState == JSONNumberStateFinished)) ? 0 : 1);
1720+}
1721+
1722+JK_STATIC_INLINE void jk_set_parsed_token(JKParseState *parseState, const unsigned char *ptr, size_t length, JKTokenType type, size_t advanceBy) {
1723+ parseState->token.tokenPtrRange.ptr = ptr;
1724+ parseState->token.tokenPtrRange.length = length;
1725+ parseState->token.type = type;
1726+ parseState->atIndex += advanceBy;
1727+}
1728+
1729+static size_t jk_parse_is_newline(JKParseState *parseState, const unsigned char *atCharacterPtr) {
1730+ NSCParameterAssert((parseState != NULL) && (atCharacterPtr != NULL) && (atCharacterPtr >= parseState->stringBuffer.bytes.ptr) && (atCharacterPtr < JK_END_STRING_PTR(parseState)));
1731+ const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState);
1732+
1733+ if(JK_EXPECT_F(atCharacterPtr >= endOfStringPtr)) { return(0UL); }
1734+
1735+ if(JK_EXPECT_F((*(atCharacterPtr + 0)) == '\n')) { return(1UL); }
1736+ if(JK_EXPECT_F((*(atCharacterPtr + 0)) == '\r')) { if((JK_EXPECT_T((atCharacterPtr + 1) < endOfStringPtr)) && ((*(atCharacterPtr + 1)) == '\n')) { return(2UL); } return(1UL); }
1737+ if(parseState->parseOptionFlags & JKParseOptionUnicodeNewlines) {
1738+ if((JK_EXPECT_F((*(atCharacterPtr + 0)) == 0xc2)) && (((atCharacterPtr + 1) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == 0x85))) { return(2UL); }
1739+ if((JK_EXPECT_F((*(atCharacterPtr + 0)) == 0xe2)) && (((atCharacterPtr + 2) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == 0x80) && (((*(atCharacterPtr + 2)) == 0xa8) || ((*(atCharacterPtr + 2)) == 0xa9)))) { return(3UL); }
1740+ }
1741+
1742+ return(0UL);
1743+}
1744+
1745+JK_STATIC_INLINE int jk_parse_skip_newline(JKParseState *parseState) {
1746+ size_t newlineAdvanceAtIndex = 0UL;
1747+ if(JK_EXPECT_F((newlineAdvanceAtIndex = jk_parse_is_newline(parseState, JK_AT_STRING_PTR(parseState))) > 0UL)) { parseState->lineNumber++; parseState->atIndex += (newlineAdvanceAtIndex - 1UL); parseState->lineStartIndex = parseState->atIndex + 1UL; return(1); }
1748+ return(0);
1749+}
1750+
1751+JK_STATIC_INLINE void jk_parse_skip_whitespace(JKParseState *parseState) {
1752+#ifndef __clang_analyzer__
1753+ NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)));
1754+ const unsigned char *atCharacterPtr = NULL;
1755+ const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState);
1756+
1757+ for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) {
1758+ if(((*(atCharacterPtr + 0)) == ' ') || ((*(atCharacterPtr + 0)) == '\t')) { continue; }
1759+ if(jk_parse_skip_newline(parseState)) { continue; }
1760+ if(parseState->parseOptionFlags & JKParseOptionComments) {
1761+ if((JK_EXPECT_F((*(atCharacterPtr + 0)) == '/')) && (JK_EXPECT_T((atCharacterPtr + 1) < endOfStringPtr))) {
1762+ if((*(atCharacterPtr + 1)) == '/') {
1763+ parseState->atIndex++;
1764+ for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) { if(jk_parse_skip_newline(parseState)) { break; } }
1765+ continue;
1766+ }
1767+ if((*(atCharacterPtr + 1)) == '*') {
1768+ parseState->atIndex++;
1769+ for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) {
1770+ if(jk_parse_skip_newline(parseState)) { continue; }
1771+ if(((*(atCharacterPtr + 0)) == '*') && (((atCharacterPtr + 1) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == '/'))) { parseState->atIndex++; break; }
1772+ }
1773+ continue;
1774+ }
1775+ }
1776+ }
1777+ break;
1778+ }
1779+#endif
1780+}
1781+
1782+static int jk_parse_next_token(JKParseState *parseState) {
1783+ NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)));
1784+ const unsigned char *atCharacterPtr = NULL;
1785+ const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState);
1786+ unsigned char currentCharacter = 0U;
1787+ int stopParsing = 0;
1788+
1789+ parseState->prev_atIndex = parseState->atIndex;
1790+ parseState->prev_lineNumber = parseState->lineNumber;
1791+ parseState->prev_lineStartIndex = parseState->lineStartIndex;
1792+
1793+ jk_parse_skip_whitespace(parseState);
1794+
1795+ if((JK_AT_STRING_PTR(parseState) == endOfStringPtr)) { stopParsing = 1; }
1796+
1797+ if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr))) {
1798+ currentCharacter = *atCharacterPtr;
1799+
1800+ if(JK_EXPECT_T(currentCharacter == '"')) { if(JK_EXPECT_T((stopParsing = jk_parse_string(parseState)) == 0)) { jk_set_parsed_token(parseState, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length, JKTokenTypeString, 0UL); } }
1801+ else if(JK_EXPECT_T(currentCharacter == ':')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeSeparator, 1UL); }
1802+ else if(JK_EXPECT_T(currentCharacter == ',')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeComma, 1UL); }
1803+ else if((JK_EXPECT_T(currentCharacter >= '0') && JK_EXPECT_T(currentCharacter <= '9')) || JK_EXPECT_T(currentCharacter == '-')) { if(JK_EXPECT_T((stopParsing = jk_parse_number(parseState)) == 0)) { jk_set_parsed_token(parseState, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length, JKTokenTypeNumber, 0UL); } }
1804+ else if(JK_EXPECT_T(currentCharacter == '{')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeObjectBegin, 1UL); }
1805+ else if(JK_EXPECT_T(currentCharacter == '}')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeObjectEnd, 1UL); }
1806+ else if(JK_EXPECT_T(currentCharacter == '[')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeArrayBegin, 1UL); }
1807+ else if(JK_EXPECT_T(currentCharacter == ']')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeArrayEnd, 1UL); }
1808+
1809+ else if(JK_EXPECT_T(currentCharacter == 't')) { if(!((JK_EXPECT_T((atCharacterPtr + 4UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'r')) && (JK_EXPECT_T(atCharacterPtr[2] == 'u')) && (JK_EXPECT_T(atCharacterPtr[3] == 'e')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 4UL, JKTokenTypeTrue, 4UL); } }
1810+ else if(JK_EXPECT_T(currentCharacter == 'f')) { if(!((JK_EXPECT_T((atCharacterPtr + 5UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'a')) && (JK_EXPECT_T(atCharacterPtr[2] == 'l')) && (JK_EXPECT_T(atCharacterPtr[3] == 's')) && (JK_EXPECT_T(atCharacterPtr[4] == 'e')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 5UL, JKTokenTypeFalse, 5UL); } }
1811+ else if(JK_EXPECT_T(currentCharacter == 'n')) { if(!((JK_EXPECT_T((atCharacterPtr + 4UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'u')) && (JK_EXPECT_T(atCharacterPtr[2] == 'l')) && (JK_EXPECT_T(atCharacterPtr[3] == 'l')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 4UL, JKTokenTypeNull, 4UL); } }
1812+ else { stopParsing = 1; /* XXX Add error message */ }
1813+ }
1814+
1815+ if(JK_EXPECT_F(stopParsing)) { jk_error(parseState, @"Unexpected token, wanted '{', '}', '[', ']', ',', ':', 'true', 'false', 'null', '\"STRING\"', 'NUMBER'."); }
1816+ return(stopParsing);
1817+}
1818+
1819+static void jk_error_parse_accept_or3(JKParseState *parseState, int state, NSString *or1String, NSString *or2String, NSString *or3String) {
1820+ NSString *acceptStrings[16];
1821+ int acceptIdx = 0;
1822+ if(state & JKParseAcceptValue) { acceptStrings[acceptIdx++] = or1String; }
1823+ if(state & JKParseAcceptComma) { acceptStrings[acceptIdx++] = or2String; }
1824+ if(state & JKParseAcceptEnd) { acceptStrings[acceptIdx++] = or3String; }
1825+ if(acceptIdx == 1) { jk_error(parseState, @"Expected %@, not '%*.*s'", acceptStrings[0], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); }
1826+ else if(acceptIdx == 2) { jk_error(parseState, @"Expected %@ or %@, not '%*.*s'", acceptStrings[0], acceptStrings[1], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); }
1827+ else if(acceptIdx == 3) { jk_error(parseState, @"Expected %@, %@, or %@, not '%*.*s", acceptStrings[0], acceptStrings[1], acceptStrings[2], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); }
1828+}
1829+
1830+static void *jk_parse_array(JKParseState *parseState) {
1831+ size_t startingObjectIndex = parseState->objectStack.index;
1832+ int arrayState = JKParseAcceptValueOrEnd, stopParsing = 0;
1833+ void *parsedArray = NULL;
1834+
1835+ while(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length)))) {
1836+ if(JK_EXPECT_F(parseState->objectStack.index > (parseState->objectStack.count - 4UL))) { if(jk_objectStack_resize(&parseState->objectStack, parseState->objectStack.count + 128UL)) { jk_error(parseState, @"Internal error: [array] objectsIndex > %zu, resize failed? %@ line %#ld", (parseState->objectStack.count - 4UL), [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; } }
1837+
1838+ if(JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)) {
1839+ void *object = NULL;
1840+#ifndef NS_BLOCK_ASSERTIONS
1841+ parseState->objectStack.objects[parseState->objectStack.index] = NULL;
1842+ parseState->objectStack.keys [parseState->objectStack.index] = NULL;
1843+#endif
1844+ switch(parseState->token.type) {
1845+ case JKTokenTypeNumber:
1846+ case JKTokenTypeString:
1847+ case JKTokenTypeTrue:
1848+ case JKTokenTypeFalse:
1849+ case JKTokenTypeNull:
1850+ case JKTokenTypeArrayBegin:
1851+ case JKTokenTypeObjectBegin:
1852+ if(JK_EXPECT_F((arrayState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected value."); stopParsing = 1; break; }
1853+ if(JK_EXPECT_F((object = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Object == NULL"); stopParsing = 1; break; } else { parseState->objectStack.objects[parseState->objectStack.index++] = object; arrayState = JKParseAcceptCommaOrEnd; }
1854+ break;
1855+ case JKTokenTypeArrayEnd: if(JK_EXPECT_T(arrayState & JKParseAcceptEnd)) { NSCParameterAssert(parseState->objectStack.index >= startingObjectIndex); parsedArray = (void *)_JKArrayCreate((id *)&parseState->objectStack.objects[startingObjectIndex], (parseState->objectStack.index - startingObjectIndex), parseState->mutableCollections); } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ']'."); } stopParsing = 1; break;
1856+ case JKTokenTypeComma: if(JK_EXPECT_T(arrayState & JKParseAcceptComma)) { arrayState = JKParseAcceptValue; } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ','."); stopParsing = 1; } break;
1857+ default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, arrayState, @"a value", @"a comma", @"a ']'"); stopParsing = 1; break;
1858+ }
1859+ }
1860+ }
1861+
1862+ if(JK_EXPECT_F(parsedArray == NULL)) { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { if(parseState->objectStack.objects[idx] != NULL) { CFRelease(parseState->objectStack.objects[idx]); parseState->objectStack.objects[idx] = NULL; } } }
1863+#if !defined(NS_BLOCK_ASSERTIONS)
1864+ else { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { parseState->objectStack.objects[idx] = NULL; parseState->objectStack.keys[idx] = NULL; } }
1865+#endif
1866+
1867+ parseState->objectStack.index = startingObjectIndex;
1868+ return(parsedArray);
1869+}
1870+
1871+static void *jk_create_dictionary(JKParseState *parseState, size_t startingObjectIndex) {
1872+ void *parsedDictionary = NULL;
1873+
1874+ parseState->objectStack.index--;
1875+
1876+ parsedDictionary = _JKDictionaryCreate((id *)&parseState->objectStack.keys[startingObjectIndex], (NSUInteger *)&parseState->objectStack.cfHashes[startingObjectIndex], (id *)&parseState->objectStack.objects[startingObjectIndex], (parseState->objectStack.index - startingObjectIndex), parseState->mutableCollections);
1877+
1878+ return(parsedDictionary);
1879+}
1880+
1881+static void *jk_parse_dictionary(JKParseState *parseState) {
1882+ size_t startingObjectIndex = parseState->objectStack.index;
1883+ int dictState = JKParseAcceptValueOrEnd, stopParsing = 0;
1884+ void *parsedDictionary = NULL;
1885+
1886+ while(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length)))) {
1887+ if(JK_EXPECT_F(parseState->objectStack.index > (parseState->objectStack.count - 4UL))) { if(jk_objectStack_resize(&parseState->objectStack, parseState->objectStack.count + 128UL)) { jk_error(parseState, @"Internal error: [dictionary] objectsIndex > %zu, resize failed? %@ line #%ld", (parseState->objectStack.count - 4UL), [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; } }
1888+
1889+ size_t objectStackIndex = parseState->objectStack.index++;
1890+ parseState->objectStack.keys[objectStackIndex] = NULL;
1891+ parseState->objectStack.objects[objectStackIndex] = NULL;
1892+ void *key = NULL, *object = NULL;
1893+
1894+ if(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)))) {
1895+ switch(parseState->token.type) {
1896+ case JKTokenTypeString:
1897+ if(JK_EXPECT_F((dictState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected string."); stopParsing = 1; break; }
1898+ if(JK_EXPECT_F((key = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Key == NULL."); stopParsing = 1; break; }
1899+ else {
1900+ parseState->objectStack.keys[objectStackIndex] = key;
1901+ if(JK_EXPECT_T(parseState->token.value.cacheItem != NULL)) { if(JK_EXPECT_F(parseState->token.value.cacheItem->cfHash == 0UL)) { parseState->token.value.cacheItem->cfHash = CFHash(key); } parseState->objectStack.cfHashes[objectStackIndex] = parseState->token.value.cacheItem->cfHash; }
1902+ else { parseState->objectStack.cfHashes[objectStackIndex] = CFHash(key); }
1903+ }
1904+ break;
1905+
1906+ case JKTokenTypeObjectEnd: if((JK_EXPECT_T(dictState & JKParseAcceptEnd))) { NSCParameterAssert(parseState->objectStack.index >= startingObjectIndex); parsedDictionary = jk_create_dictionary(parseState, startingObjectIndex); } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected '}'."); } stopParsing = 1; break;
1907+ case JKTokenTypeComma: if((JK_EXPECT_T(dictState & JKParseAcceptComma))) { dictState = JKParseAcceptValue; parseState->objectStack.index--; continue; } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ','."); stopParsing = 1; } break;
1908+
1909+ default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, dictState, @"a \"STRING\"", @"a comma", @"a '}'"); stopParsing = 1; break;
1910+ }
1911+ }
1912+
1913+ if(JK_EXPECT_T(stopParsing == 0)) {
1914+ if(JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)) { if(JK_EXPECT_F(parseState->token.type != JKTokenTypeSeparator)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Expected ':'."); stopParsing = 1; } }
1915+ }
1916+
1917+ if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0))) {
1918+ switch(parseState->token.type) {
1919+ case JKTokenTypeNumber:
1920+ case JKTokenTypeString:
1921+ case JKTokenTypeTrue:
1922+ case JKTokenTypeFalse:
1923+ case JKTokenTypeNull:
1924+ case JKTokenTypeArrayBegin:
1925+ case JKTokenTypeObjectBegin:
1926+ if(JK_EXPECT_F((dictState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected value."); stopParsing = 1; break; }
1927+ if(JK_EXPECT_F((object = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Object == NULL."); stopParsing = 1; break; } else { parseState->objectStack.objects[objectStackIndex] = object; dictState = JKParseAcceptCommaOrEnd; }
1928+ break;
1929+ default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, dictState, @"a value", @"a comma", @"a '}'"); stopParsing = 1; break;
1930+ }
1931+ }
1932+ }
1933+
1934+ if(JK_EXPECT_F(parsedDictionary == NULL)) { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { if(parseState->objectStack.keys[idx] != NULL) { CFRelease(parseState->objectStack.keys[idx]); parseState->objectStack.keys[idx] = NULL; } if(parseState->objectStack.objects[idx] != NULL) { CFRelease(parseState->objectStack.objects[idx]); parseState->objectStack.objects[idx] = NULL; } } }
1935+#if !defined(NS_BLOCK_ASSERTIONS)
1936+ else { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { parseState->objectStack.objects[idx] = NULL; parseState->objectStack.keys[idx] = NULL; } }
1937+#endif
1938+
1939+ parseState->objectStack.index = startingObjectIndex;
1940+ return(parsedDictionary);
1941+}
1942+
1943+static id json_parse_it(JKParseState *parseState) {
1944+ id parsedObject = NULL;
1945+ int stopParsing = 0;
1946+
1947+ while((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length))) {
1948+ if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0))) {
1949+ switch(parseState->token.type) {
1950+ case JKTokenTypeArrayBegin:
1951+ case JKTokenTypeObjectBegin: parsedObject = [(id)jk_object_for_token(parseState) autorelease]; stopParsing = 1; break;
1952+ default: jk_error(parseState, @"Expected either '[' or '{'."); stopParsing = 1; break;
1953+ }
1954+ }
1955+ }
1956+
1957+ NSCParameterAssert((parseState->objectStack.index == 0) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)));
1958+
1959+ if((parsedObject == NULL) && (JK_AT_STRING_PTR(parseState) == JK_END_STRING_PTR(parseState))) { jk_error(parseState, @"Reached the end of the buffer."); }
1960+ if(parsedObject == NULL) { jk_error(parseState, @"Unable to parse JSON."); }
1961+
1962+ if((parsedObject != NULL) && (JK_AT_STRING_PTR(parseState) < JK_END_STRING_PTR(parseState))) {
1963+ jk_parse_skip_whitespace(parseState);
1964+ if((parsedObject != NULL) && ((parseState->parseOptionFlags & JKParseOptionPermitTextAfterValidJSON) == 0) && (JK_AT_STRING_PTR(parseState) < JK_END_STRING_PTR(parseState))) {
1965+ jk_error(parseState, @"A valid JSON object was parsed but there were additional non-white-space characters remaining.");
1966+ parsedObject = NULL;
1967+ }
1968+ }
1969+
1970+ return(parsedObject);
1971+}
1972+
1973+////////////
1974+#pragma mark -
1975+#pragma mark Object cache
1976+
1977+// This uses a Galois Linear Feedback Shift Register (LFSR) PRNG to pick which item in the cache to age. It has a period of (2^32)-1.
1978+// NOTE: A LFSR *MUST* be initialized to a non-zero value and must always have a non-zero value. The LFSR is initalized to 1 in -initWithParseOptions:
1979+JK_STATIC_INLINE void jk_cache_age(JKParseState *parseState) {
1980+ NSCParameterAssert((parseState != NULL) && (parseState->cache.prng_lfsr != 0U));
1981+ parseState->cache.prng_lfsr = (parseState->cache.prng_lfsr >> 1) ^ ((0U - (parseState->cache.prng_lfsr & 1U)) & 0x80200003U);
1982+ parseState->cache.age[parseState->cache.prng_lfsr & (parseState->cache.count - 1UL)] >>= 1;
1983+}
1984+
1985+// The object cache is nothing more than a hash table with open addressing collision resolution that is bounded by JK_CACHE_PROBES attempts.
1986+//
1987+// The hash table is a linear C array of JKTokenCacheItem. The terms "item" and "bucket" are synonymous with the index in to the cache array, i.e. cache.items[bucket].
1988+//
1989+// Items in the cache have an age associated with them. An items age is incremented using saturating unsigned arithmetic and decremeted using unsigned right shifts.
1990+// Thus, an items age is managed using an AIMD policy- additive increase, multiplicative decrease. All age calculations and manipulations are branchless.
1991+// The primitive C type MUST be unsigned. It is currently a "char", which allows (at a minimum and in practice) 8 bits.
1992+//
1993+// A "useable bucket" is a bucket that is not in use (never populated), or has an age == 0.
1994+//
1995+// When an item is found in the cache, it's age is incremented.
1996+// If a useable bucket hasn't been found, the current item (bucket) is aged along with two random items.
1997+//
1998+// If a value is not found in the cache, and no useable bucket has been found, that value is not added to the cache.
1999+
2000+static void *jk_cachedObjects(JKParseState *parseState) {
2001+ unsigned long bucket = parseState->token.value.hash & (parseState->cache.count - 1UL), setBucket = 0UL, useableBucket = 0UL, x = 0UL;
2002+ void *parsedAtom = NULL;
2003+
2004+ if(JK_EXPECT_F(parseState->token.value.ptrRange.length == 0UL) && JK_EXPECT_T(parseState->token.value.type == JKValueTypeString)) { return(@""); }
2005+
2006+ for(x = 0UL; x < JK_CACHE_PROBES; x++) {
2007+ if(JK_EXPECT_F(parseState->cache.items[bucket].object == NULL)) { setBucket = 1UL; useableBucket = bucket; break; }
2008+
2009+ if((JK_EXPECT_T(parseState->cache.items[bucket].hash == parseState->token.value.hash)) && (JK_EXPECT_T(parseState->cache.items[bucket].size == parseState->token.value.ptrRange.length)) && (JK_EXPECT_T(parseState->cache.items[bucket].type == parseState->token.value.type)) && (JK_EXPECT_T(parseState->cache.items[bucket].bytes != NULL)) && (JK_EXPECT_T(memcmp(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length) == 0U))) {
2010+ parseState->cache.age[bucket] = (((uint32_t)parseState->cache.age[bucket]) + 1U) - (((((uint32_t)parseState->cache.age[bucket]) + 1U) >> 31) ^ 1U);
2011+ parseState->token.value.cacheItem = &parseState->cache.items[bucket];
2012+ NSCParameterAssert(parseState->cache.items[bucket].object != NULL);
2013+ return((void *)CFRetain(parseState->cache.items[bucket].object));
2014+ } else {
2015+ if(JK_EXPECT_F(setBucket == 0UL) && JK_EXPECT_F(parseState->cache.age[bucket] == 0U)) { setBucket = 1UL; useableBucket = bucket; }
2016+ if(JK_EXPECT_F(setBucket == 0UL)) { parseState->cache.age[bucket] >>= 1; jk_cache_age(parseState); jk_cache_age(parseState); }
2017+ // This is the open addressing function. The values length and type are used as a form of "double hashing" to distribute values with the same effective value hash across different object cache buckets.
2018+ // The values type is a prime number that is relatively coprime to the other primes in the set of value types and the number of hash table buckets.
2019+ bucket = (parseState->token.value.hash + (parseState->token.value.ptrRange.length * (x + 1UL)) + (parseState->token.value.type * (x + 1UL)) + (3UL * (x + 1UL))) & (parseState->cache.count - 1UL);
2020+ }
2021+ }
2022+
2023+ switch(parseState->token.value.type) {
2024+ case JKValueTypeString: parsedAtom = (void *)CFStringCreateWithBytes(NULL, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length, kCFStringEncodingUTF8, 0); break;
2025+ case JKValueTypeLongLong: parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberLongLongType, &parseState->token.value.number.longLongValue); break;
2026+ case JKValueTypeUnsignedLongLong:
2027+ if(parseState->token.value.number.unsignedLongLongValue <= LLONG_MAX) { parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberLongLongType, &parseState->token.value.number.unsignedLongLongValue); }
2028+ else { parsedAtom = (void *)parseState->objCImpCache.NSNumberInitWithUnsignedLongLong(parseState->objCImpCache.NSNumberAlloc(parseState->objCImpCache.NSNumberClass, @selector(alloc)), @selector(initWithUnsignedLongLong:), parseState->token.value.number.unsignedLongLongValue); }
2029+ break;
2030+ case JKValueTypeDouble: parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberDoubleType, &parseState->token.value.number.doubleValue); break;
2031+ default: jk_error(parseState, @"Internal error: Unknown token value type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break;
2032+ }
2033+
2034+ if(JK_EXPECT_T(setBucket) && (JK_EXPECT_T(parsedAtom != NULL))) {
2035+ bucket = useableBucket;
2036+ if(JK_EXPECT_T((parseState->cache.items[bucket].object != NULL))) { CFRelease(parseState->cache.items[bucket].object); parseState->cache.items[bucket].object = NULL; }
2037+
2038+ if(JK_EXPECT_T((parseState->cache.items[bucket].bytes = (unsigned char *)reallocf(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.length)) != NULL)) {
2039+ memcpy(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length);
2040+ parseState->cache.items[bucket].object = (void *)CFRetain(parsedAtom);
2041+ parseState->cache.items[bucket].hash = parseState->token.value.hash;
2042+ parseState->cache.items[bucket].cfHash = 0UL;
2043+ parseState->cache.items[bucket].size = parseState->token.value.ptrRange.length;
2044+ parseState->cache.items[bucket].type = parseState->token.value.type;
2045+ parseState->token.value.cacheItem = &parseState->cache.items[bucket];
2046+ parseState->cache.age[bucket] = JK_INIT_CACHE_AGE;
2047+ } else { // The realloc failed, so clear the appropriate fields.
2048+ parseState->cache.items[bucket].hash = 0UL;
2049+ parseState->cache.items[bucket].cfHash = 0UL;
2050+ parseState->cache.items[bucket].size = 0UL;
2051+ parseState->cache.items[bucket].type = 0UL;
2052+ }
2053+ }
2054+
2055+ return(parsedAtom);
2056+}
2057+
2058+
2059+static void *jk_object_for_token(JKParseState *parseState) {
2060+ void *parsedAtom = NULL;
2061+
2062+ parseState->token.value.cacheItem = NULL;
2063+ switch(parseState->token.type) {
2064+ case JKTokenTypeString: parsedAtom = jk_cachedObjects(parseState); break;
2065+ case JKTokenTypeNumber: parsedAtom = jk_cachedObjects(parseState); break;
2066+ case JKTokenTypeObjectBegin: parsedAtom = jk_parse_dictionary(parseState); break;
2067+ case JKTokenTypeArrayBegin: parsedAtom = jk_parse_array(parseState); break;
2068+ case JKTokenTypeTrue: parsedAtom = (void *)kCFBooleanTrue; break;
2069+ case JKTokenTypeFalse: parsedAtom = (void *)kCFBooleanFalse; break;
2070+ case JKTokenTypeNull: parsedAtom = (void *)kCFNull; break;
2071+ default: jk_error(parseState, @"Internal error: Unknown token type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break;
2072+ }
2073+
2074+ return(parsedAtom);
2075+}
2076+
2077+#pragma mark -
2078+@implementation JSONDecoder
2079+
2080++ (id)decoder
2081+{
2082+ return([self decoderWithParseOptions:JKParseOptionStrict]);
2083+}
2084+
2085++ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2086+{
2087+ return([[[self alloc] initWithParseOptions:parseOptionFlags] autorelease]);
2088+}
2089+
2090+- (id)init
2091+{
2092+ return([self initWithParseOptions:JKParseOptionStrict]);
2093+}
2094+
2095+- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2096+{
2097+ if((self = [super init]) == NULL) { return(NULL); }
2098+
2099+ if(parseOptionFlags & ~JKParseOptionValidFlags) { [self autorelease]; [NSException raise:NSInvalidArgumentException format:@"Invalid parse options."]; }
2100+
2101+ if((parseState = (JKParseState *)calloc(1UL, sizeof(JKParseState))) == NULL) { goto errorExit; }
2102+
2103+ parseState->parseOptionFlags = parseOptionFlags;
2104+
2105+ parseState->token.tokenBuffer.roundSizeUpToMultipleOf = 4096UL;
2106+ parseState->objectStack.roundSizeUpToMultipleOf = 2048UL;
2107+
2108+ parseState->objCImpCache.NSNumberClass = _jk_NSNumberClass;
2109+ parseState->objCImpCache.NSNumberAlloc = _jk_NSNumberAllocImp;
2110+ parseState->objCImpCache.NSNumberInitWithUnsignedLongLong = _jk_NSNumberInitWithUnsignedLongLongImp;
2111+
2112+ parseState->cache.prng_lfsr = 1U;
2113+ parseState->cache.count = JK_CACHE_SLOTS;
2114+ if((parseState->cache.items = (JKTokenCacheItem *)calloc(1UL, sizeof(JKTokenCacheItem) * parseState->cache.count)) == NULL) { goto errorExit; }
2115+
2116+ return(self);
2117+
2118+ errorExit:
2119+ if(self) { [self autorelease]; self = NULL; }
2120+ return(NULL);
2121+}
2122+
2123+// This is here primarily to support the NSString and NSData convenience functions so the autoreleased JSONDecoder can release most of its resources before the pool pops.
2124+static void _JSONDecoderCleanup(JSONDecoder *decoder) {
2125+ if((decoder != NULL) && (decoder->parseState != NULL)) {
2126+ jk_managedBuffer_release(&decoder->parseState->token.tokenBuffer);
2127+ jk_objectStack_release(&decoder->parseState->objectStack);
2128+
2129+ [decoder clearCache];
2130+ if(decoder->parseState->cache.items != NULL) { free(decoder->parseState->cache.items); decoder->parseState->cache.items = NULL; }
2131+
2132+ free(decoder->parseState); decoder->parseState = NULL;
2133+ }
2134+}
2135+
2136+- (void)dealloc
2137+{
2138+ _JSONDecoderCleanup(self);
2139+ [super dealloc];
2140+}
2141+
2142+- (void)clearCache
2143+{
2144+ if(JK_EXPECT_T(parseState != NULL)) {
2145+ if(JK_EXPECT_T(parseState->cache.items != NULL)) {
2146+ size_t idx = 0UL;
2147+ for(idx = 0UL; idx < parseState->cache.count; idx++) {
2148+ if(JK_EXPECT_T(parseState->cache.items[idx].object != NULL)) { CFRelease(parseState->cache.items[idx].object); parseState->cache.items[idx].object = NULL; }
2149+ if(JK_EXPECT_T(parseState->cache.items[idx].bytes != NULL)) { free(parseState->cache.items[idx].bytes); parseState->cache.items[idx].bytes = NULL; }
2150+ memset(&parseState->cache.items[idx], 0, sizeof(JKTokenCacheItem));
2151+ parseState->cache.age[idx] = 0U;
2152+ }
2153+ }
2154+ }
2155+}
2156+
2157+// This needs to be completely rewritten.
2158+static id _JKParseUTF8String(JKParseState *parseState, BOOL mutableCollections, const unsigned char *string, size_t length, NSError **error) {
2159+ NSCParameterAssert((parseState != NULL) && (string != NULL) && (parseState->cache.prng_lfsr != 0U));
2160+ parseState->stringBuffer.bytes.ptr = string;
2161+ parseState->stringBuffer.bytes.length = length;
2162+ parseState->atIndex = 0UL;
2163+ parseState->lineNumber = 1UL;
2164+ parseState->lineStartIndex = 0UL;
2165+ parseState->prev_atIndex = 0UL;
2166+ parseState->prev_lineNumber = 1UL;
2167+ parseState->prev_lineStartIndex = 0UL;
2168+ parseState->error = NULL;
2169+ parseState->errorIsPrev = 0;
2170+ parseState->mutableCollections = (mutableCollections == NO) ? NO : YES;
2171+
2172+ unsigned char stackTokenBuffer[JK_TOKENBUFFER_SIZE] JK_ALIGNED(64);
2173+ jk_managedBuffer_setToStackBuffer(&parseState->token.tokenBuffer, stackTokenBuffer, sizeof(stackTokenBuffer));
2174+
2175+ void *stackObjects [JK_STACK_OBJS] JK_ALIGNED(64);
2176+ void *stackKeys [JK_STACK_OBJS] JK_ALIGNED(64);
2177+ CFHashCode stackCFHashes[JK_STACK_OBJS] JK_ALIGNED(64);
2178+ jk_objectStack_setToStackBuffer(&parseState->objectStack, stackObjects, stackKeys, stackCFHashes, JK_STACK_OBJS);
2179+
2180+ id parsedJSON = json_parse_it(parseState);
2181+
2182+ if((error != NULL) && (parseState->error != NULL)) { *error = parseState->error; }
2183+
2184+ jk_managedBuffer_release(&parseState->token.tokenBuffer);
2185+ jk_objectStack_release(&parseState->objectStack);
2186+
2187+ parseState->stringBuffer.bytes.ptr = NULL;
2188+ parseState->stringBuffer.bytes.length = 0UL;
2189+ parseState->atIndex = 0UL;
2190+ parseState->lineNumber = 1UL;
2191+ parseState->lineStartIndex = 0UL;
2192+ parseState->prev_atIndex = 0UL;
2193+ parseState->prev_lineNumber = 1UL;
2194+ parseState->prev_lineStartIndex = 0UL;
2195+ parseState->error = NULL;
2196+ parseState->errorIsPrev = 0;
2197+ parseState->mutableCollections = NO;
2198+
2199+ return(parsedJSON);
2200+}
2201+
2202+////////////
2203+#pragma mark Deprecated as of v1.4
2204+////////////
2205+
2206+// Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead.
2207+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length
2208+{
2209+ return([self objectWithUTF8String:string length:length error:NULL]);
2210+}
2211+
2212+// Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead.
2213+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error
2214+{
2215+ return([self objectWithUTF8String:string length:length error:error]);
2216+}
2217+
2218+// Deprecated in JSONKit v1.4. Use objectWithData: instead.
2219+- (id)parseJSONData:(NSData *)jsonData
2220+{
2221+ return([self objectWithData:jsonData error:NULL]);
2222+}
2223+
2224+// Deprecated in JSONKit v1.4. Use objectWithData:error: instead.
2225+- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error
2226+{
2227+ return([self objectWithData:jsonData error:error]);
2228+}
2229+
2230+////////////
2231+#pragma mark Methods that return immutable collection objects
2232+////////////
2233+
2234+- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length
2235+{
2236+ return([self objectWithUTF8String:string length:length error:NULL]);
2237+}
2238+
2239+- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error
2240+{
2241+ if(parseState == NULL) { [NSException raise:NSInternalInconsistencyException format:@"parseState is NULL."]; }
2242+ if(string == NULL) { [NSException raise:NSInvalidArgumentException format:@"The string argument is NULL."]; }
2243+
2244+ return(_JKParseUTF8String(parseState, NO, string, (size_t)length, error));
2245+}
2246+
2247+- (id)objectWithData:(NSData *)jsonData
2248+{
2249+ return([self objectWithData:jsonData error:NULL]);
2250+}
2251+
2252+- (id)objectWithData:(NSData *)jsonData error:(NSError **)error
2253+{
2254+ if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; }
2255+ return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]);
2256+}
2257+
2258+////////////
2259+#pragma mark Methods that return mutable collection objects
2260+////////////
2261+
2262+- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length
2263+{
2264+ return([self mutableObjectWithUTF8String:string length:length error:NULL]);
2265+}
2266+
2267+- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error
2268+{
2269+ if(parseState == NULL) { [NSException raise:NSInternalInconsistencyException format:@"parseState is NULL."]; }
2270+ if(string == NULL) { [NSException raise:NSInvalidArgumentException format:@"The string argument is NULL."]; }
2271+
2272+ return(_JKParseUTF8String(parseState, YES, string, (size_t)length, error));
2273+}
2274+
2275+- (id)mutableObjectWithData:(NSData *)jsonData
2276+{
2277+ return([self mutableObjectWithData:jsonData error:NULL]);
2278+}
2279+
2280+- (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error
2281+{
2282+ if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; }
2283+ return([self mutableObjectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]);
2284+}
2285+
2286+@end
2287+
2288+/*
2289+ The NSString and NSData convenience methods need a little bit of explanation.
2290+
2291+ Prior to JSONKit v1.4, the NSString -objectFromJSONStringWithParseOptions:error: method looked like
2292+
2293+ const unsigned char *utf8String = (const unsigned char *)[self UTF8String];
2294+ if(utf8String == NULL) { return(NULL); }
2295+ size_t utf8Length = strlen((const char *)utf8String);
2296+ return([[JSONDecoder decoderWithParseOptions:parseOptionFlags] parseUTF8String:utf8String length:utf8Length error:error]);
2297+
2298+ This changed with v1.4 to a more complicated method. The reason for this is to keep the amount of memory that is
2299+ allocated, but not yet freed because it is dependent on the autorelease pool to pop before it can be reclaimed.
2300+
2301+ In the simpler v1.3 code, this included all the bytes used to store the -UTF8String along with the JSONDecoder and all its overhead.
2302+
2303+ Now we use an autoreleased CFMutableData that is sized to the UTF8 length of the NSString in question and is used to hold the UTF8
2304+ conversion of said string.
2305+
2306+ Once parsed, the CFMutableData has its length set to 0. This should, hopefully, allow the CFMutableData to realloc and/or free
2307+ the buffer.
2308+
2309+ Another change made was a slight modification to JSONDecoder so that most of the cleanup work that was done in -dealloc was moved
2310+ to a private, internal function. These convenience routines keep the pointer to the autoreleased JSONDecoder and calls
2311+ _JSONDecoderCleanup() to early release the decoders resources since we already know that particular decoder is not going to be used
2312+ again.
2313+
2314+ If everything goes smoothly, this will most likely result in perhaps a few hundred bytes that are allocated but waiting for the
2315+ autorelease pool to pop. This is compared to the thousands and easily hundreds of thousands of bytes that would have been in
2316+ autorelease limbo. It's more complicated for us, but a win for the user.
2317+
2318+ Autorelease objects are used in case things don't go smoothly. By having them autoreleased, we effectively guarantee that our
2319+ requirement to -release the object is always met, not matter what goes wrong. The downside is having a an object or two in
2320+ autorelease limbo, but we've done our best to minimize that impact, so it all balances out.
2321+ */
2322+
2323+@implementation NSString (JSONKitDeserializing)
2324+
2325+static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection) {
2326+ id returnObject = NULL;
2327+ CFMutableDataRef mutableData = NULL;
2328+ JSONDecoder *decoder = NULL;
2329+
2330+ CFIndex stringLength = CFStringGetLength((CFStringRef)jsonString);
2331+ NSUInteger stringUTF8Length = [jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
2332+
2333+ if((mutableData = (CFMutableDataRef)[(id)CFDataCreateMutable(NULL, (NSUInteger)stringUTF8Length) autorelease]) != NULL) {
2334+ UInt8 *utf8String = CFDataGetMutableBytePtr(mutableData);
2335+ CFIndex usedBytes = 0L, convertedCount = 0L;
2336+
2337+ convertedCount = CFStringGetBytes((CFStringRef)jsonString, CFRangeMake(0L, stringLength), kCFStringEncodingUTF8, '?', NO, utf8String, (NSUInteger)stringUTF8Length, &usedBytes);
2338+ if(JK_EXPECT_F(convertedCount != stringLength) || JK_EXPECT_F(usedBytes < 0L)) { if(error != NULL) { *error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo:[NSDictionary dictionaryWithObject:@"An error occurred converting the contents of a NSString to UTF8." forKey:NSLocalizedDescriptionKey]]; } goto exitNow; }
2339+
2340+ if(mutableCollection == NO) { returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) objectWithUTF8String:(const unsigned char *)utf8String length:(size_t)usedBytes error:error]; }
2341+ else { returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) mutableObjectWithUTF8String:(const unsigned char *)utf8String length:(size_t)usedBytes error:error]; }
2342+ }
2343+
2344+exitNow:
2345+ if(mutableData != NULL) { CFDataSetLength(mutableData, 0L); }
2346+ if(decoder != NULL) { _JSONDecoderCleanup(decoder); }
2347+ return(returnObject);
2348+}
2349+
2350+- (id)objectFromJSONString
2351+{
2352+ return([self objectFromJSONStringWithParseOptions:JKParseOptionStrict error:NULL]);
2353+}
2354+
2355+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2356+{
2357+ return([self objectFromJSONStringWithParseOptions:parseOptionFlags error:NULL]);
2358+}
2359+
2360+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error
2361+{
2362+ return(_NSStringObjectFromJSONString(self, parseOptionFlags, error, NO));
2363+}
2364+
2365+
2366+- (id)mutableObjectFromJSONString
2367+{
2368+ return([self mutableObjectFromJSONStringWithParseOptions:JKParseOptionStrict error:NULL]);
2369+}
2370+
2371+- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2372+{
2373+ return([self mutableObjectFromJSONStringWithParseOptions:parseOptionFlags error:NULL]);
2374+}
2375+
2376+- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error
2377+{
2378+ return(_NSStringObjectFromJSONString(self, parseOptionFlags, error, YES));
2379+}
2380+
2381+@end
2382+
2383+@implementation NSData (JSONKitDeserializing)
2384+
2385+- (id)objectFromJSONData
2386+{
2387+ return([self objectFromJSONDataWithParseOptions:JKParseOptionStrict error:NULL]);
2388+}
2389+
2390+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2391+{
2392+ return([self objectFromJSONDataWithParseOptions:parseOptionFlags error:NULL]);
2393+}
2394+
2395+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error
2396+{
2397+ JSONDecoder *decoder = NULL;
2398+ id returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) objectWithData:self error:error];
2399+ if(decoder != NULL) { _JSONDecoderCleanup(decoder); }
2400+ return(returnObject);
2401+}
2402+
2403+- (id)mutableObjectFromJSONData
2404+{
2405+ return([self mutableObjectFromJSONDataWithParseOptions:JKParseOptionStrict error:NULL]);
2406+}
2407+
2408+- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags
2409+{
2410+ return([self mutableObjectFromJSONDataWithParseOptions:parseOptionFlags error:NULL]);
2411+}
2412+
2413+- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error
2414+{
2415+ JSONDecoder *decoder = NULL;
2416+ id returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) mutableObjectWithData:self error:error];
2417+ if(decoder != NULL) { _JSONDecoderCleanup(decoder); }
2418+ return(returnObject);
2419+}
2420+
2421+
2422+@end
2423+
2424+////////////
2425+#pragma mark -
2426+#pragma mark Encoding / deserializing functions
2427+
2428+static void jk_encode_error(JKEncodeState *encodeState, NSString *format, ...) {
2429+ NSCParameterAssert((encodeState != NULL) && (format != NULL));
2430+
2431+ va_list varArgsList;
2432+ va_start(varArgsList, format);
2433+ NSString *formatString = [[[NSString alloc] initWithFormat:format arguments:varArgsList] autorelease];
2434+ va_end(varArgsList);
2435+
2436+ if(encodeState->error == NULL) {
2437+ encodeState->error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo:
2438+ [NSDictionary dictionaryWithObjectsAndKeys:
2439+ formatString, NSLocalizedDescriptionKey,
2440+ NULL]];
2441+ }
2442+}
2443+
2444+JK_STATIC_INLINE void jk_encode_updateCache(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object) {
2445+ NSCParameterAssert(encodeState != NULL);
2446+ if(JK_EXPECT_T(cacheSlot != NULL)) {
2447+ NSCParameterAssert((object != NULL) && (startingAtIndex <= encodeState->atIndex));
2448+ cacheSlot->object = object;
2449+ cacheSlot->offset = startingAtIndex;
2450+ cacheSlot->length = (size_t)(encodeState->atIndex - startingAtIndex);
2451+ }
2452+}
2453+
2454+static int jk_encode_printf(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, ...) {
2455+ va_list varArgsList, varArgsListCopy;
2456+ va_start(varArgsList, format);
2457+ va_copy(varArgsListCopy, varArgsList);
2458+
2459+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex) && (format != NULL));
2460+
2461+ ssize_t formattedStringLength = 0L;
2462+ int returnValue = 0;
2463+
2464+ if(JK_EXPECT_T((formattedStringLength = vsnprintf((char *)&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex], (encodeState->stringBuffer.bytes.length - encodeState->atIndex), format, varArgsList)) >= (ssize_t)(encodeState->stringBuffer.bytes.length - encodeState->atIndex))) {
2465+ NSCParameterAssert(((encodeState->atIndex + (formattedStringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length));
2466+ if(JK_EXPECT_F(((encodeState->atIndex + (formattedStringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (formattedStringLength * 2UL)+ 4096UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); returnValue = 1; goto exitNow; }
2467+ if(JK_EXPECT_F((formattedStringLength = vsnprintf((char *)&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex], (encodeState->stringBuffer.bytes.length - encodeState->atIndex), format, varArgsListCopy)) >= (ssize_t)(encodeState->stringBuffer.bytes.length - encodeState->atIndex))) { jk_encode_error(encodeState, @"vsnprintf failed unexpectedly."); returnValue = 1; goto exitNow; }
2468+ }
2469+
2470+exitNow:
2471+ va_end(varArgsList);
2472+ va_end(varArgsListCopy);
2473+ if(JK_EXPECT_T(returnValue == 0)) { encodeState->atIndex += formattedStringLength; jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object); }
2474+ return(returnValue);
2475+}
2476+
2477+static int jk_encode_write(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format) {
2478+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex) && (format != NULL));
2479+ if(JK_EXPECT_F(((encodeState->atIndex + strlen(format) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + strlen(format) + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2480+
2481+ size_t formatIdx = 0UL;
2482+ for(formatIdx = 0UL; format[formatIdx] != 0; formatIdx++) { NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[formatIdx]; }
2483+ jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object);
2484+ return(0);
2485+}
2486+
2487+static int jk_encode_writePrettyPrintWhiteSpace(JKEncodeState *encodeState) {
2488+ NSCParameterAssert((encodeState != NULL) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) != 0UL));
2489+ if(JK_EXPECT_F((encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 16UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_T(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 4096UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2490+ encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\n';
2491+ size_t depthWhiteSpace = 0UL;
2492+ for(depthWhiteSpace = 0UL; depthWhiteSpace < (encodeState->depth * 2UL); depthWhiteSpace++) { NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = ' '; }
2493+ return(0);
2494+}
2495+
2496+static int jk_encode_write1slow(JKEncodeState *encodeState, ssize_t depthChange, const char *format) {
2497+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (format != NULL) && ((depthChange >= -1L) && (depthChange <= 1L)) && ((encodeState->depth == 0UL) ? (depthChange >= 0L) : 1) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) != 0UL));
2498+ if(JK_EXPECT_F((encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 16UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 4096UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2499+ encodeState->depth += depthChange;
2500+ if(JK_EXPECT_T(format[0] == ':')) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0]; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = ' '; }
2501+ else {
2502+ if(JK_EXPECT_F(depthChange == -1L)) { if(JK_EXPECT_F(jk_encode_writePrettyPrintWhiteSpace(encodeState))) { return(1); } }
2503+ encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0];
2504+ if(JK_EXPECT_T(depthChange != -1L)) { if(JK_EXPECT_F(jk_encode_writePrettyPrintWhiteSpace(encodeState))) { return(1); } }
2505+ }
2506+ NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length);
2507+ return(0);
2508+}
2509+
2510+static int jk_encode_write1fast(JKEncodeState *encodeState, ssize_t depthChange JK_UNUSED_ARG, const char *format) {
2511+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) == 0UL));
2512+ if(JK_EXPECT_T((encodeState->atIndex + 4UL) < encodeState->stringBuffer.bytes.length)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0]; }
2513+ else { return(jk_encode_write(encodeState, NULL, 0UL, NULL, format)); }
2514+ return(0);
2515+}
2516+
2517+static int jk_encode_writen(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, size_t length) {
2518+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex));
2519+ if(JK_EXPECT_F((encodeState->stringBuffer.bytes.length - encodeState->atIndex) < (length + 4UL))) { if(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + 4096UL + length) == NULL) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } }
2520+ memcpy(encodeState->stringBuffer.bytes.ptr + encodeState->atIndex, format, length);
2521+ encodeState->atIndex += length;
2522+ jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object);
2523+ return(0);
2524+}
2525+
2526+JK_STATIC_INLINE JKHash jk_encode_object_hash(void *objectPtr) {
2527+ return( ( (((JKHash)objectPtr) >> 21) ^ (((JKHash)objectPtr) >> 9) ) + (((JKHash)objectPtr) >> 4) );
2528+}
2529+
2530+static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *objectPtr) {
2531+ NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (objectPtr != NULL));
2532+
2533+ id object = (id)objectPtr, encodeCacheObject = object;
2534+ int isClass = JKClassUnknown;
2535+ size_t startingAtIndex = encodeState->atIndex;
2536+
2537+ JKHash objectHash = jk_encode_object_hash(objectPtr);
2538+ JKEncodeCache *cacheSlot = &encodeState->cache[objectHash % JK_ENCODE_CACHE_SLOTS];
2539+
2540+ if(JK_EXPECT_T(cacheSlot->object == object)) {
2541+ NSCParameterAssert((cacheSlot->object != NULL) &&
2542+ (cacheSlot->offset < encodeState->atIndex) && ((cacheSlot->offset + cacheSlot->length) < encodeState->atIndex) &&
2543+ (cacheSlot->offset < encodeState->stringBuffer.bytes.length) && ((cacheSlot->offset + cacheSlot->length) < encodeState->stringBuffer.bytes.length) &&
2544+ ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2545+ ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2546+ ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)));
2547+ if(JK_EXPECT_F(((encodeState->atIndex + cacheSlot->length + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + cacheSlot->length + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2548+ NSCParameterAssert(((encodeState->atIndex + cacheSlot->length) < encodeState->stringBuffer.bytes.length) &&
2549+ ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2550+ ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2551+ ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2552+ ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) &&
2553+ ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->atIndex)));
2554+ memcpy(encodeState->stringBuffer.bytes.ptr + encodeState->atIndex, encodeState->stringBuffer.bytes.ptr + cacheSlot->offset, cacheSlot->length);
2555+ encodeState->atIndex += cacheSlot->length;
2556+ return(0);
2557+ }
2558+
2559+ // When we encounter a class that we do not handle, and we have either a delegate or block that the user supplied to format unsupported classes,
2560+ // we "re-run" the object check. However, we re-run the object check exactly ONCE. If the user supplies an object that isn't one of the
2561+ // supported classes, we fail the second time (i.e., double fault error).
2562+ BOOL rerunningAfterClassFormatter = NO;
2563+ rerunAfterClassFormatter:;
2564+
2565+ // XXX XXX XXX XXX
2566+ //
2567+ // We need to work around a bug in 10.7, which breaks ABI compatibility with Objective-C going back not just to 10.0, but OpenStep and even NextStep.
2568+ //
2569+ // It has long been documented that "the very first thing that a pointer to an Objective-C object "points to" is a pointer to that objects class".
2570+ //
2571+ // This is euphemistically called "tagged pointers". There are a number of highly technical problems with this, most involving long passages from
2572+ // the C standard(s). In short, one can make a strong case, couched from the perspective of the C standard(s), that that 10.7 "tagged pointers" are
2573+ // fundamentally Wrong and Broken, and should have never been implemented. Assuming those points are glossed over, because the change is very clearly
2574+ // breaking ABI compatibility, this should have resulted in a minimum of a "minimum version required" bump in various shared libraries to prevent
2575+ // causes code that used to work just fine to suddenly break without warning.
2576+ //
2577+ // In fact, the C standard says that the hack below is "undefined behavior"- there is no requirement that the 10.7 tagged pointer hack of setting the
2578+ // "lower, unused bits" must be preserved when casting the result to an integer type, but this "works" because for most architectures
2579+ // `sizeof(long) == sizeof(void *)` and the compiler uses the same representation for both. (note: this is informal, not meant to be
2580+ // normative or pedantically correct).
2581+ //
2582+ // In other words, while this "works" for now, technically the compiler is not obligated to do "what we want", and a later version of the compiler
2583+ // is not required in any way to produce the same results or behavior that earlier versions of the compiler did for the statement below.
2584+ //
2585+ // Fan-fucking-tastic.
2586+ //
2587+ // Why not just use `object_getClass()`? Because `object->isa` reduces to (typically) a *single* instruction. Calling `object_getClass()` requires
2588+ // that the compiler potentially spill registers, establish a function call frame / environment, and finally execute a "jump subroutine" instruction.
2589+ // Then, the called subroutine must spend half a dozen instructions in its prolog, however many instructions doing whatever it does, then half a dozen
2590+ // instructions in its prolog. One instruction compared to dozens, maybe a hundred instructions.
2591+ //
2592+ // Yes, that's one to two orders of magnitude difference. Which is compelling in its own right. When going for performance, you're often happy with
2593+ // gains in the two to three percent range.
2594+ //
2595+ // XXX XXX XXX XXX
2596+
2597+
2598+ BOOL workAroundMacOSXABIBreakingBug = (JK_EXPECT_F(((NSUInteger)object) & 0x1)) ? YES : NO;
2599+ void *objectISA = (JK_EXPECT_F(workAroundMacOSXABIBreakingBug)) ? NULL : *((void **)objectPtr);
2600+ if(JK_EXPECT_F(workAroundMacOSXABIBreakingBug)) { goto slowClassLookup; }
2601+
2602+ if(JK_EXPECT_T(objectISA == encodeState->fastClassLookup.stringClass)) { isClass = JKClassString; }
2603+ else if(JK_EXPECT_T(objectISA == encodeState->fastClassLookup.numberClass)) { isClass = JKClassNumber; }
2604+ else if(JK_EXPECT_T(objectISA == encodeState->fastClassLookup.dictionaryClass)) { isClass = JKClassDictionary; }
2605+ else if(JK_EXPECT_T(objectISA == encodeState->fastClassLookup.arrayClass)) { isClass = JKClassArray; }
2606+ else if(JK_EXPECT_T(objectISA == encodeState->fastClassLookup.nullClass)) { isClass = JKClassNull; }
2607+ else {
2608+ slowClassLookup:
2609+ if(JK_EXPECT_T([object isKindOfClass:[NSString class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.stringClass = objectISA; } isClass = JKClassString; }
2610+ else if(JK_EXPECT_T([object isKindOfClass:[NSNumber class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.numberClass = objectISA; } isClass = JKClassNumber; }
2611+ else if(JK_EXPECT_T([object isKindOfClass:[NSDictionary class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.dictionaryClass = objectISA; } isClass = JKClassDictionary; }
2612+ else if(JK_EXPECT_T([object isKindOfClass:[NSArray class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.arrayClass = objectISA; } isClass = JKClassArray; }
2613+ else if(JK_EXPECT_T([object isKindOfClass:[NSNull class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.nullClass = objectISA; } isClass = JKClassNull; }
2614+ else {
2615+ if((rerunningAfterClassFormatter == NO) && (
2616+#ifdef __BLOCKS__
2617+ ((encodeState->classFormatterBlock) && ((object = encodeState->classFormatterBlock(object)) != NULL)) ||
2618+#endif
2619+ ((encodeState->classFormatterIMP) && ((object = encodeState->classFormatterIMP(encodeState->classFormatterDelegate, encodeState->classFormatterSelector, object)) != NULL)) )) { rerunningAfterClassFormatter = YES; goto rerunAfterClassFormatter; }
2620+
2621+ if(rerunningAfterClassFormatter == NO) { jk_encode_error(encodeState, @"Unable to serialize object class %@.", NSStringFromClass([encodeCacheObject class])); return(1); }
2622+ else { jk_encode_error(encodeState, @"Unable to serialize object class %@ that was returned by the unsupported class formatter. Original object class was %@.", (object == NULL) ? @"NULL" : NSStringFromClass([object class]), NSStringFromClass([encodeCacheObject class])); return(1); }
2623+ }
2624+ }
2625+
2626+ // This is here for the benefit of the optimizer. It allows the optimizer to do loop invariant code motion for the JKClassArray
2627+ // and JKClassDictionary cases when printing simple, single characters via jk_encode_write(), which is actually a macro:
2628+ // #define jk_encode_write1(es, dc, f) (_jk_encode_prettyPrint ? jk_encode_write1slow(es, dc, f) : jk_encode_write1fast(es, dc, f))
2629+ int _jk_encode_prettyPrint = JK_EXPECT_T((encodeState->serializeOptionFlags & JKSerializeOptionPretty) == 0) ? 0 : 1;
2630+
2631+ switch(isClass) {
2632+ case JKClassString:
2633+ {
2634+ {
2635+ const unsigned char *cStringPtr = (const unsigned char *)CFStringGetCStringPtr((CFStringRef)object, kCFStringEncodingMacRoman);
2636+ if(cStringPtr != NULL) {
2637+ const unsigned char *utf8String = cStringPtr;
2638+ size_t utf8Idx = 0UL;
2639+
2640+ CFIndex stringLength = CFStringGetLength((CFStringRef)object);
2641+ if(JK_EXPECT_F(((encodeState->atIndex + (stringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (stringLength * 2UL) + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2642+
2643+ if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; }
2644+ for(utf8Idx = 0UL; utf8String[utf8Idx] != 0U; utf8Idx++) {
2645+ NSCParameterAssert(((&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex]) - encodeState->stringBuffer.bytes.ptr) < (ssize_t)encodeState->stringBuffer.bytes.length);
2646+ NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length);
2647+ if(JK_EXPECT_F(utf8String[utf8Idx] >= 0x80U)) { encodeState->atIndex = startingAtIndex; goto slowUTF8Path; }
2648+ if(JK_EXPECT_F(utf8String[utf8Idx] < 0x20U)) {
2649+ switch(utf8String[utf8Idx]) {
2650+ case '\b': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'b'; break;
2651+ case '\f': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'f'; break;
2652+ case '\n': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'n'; break;
2653+ case '\r': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'r'; break;
2654+ case '\t': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 't'; break;
2655+ default: if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", utf8String[utf8Idx]))) { return(1); } break;
2656+ }
2657+ } else {
2658+ if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\') || (JK_EXPECT_F(encodeState->serializeOptionFlags & JKSerializeOptionEscapeForwardSlashes) && JK_EXPECT_F(utf8String[utf8Idx] == '/'))) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; }
2659+ encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = utf8String[utf8Idx];
2660+ }
2661+ }
2662+ NSCParameterAssert((encodeState->atIndex + 1UL) < encodeState->stringBuffer.bytes.length);
2663+ if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; }
2664+ jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, encodeCacheObject);
2665+ return(0);
2666+ }
2667+ }
2668+
2669+ slowUTF8Path:
2670+ {
2671+ CFIndex stringLength = CFStringGetLength((CFStringRef)object);
2672+ CFIndex maxStringUTF8Length = CFStringGetMaximumSizeForEncoding(stringLength, kCFStringEncodingUTF8) + 32L;
2673+
2674+ if(JK_EXPECT_F((size_t)maxStringUTF8Length > encodeState->utf8ConversionBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->utf8ConversionBuffer, maxStringUTF8Length + 1024UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2675+
2676+ CFIndex usedBytes = 0L, convertedCount = 0L;
2677+ convertedCount = CFStringGetBytes((CFStringRef)object, CFRangeMake(0L, stringLength), kCFStringEncodingUTF8, '?', NO, encodeState->utf8ConversionBuffer.bytes.ptr, encodeState->utf8ConversionBuffer.bytes.length - 16L, &usedBytes);
2678+ if(JK_EXPECT_F(convertedCount != stringLength) || JK_EXPECT_F(usedBytes < 0L)) { jk_encode_error(encodeState, @"An error occurred converting the contents of a NSString to UTF8."); return(1); }
2679+
2680+ if(JK_EXPECT_F((encodeState->atIndex + (maxStringUTF8Length * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (maxStringUTF8Length * 2UL) + 1024UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); }
2681+
2682+ const unsigned char *utf8String = encodeState->utf8ConversionBuffer.bytes.ptr;
2683+
2684+ size_t utf8Idx = 0UL;
2685+ if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; }
2686+ for(utf8Idx = 0UL; utf8Idx < (size_t)usedBytes; utf8Idx++) {
2687+ NSCParameterAssert(((&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex]) - encodeState->stringBuffer.bytes.ptr) < (ssize_t)encodeState->stringBuffer.bytes.length);
2688+ NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length);
2689+ NSCParameterAssert((CFIndex)utf8Idx < usedBytes);
2690+ if(JK_EXPECT_F(utf8String[utf8Idx] < 0x20U)) {
2691+ switch(utf8String[utf8Idx]) {
2692+ case '\b': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'b'; break;
2693+ case '\f': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'f'; break;
2694+ case '\n': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'n'; break;
2695+ case '\r': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'r'; break;
2696+ case '\t': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 't'; break;
2697+ default: if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", utf8String[utf8Idx]))) { return(1); } break;
2698+ }
2699+ } else {
2700+ if(JK_EXPECT_F(utf8String[utf8Idx] >= 0x80U) && (encodeState->serializeOptionFlags & JKSerializeOptionEscapeUnicode)) {
2701+ const unsigned char *nextValidCharacter = NULL;
2702+ UTF32 u32ch = 0U;
2703+ ConversionResult result;
2704+
2705+ if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(&utf8String[utf8Idx], &utf8String[usedBytes], (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) { jk_encode_error(encodeState, @"Error converting UTF8."); return(1); }
2706+ else {
2707+ utf8Idx = (nextValidCharacter - utf8String) - 1UL;
2708+ if(JK_EXPECT_T(u32ch <= 0xffffU)) { if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", u32ch))) { return(1); } }
2709+ else { if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x\\u%4.4x", (0xd7c0U + (u32ch >> 10)), (0xdc00U + (u32ch & 0x3ffU))))) { return(1); } }
2710+ }
2711+ } else {
2712+ if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\') || (JK_EXPECT_F(encodeState->serializeOptionFlags & JKSerializeOptionEscapeForwardSlashes) && JK_EXPECT_F(utf8String[utf8Idx] == '/'))) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; }
2713+ encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = utf8String[utf8Idx];
2714+ }
2715+ }
2716+ }
2717+ NSCParameterAssert((encodeState->atIndex + 1UL) < encodeState->stringBuffer.bytes.length);
2718+ if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; }
2719+ jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, encodeCacheObject);
2720+ return(0);
2721+ }
2722+ }
2723+ break;
2724+
2725+ case JKClassNumber:
2726+ {
2727+ if(object == (id)kCFBooleanTrue) { return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "true", 4UL)); }
2728+ else if(object == (id)kCFBooleanFalse) { return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "false", 5UL)); }
2729+
2730+ const char *objCType = [object objCType];
2731+ char anum[256], *aptr = &anum[255];
2732+ int isNegative = 0;
2733+ unsigned long long ullv;
2734+ long long llv;
2735+
2736+ if(JK_EXPECT_F(objCType == NULL) || JK_EXPECT_F(objCType[0] == 0) || JK_EXPECT_F(objCType[1] != 0)) { jk_encode_error(encodeState, @"NSNumber conversion error, unknown type. Type: '%s'", (objCType == NULL) ? "<NULL>" : objCType); return(1); }
2737+
2738+ switch(objCType[0]) {
2739+ case 'c': case 'i': case 's': case 'l': case 'q':
2740+ if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberLongLongType, &llv))) {
2741+ if(llv < 0LL) { ullv = -llv; isNegative = 1; } else { ullv = llv; isNegative = 0; }
2742+ goto convertNumber;
2743+ } else { jk_encode_error(encodeState, @"Unable to get scalar value from number object."); return(1); }
2744+ break;
2745+ case 'C': case 'I': case 'S': case 'L': case 'Q': case 'B':
2746+ if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberLongLongType, &ullv))) {
2747+ convertNumber:
2748+ if(JK_EXPECT_F(ullv < 10ULL)) { *--aptr = ullv + '0'; } else { while(JK_EXPECT_T(ullv > 0ULL)) { *--aptr = (ullv % 10ULL) + '0'; ullv /= 10ULL; NSCParameterAssert(aptr > anum); } }
2749+ if(isNegative) { *--aptr = '-'; }
2750+ NSCParameterAssert(aptr > anum);
2751+ return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, aptr, &anum[255] - aptr));
2752+ } else { jk_encode_error(encodeState, @"Unable to get scalar value from number object."); return(1); }
2753+ break;
2754+ case 'f': case 'd':
2755+ {
2756+ double dv;
2757+ if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberDoubleType, &dv))) {
2758+ if(JK_EXPECT_F(!isfinite(dv))) { jk_encode_error(encodeState, @"Floating point values must be finite. JSON does not support NaN or Infinity."); return(1); }
2759+ return(jk_encode_printf(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "%.17g", dv));
2760+ } else { jk_encode_error(encodeState, @"Unable to get floating point value from number object."); return(1); }
2761+ }
2762+ break;
2763+ default: jk_encode_error(encodeState, @"NSNumber conversion error, unknown type. Type: '%c' / 0x%2.2x", objCType[0], objCType[0]); return(1); break;
2764+ }
2765+ }
2766+ break;
2767+
2768+ case JKClassArray:
2769+ {
2770+ int printComma = 0;
2771+ CFIndex arrayCount = CFArrayGetCount((CFArrayRef)object), idx = 0L;
2772+ if(JK_EXPECT_F(jk_encode_write1(encodeState, 1L, "["))) { return(1); }
2773+ if(JK_EXPECT_F(arrayCount > 1020L)) {
2774+ for(id arrayObject in object) { if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } printComma = 1; if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, arrayObject))) { return(1); } }
2775+ } else {
2776+ void *objects[1024];
2777+ CFArrayGetValues((CFArrayRef)object, CFRangeMake(0L, arrayCount), (const void **)objects);
2778+ for(idx = 0L; idx < arrayCount; idx++) { if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } printComma = 1; if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, objects[idx]))) { return(1); } }
2779+ }
2780+ return(jk_encode_write1(encodeState, -1L, "]"));
2781+ }
2782+ break;
2783+
2784+ case JKClassDictionary:
2785+ {
2786+ int printComma = 0;
2787+ CFIndex dictionaryCount = CFDictionaryGetCount((CFDictionaryRef)object), idx = 0L;
2788+ id enumerateObject = JK_EXPECT_F(_jk_encode_prettyPrint) ? [[object allKeys] sortedArrayUsingSelector:@selector(compare:)] : object;
2789+
2790+ if(JK_EXPECT_F(jk_encode_write1(encodeState, 1L, "{"))) { return(1); }
2791+ if(JK_EXPECT_F(_jk_encode_prettyPrint) || JK_EXPECT_F(dictionaryCount > 1020L)) {
2792+ for(id keyObject in enumerateObject) {
2793+ if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } }
2794+ printComma = 1;
2795+ void *keyObjectISA = *((void **)keyObject);
2796+ if(JK_EXPECT_F((keyObjectISA != encodeState->fastClassLookup.stringClass)) && JK_EXPECT_F(([keyObject isKindOfClass:[NSString class]] == NO))) { jk_encode_error(encodeState, @"Key must be a string object."); return(1); }
2797+ if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, keyObject))) { return(1); }
2798+ if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ":"))) { return(1); }
2799+ if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, (void *)CFDictionaryGetValue((CFDictionaryRef)object, keyObject)))) { return(1); }
2800+ }
2801+ } else {
2802+ void *keys[1024], *objects[1024];
2803+ CFDictionaryGetKeysAndValues((CFDictionaryRef)object, (const void **)keys, (const void **)objects);
2804+ for(idx = 0L; idx < dictionaryCount; idx++) {
2805+ if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } }
2806+ printComma = 1;
2807+ void *keyObjectISA = *((void **)keys[idx]);
2808+ if(JK_EXPECT_F(keyObjectISA != encodeState->fastClassLookup.stringClass) && JK_EXPECT_F([(id)keys[idx] isKindOfClass:[NSString class]] == NO)) { jk_encode_error(encodeState, @"Key must be a string object."); return(1); }
2809+ if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, keys[idx]))) { return(1); }
2810+ if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ":"))) { return(1); }
2811+ if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, objects[idx]))) { return(1); }
2812+ }
2813+ }
2814+ return(jk_encode_write1(encodeState, -1L, "}"));
2815+ }
2816+ break;
2817+
2818+ case JKClassNull: return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "null", 4UL)); break;
2819+
2820+ default: jk_encode_error(encodeState, @"Unable to serialize object class %@.", NSStringFromClass([object class])); return(1); break;
2821+ }
2822+
2823+ return(0);
2824+}
2825+
2826+
2827+@implementation JKSerializer
2828+
2829++ (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error
2830+{
2831+ return([[[[self alloc] init] autorelease] serializeObject:object options:optionFlags encodeOption:encodeOption block:block delegate:delegate selector:selector error:error]);
2832+}
2833+
2834+- (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error
2835+{
2836+#ifndef __BLOCKS__
2837+#pragma unused(block)
2838+#endif
2839+ NSParameterAssert((object != NULL) && (encodeState == NULL) && ((delegate != NULL) ? (block == NULL) : 1) && ((block != NULL) ? (delegate == NULL) : 1) &&
2840+ (((encodeOption & JKEncodeOptionCollectionObj) != 0UL) ? (((encodeOption & JKEncodeOptionStringObj) == 0UL) && ((encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) : 1) &&
2841+ (((encodeOption & JKEncodeOptionStringObj) != 0UL) ? ((encodeOption & JKEncodeOptionCollectionObj) == 0UL) : 1));
2842+
2843+ id returnObject = NULL;
2844+
2845+ if(encodeState != NULL) { [self releaseState]; }
2846+ if((encodeState = (struct JKEncodeState *)calloc(1UL, sizeof(JKEncodeState))) == NULL) { [NSException raise:NSMallocException format:@"Unable to allocate state structure."]; return(NULL); }
2847+
2848+ if((error != NULL) && (*error != NULL)) { *error = NULL; }
2849+
2850+ if(delegate != NULL) {
2851+ if(selector == NULL) { [NSException raise:NSInvalidArgumentException format:@"The delegate argument is not NULL, but the selector argument is NULL."]; }
2852+ if([delegate respondsToSelector:selector] == NO) { [NSException raise:NSInvalidArgumentException format:@"The serializeUnsupportedClassesUsingDelegate: delegate does not respond to the selector argument."]; }
2853+ encodeState->classFormatterDelegate = delegate;
2854+ encodeState->classFormatterSelector = selector;
2855+ encodeState->classFormatterIMP = (JKClassFormatterIMP)[delegate methodForSelector:selector];
2856+ NSCParameterAssert(encodeState->classFormatterIMP != NULL);
2857+ }
2858+
2859+#ifdef __BLOCKS__
2860+ encodeState->classFormatterBlock = block;
2861+#endif
2862+ encodeState->serializeOptionFlags = optionFlags;
2863+ encodeState->encodeOption = encodeOption;
2864+ encodeState->stringBuffer.roundSizeUpToMultipleOf = (1024UL * 32UL);
2865+ encodeState->utf8ConversionBuffer.roundSizeUpToMultipleOf = 4096UL;
2866+
2867+ unsigned char stackJSONBuffer[JK_JSONBUFFER_SIZE] JK_ALIGNED(64);
2868+ jk_managedBuffer_setToStackBuffer(&encodeState->stringBuffer, stackJSONBuffer, sizeof(stackJSONBuffer));
2869+
2870+ unsigned char stackUTF8Buffer[JK_UTF8BUFFER_SIZE] JK_ALIGNED(64);
2871+ jk_managedBuffer_setToStackBuffer(&encodeState->utf8ConversionBuffer, stackUTF8Buffer, sizeof(stackUTF8Buffer));
2872+
2873+ if(((encodeOption & JKEncodeOptionCollectionObj) != 0UL) && (([object isKindOfClass:[NSArray class]] == NO) && ([object isKindOfClass:[NSDictionary class]] == NO))) { jk_encode_error(encodeState, @"Unable to serialize object class %@, expected a NSArray or NSDictionary.", NSStringFromClass([object class])); goto errorExit; }
2874+ if(((encodeOption & JKEncodeOptionStringObj) != 0UL) && ([object isKindOfClass:[NSString class]] == NO)) { jk_encode_error(encodeState, @"Unable to serialize object class %@, expected a NSString.", NSStringFromClass([object class])); goto errorExit; }
2875+
2876+ if(jk_encode_add_atom_to_buffer(encodeState, object) == 0) {
2877+ BOOL stackBuffer = ((encodeState->stringBuffer.flags & JKManagedBufferMustFree) == 0UL) ? YES : NO;
2878+
2879+ if((encodeState->atIndex < 2UL))
2880+ if((stackBuffer == NO) && ((encodeState->stringBuffer.bytes.ptr = (unsigned char *)reallocf(encodeState->stringBuffer.bytes.ptr, encodeState->atIndex + 16UL)) == NULL)) { jk_encode_error(encodeState, @"Unable to realloc buffer"); goto errorExit; }
2881+
2882+ switch((encodeOption & JKEncodeOptionAsTypeMask)) {
2883+ case JKEncodeOptionAsData:
2884+ if(stackBuffer == YES) { if((returnObject = [(id)CFDataCreate( NULL, encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSData object"); } }
2885+ else { if((returnObject = [(id)CFDataCreateWithBytesNoCopy( NULL, encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, NULL) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSData object"); } }
2886+ break;
2887+
2888+ case JKEncodeOptionAsString:
2889+ if(stackBuffer == YES) { if((returnObject = [(id)CFStringCreateWithBytes( NULL, (const UInt8 *)encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, kCFStringEncodingUTF8, NO) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSString object"); } }
2890+ else { if((returnObject = [(id)CFStringCreateWithBytesNoCopy(NULL, (const UInt8 *)encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, kCFStringEncodingUTF8, NO, NULL) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSString object"); } }
2891+ break;
2892+
2893+ default: jk_encode_error(encodeState, @"Unknown encode as type."); break;
2894+ }
2895+
2896+ if((returnObject != NULL) && (stackBuffer == NO)) { encodeState->stringBuffer.flags &= ~JKManagedBufferMustFree; encodeState->stringBuffer.bytes.ptr = NULL; encodeState->stringBuffer.bytes.length = 0UL; }
2897+ }
2898+
2899+errorExit:
2900+ if((encodeState != NULL) && (error != NULL) && (encodeState->error != NULL)) { *error = encodeState->error; encodeState->error = NULL; }
2901+ [self releaseState];
2902+
2903+ return(returnObject);
2904+}
2905+
2906+- (void)releaseState
2907+{
2908+ if(encodeState != NULL) {
2909+ jk_managedBuffer_release(&encodeState->stringBuffer);
2910+ jk_managedBuffer_release(&encodeState->utf8ConversionBuffer);
2911+ free(encodeState); encodeState = NULL;
2912+ }
2913+}
2914+
2915+- (void)dealloc
2916+{
2917+ [self releaseState];
2918+ [super dealloc];
2919+}
2920+
2921+@end
2922+
2923+@implementation NSString (JSONKitSerializing)
2924+
2925+////////////
2926+#pragma mark Methods for serializing a single NSString.
2927+////////////
2928+
2929+// Useful for those who need to serialize just a NSString. Otherwise you would have to do something like [NSArray arrayWithObject:stringToBeJSONSerialized], serializing the array, and then chopping of the extra ^\[.*\]$ square brackets.
2930+
2931+// NSData returning methods...
2932+
2933+- (NSData *)JSONData
2934+{
2935+ return([self JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES error:NULL]);
2936+}
2937+
2938+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error
2939+{
2940+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | ((includeQuotes == NO) ? JKEncodeOptionStringObjTrimQuotes : 0UL) | JKEncodeOptionStringObj) block:NULL delegate:NULL selector:NULL error:error]);
2941+}
2942+
2943+// NSString returning methods...
2944+
2945+- (NSString *)JSONString
2946+{
2947+ return([self JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES error:NULL]);
2948+}
2949+
2950+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error
2951+{
2952+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | ((includeQuotes == NO) ? JKEncodeOptionStringObjTrimQuotes : 0UL) | JKEncodeOptionStringObj) block:NULL delegate:NULL selector:NULL error:error]);
2953+}
2954+
2955+@end
2956+
2957+@implementation NSArray (JSONKitSerializing)
2958+
2959+// NSData returning methods...
2960+
2961+- (NSData *)JSONData
2962+{
2963+ return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]);
2964+}
2965+
2966+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error
2967+{
2968+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]);
2969+}
2970+
2971+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error
2972+{
2973+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]);
2974+}
2975+
2976+// NSString returning methods...
2977+
2978+- (NSString *)JSONString
2979+{
2980+ return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]);
2981+}
2982+
2983+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error
2984+{
2985+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]);
2986+}
2987+
2988+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error
2989+{
2990+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]);
2991+}
2992+
2993+@end
2994+
2995+@implementation NSDictionary (JSONKitSerializing)
2996+
2997+// NSData returning methods...
2998+
2999+- (NSData *)JSONData
3000+{
3001+ return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]);
3002+}
3003+
3004+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error
3005+{
3006+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]);
3007+}
3008+
3009+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error
3010+{
3011+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]);
3012+}
3013+
3014+// NSString returning methods...
3015+
3016+- (NSString *)JSONString
3017+{
3018+ return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]);
3019+}
3020+
3021+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error
3022+{
3023+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]);
3024+}
3025+
3026+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error
3027+{
3028+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]);
3029+}
3030+
3031+@end
3032+
3033+
3034+#ifdef __BLOCKS__
3035+
3036+@implementation NSArray (JSONKitSerializingBlockAdditions)
3037+
3038+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error
3039+{
3040+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]);
3041+}
3042+
3043+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error
3044+{
3045+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]);
3046+}
3047+
3048+@end
3049+
3050+@implementation NSDictionary (JSONKitSerializingBlockAdditions)
3051+
3052+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error
3053+{
3054+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]);
3055+}
3056+
3057+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error
3058+{
3059+ return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]);
3060+}
3061+
3062+@end
3063+
3064+#endif // __BLOCKS__
3065+
tests/JSONTestSuite/parsers/test_JSONKit/bin/test-JSONKitnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.pbxprojnew file+252
@@ -0,0 +1,252 @@
1+// !$*UTF8*$!
2+{
3+ archiveVersion = 1;
4+ classes = {
5+ };
6+ objectVersion = 46;
7+ objects = {
8+
9+/* Begin PBXBuildFile section */
10+ 0388E0421D57F15D00BA0899 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0388E0411D57F15D00BA0899 /* main.m */; };
11+ 0388E04A1D57F16400BA0899 /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0388E0491D57F16400BA0899 /* JSONKit.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
12+/* End PBXBuildFile section */
13+
14+/* Begin PBXCopyFilesBuildPhase section */
15+ 0388E03C1D57F15D00BA0899 /* CopyFiles */ = {
16+ isa = PBXCopyFilesBuildPhase;
17+ buildActionMask = 2147483647;
18+ dstPath = /usr/share/man/man1/;
19+ dstSubfolderSpec = 0;
20+ files = (
21+ );
22+ runOnlyForDeploymentPostprocessing = 1;
23+ };
24+/* End PBXCopyFilesBuildPhase section */
25+
26+/* Begin PBXFileReference section */
27+ 0388E03E1D57F15D00BA0899 /* test-JSONKit */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "test-JSONKit"; sourceTree = BUILT_PRODUCTS_DIR; };
28+ 0388E0411D57F15D00BA0899 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
29+ 0388E0481D57F16400BA0899 /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONKit.h; sourceTree = "<group>"; };
30+ 0388E0491D57F16400BA0899 /* JSONKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSONKit.m; sourceTree = "<group>"; };
31+/* End PBXFileReference section */
32+
33+/* Begin PBXFrameworksBuildPhase section */
34+ 0388E03B1D57F15D00BA0899 /* Frameworks */ = {
35+ isa = PBXFrameworksBuildPhase;
36+ buildActionMask = 2147483647;
37+ files = (
38+ );
39+ runOnlyForDeploymentPostprocessing = 0;
40+ };
41+/* End PBXFrameworksBuildPhase section */
42+
43+/* Begin PBXGroup section */
44+ 0388E0351D57F15D00BA0899 = {
45+ isa = PBXGroup;
46+ children = (
47+ 0388E0481D57F16400BA0899 /* JSONKit.h */,
48+ 0388E0491D57F16400BA0899 /* JSONKit.m */,
49+ 0388E0401D57F15D00BA0899 /* test-JSONKit */,
50+ 0388E03F1D57F15D00BA0899 /* Products */,
51+ );
52+ sourceTree = "<group>";
53+ };
54+ 0388E03F1D57F15D00BA0899 /* Products */ = {
55+ isa = PBXGroup;
56+ children = (
57+ 0388E03E1D57F15D00BA0899 /* test-JSONKit */,
58+ );
59+ name = Products;
60+ sourceTree = "<group>";
61+ };
62+ 0388E0401D57F15D00BA0899 /* test-JSONKit */ = {
63+ isa = PBXGroup;
64+ children = (
65+ 0388E0411D57F15D00BA0899 /* main.m */,
66+ );
67+ path = "test-JSONKit";
68+ sourceTree = "<group>";
69+ };
70+/* End PBXGroup section */
71+
72+/* Begin PBXNativeTarget section */
73+ 0388E03D1D57F15D00BA0899 /* test-JSONKit */ = {
74+ isa = PBXNativeTarget;
75+ buildConfigurationList = 0388E0451D57F15D00BA0899 /* Build configuration list for PBXNativeTarget "test-JSONKit" */;
76+ buildPhases = (
77+ 0388E03A1D57F15D00BA0899 /* Sources */,
78+ 0388E03B1D57F15D00BA0899 /* Frameworks */,
79+ 0388E03C1D57F15D00BA0899 /* CopyFiles */,
80+ );
81+ buildRules = (
82+ );
83+ dependencies = (
84+ );
85+ name = "test-JSONKit";
86+ productName = "test-JSONKit";
87+ productReference = 0388E03E1D57F15D00BA0899 /* test-JSONKit */;
88+ productType = "com.apple.product-type.tool";
89+ };
90+/* End PBXNativeTarget section */
91+
92+/* Begin PBXProject section */
93+ 0388E0361D57F15D00BA0899 /* Project object */ = {
94+ isa = PBXProject;
95+ attributes = {
96+ LastUpgradeCheck = 0730;
97+ ORGANIZATIONNAME = "Nicolas Seriot";
98+ TargetAttributes = {
99+ 0388E03D1D57F15D00BA0899 = {
100+ CreatedOnToolsVersion = 7.3;
101+ };
102+ };
103+ };
104+ buildConfigurationList = 0388E0391D57F15D00BA0899 /* Build configuration list for PBXProject "test-JSONKit" */;
105+ compatibilityVersion = "Xcode 3.2";
106+ developmentRegion = English;
107+ hasScannedForEncodings = 0;
108+ knownRegions = (
109+ en,
110+ );
111+ mainGroup = 0388E0351D57F15D00BA0899;
112+ productRefGroup = 0388E03F1D57F15D00BA0899 /* Products */;
113+ projectDirPath = "";
114+ projectRoot = "";
115+ targets = (
116+ 0388E03D1D57F15D00BA0899 /* test-JSONKit */,
117+ );
118+ };
119+/* End PBXProject section */
120+
121+/* Begin PBXSourcesBuildPhase section */
122+ 0388E03A1D57F15D00BA0899 /* Sources */ = {
123+ isa = PBXSourcesBuildPhase;
124+ buildActionMask = 2147483647;
125+ files = (
126+ 0388E04A1D57F16400BA0899 /* JSONKit.m in Sources */,
127+ 0388E0421D57F15D00BA0899 /* main.m in Sources */,
128+ );
129+ runOnlyForDeploymentPostprocessing = 0;
130+ };
131+/* End PBXSourcesBuildPhase section */
132+
133+/* Begin XCBuildConfiguration section */
134+ 0388E0431D57F15D00BA0899 /* Debug */ = {
135+ isa = XCBuildConfiguration;
136+ buildSettings = {
137+ ALWAYS_SEARCH_USER_PATHS = NO;
138+ CLANG_ANALYZER_NONNULL = YES;
139+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
140+ CLANG_CXX_LIBRARY = "libc++";
141+ CLANG_ENABLE_MODULES = YES;
142+ CLANG_ENABLE_OBJC_ARC = YES;
143+ CLANG_WARN_BOOL_CONVERSION = YES;
144+ CLANG_WARN_CONSTANT_CONVERSION = YES;
145+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
146+ CLANG_WARN_EMPTY_BODY = YES;
147+ CLANG_WARN_ENUM_CONVERSION = YES;
148+ CLANG_WARN_INT_CONVERSION = YES;
149+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
150+ CLANG_WARN_UNREACHABLE_CODE = YES;
151+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
152+ CODE_SIGN_IDENTITY = "-";
153+ COPY_PHASE_STRIP = NO;
154+ DEBUG_INFORMATION_FORMAT = dwarf;
155+ ENABLE_STRICT_OBJC_MSGSEND = YES;
156+ ENABLE_TESTABILITY = YES;
157+ GCC_C_LANGUAGE_STANDARD = gnu99;
158+ GCC_DYNAMIC_NO_PIC = NO;
159+ GCC_NO_COMMON_BLOCKS = YES;
160+ GCC_OPTIMIZATION_LEVEL = 0;
161+ GCC_PREPROCESSOR_DEFINITIONS = (
162+ "DEBUG=1",
163+ "$(inherited)",
164+ );
165+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
166+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
167+ GCC_WARN_UNDECLARED_SELECTOR = YES;
168+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
169+ GCC_WARN_UNUSED_FUNCTION = YES;
170+ GCC_WARN_UNUSED_VARIABLE = YES;
171+ MACOSX_DEPLOYMENT_TARGET = 10.11;
172+ MTL_ENABLE_DEBUG_INFO = YES;
173+ ONLY_ACTIVE_ARCH = YES;
174+ SDKROOT = macosx;
175+ };
176+ name = Debug;
177+ };
178+ 0388E0441D57F15D00BA0899 /* Release */ = {
179+ isa = XCBuildConfiguration;
180+ buildSettings = {
181+ ALWAYS_SEARCH_USER_PATHS = NO;
182+ CLANG_ANALYZER_NONNULL = YES;
183+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
184+ CLANG_CXX_LIBRARY = "libc++";
185+ CLANG_ENABLE_MODULES = YES;
186+ CLANG_ENABLE_OBJC_ARC = YES;
187+ CLANG_WARN_BOOL_CONVERSION = YES;
188+ CLANG_WARN_CONSTANT_CONVERSION = YES;
189+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
190+ CLANG_WARN_EMPTY_BODY = YES;
191+ CLANG_WARN_ENUM_CONVERSION = YES;
192+ CLANG_WARN_INT_CONVERSION = YES;
193+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
194+ CLANG_WARN_UNREACHABLE_CODE = YES;
195+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
196+ CODE_SIGN_IDENTITY = "-";
197+ COPY_PHASE_STRIP = NO;
198+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
199+ ENABLE_NS_ASSERTIONS = NO;
200+ ENABLE_STRICT_OBJC_MSGSEND = YES;
201+ GCC_C_LANGUAGE_STANDARD = gnu99;
202+ GCC_NO_COMMON_BLOCKS = YES;
203+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
204+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
205+ GCC_WARN_UNDECLARED_SELECTOR = YES;
206+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
207+ GCC_WARN_UNUSED_FUNCTION = YES;
208+ GCC_WARN_UNUSED_VARIABLE = YES;
209+ MACOSX_DEPLOYMENT_TARGET = 10.11;
210+ MTL_ENABLE_DEBUG_INFO = NO;
211+ SDKROOT = macosx;
212+ };
213+ name = Release;
214+ };
215+ 0388E0461D57F15D00BA0899 /* Debug */ = {
216+ isa = XCBuildConfiguration;
217+ buildSettings = {
218+ PRODUCT_NAME = "$(TARGET_NAME)";
219+ };
220+ name = Debug;
221+ };
222+ 0388E0471D57F15D00BA0899 /* Release */ = {
223+ isa = XCBuildConfiguration;
224+ buildSettings = {
225+ PRODUCT_NAME = "$(TARGET_NAME)";
226+ };
227+ name = Release;
228+ };
229+/* End XCBuildConfiguration section */
230+
231+/* Begin XCConfigurationList section */
232+ 0388E0391D57F15D00BA0899 /* Build configuration list for PBXProject "test-JSONKit" */ = {
233+ isa = XCConfigurationList;
234+ buildConfigurations = (
235+ 0388E0431D57F15D00BA0899 /* Debug */,
236+ 0388E0441D57F15D00BA0899 /* Release */,
237+ );
238+ defaultConfigurationIsVisible = 0;
239+ defaultConfigurationName = Release;
240+ };
241+ 0388E0451D57F15D00BA0899 /* Build configuration list for PBXNativeTarget "test-JSONKit" */ = {
242+ isa = XCConfigurationList;
243+ buildConfigurations = (
244+ 0388E0461D57F15D00BA0899 /* Debug */,
245+ 0388E0471D57F15D00BA0899 /* Release */,
246+ );
247+ defaultConfigurationIsVisible = 0;
248+ };
249+/* End XCConfigurationList section */
250+ };
251+ rootObject = 0388E0361D57F15D00BA0899 /* Project object */;
252+}
tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7
@@ -0,0 +1,7 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Workspace
3+ version = "1.0">
4+ <FileRef
5+ location = "self:test-JSONKit.xcodeproj">
6+ </FileRef>
7+</Workspace>
tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-JSONKit.xcschemenew file+91
@@ -0,0 +1,91 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<Scheme
3+ LastUpgradeVersion = "0730"
4+ version = "1.3">
5+ <BuildAction
6+ parallelizeBuildables = "YES"
7+ buildImplicitDependencies = "YES">
8+ <BuildActionEntries>
9+ <BuildActionEntry
10+ buildForTesting = "YES"
11+ buildForRunning = "YES"
12+ buildForProfiling = "YES"
13+ buildForArchiving = "YES"
14+ buildForAnalyzing = "YES">
15+ <BuildableReference
16+ BuildableIdentifier = "primary"
17+ BlueprintIdentifier = "0388E03D1D57F15D00BA0899"
18+ BuildableName = "test-JSONKit"
19+ BlueprintName = "test-JSONKit"
20+ ReferencedContainer = "container:test-JSONKit.xcodeproj">
21+ </BuildableReference>
22+ </BuildActionEntry>
23+ </BuildActionEntries>
24+ </BuildAction>
25+ <TestAction
26+ buildConfiguration = "Debug"
27+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+ shouldUseLaunchSchemeArgsEnv = "YES">
30+ <Testables>
31+ </Testables>
32+ <MacroExpansion>
33+ <BuildableReference
34+ BuildableIdentifier = "primary"
35+ BlueprintIdentifier = "0388E03D1D57F15D00BA0899"
36+ BuildableName = "test-JSONKit"
37+ BlueprintName = "test-JSONKit"
38+ ReferencedContainer = "container:test-JSONKit.xcodeproj">
39+ </BuildableReference>
40+ </MacroExpansion>
41+ <AdditionalOptions>
42+ </AdditionalOptions>
43+ </TestAction>
44+ <LaunchAction
45+ buildConfiguration = "Debug"
46+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
47+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
48+ launchStyle = "0"
49+ useCustomWorkingDirectory = "NO"
50+ ignoresPersistentStateOnLaunch = "NO"
51+ debugDocumentVersioning = "YES"
52+ debugServiceExtension = "internal"
53+ allowLocationSimulation = "YES">
54+ <BuildableProductRunnable
55+ runnableDebuggingMode = "0">
56+ <BuildableReference
57+ BuildableIdentifier = "primary"
58+ BlueprintIdentifier = "0388E03D1D57F15D00BA0899"
59+ BuildableName = "test-JSONKit"
60+ BlueprintName = "test-JSONKit"
61+ ReferencedContainer = "container:test-JSONKit.xcodeproj">
62+ </BuildableReference>
63+ </BuildableProductRunnable>
64+ <AdditionalOptions>
65+ </AdditionalOptions>
66+ </LaunchAction>
67+ <ProfileAction
68+ buildConfiguration = "Release"
69+ shouldUseLaunchSchemeArgsEnv = "YES"
70+ savedToolIdentifier = ""
71+ useCustomWorkingDirectory = "NO"
72+ debugDocumentVersioning = "YES">
73+ <BuildableProductRunnable
74+ runnableDebuggingMode = "0">
75+ <BuildableReference
76+ BuildableIdentifier = "primary"
77+ BlueprintIdentifier = "0388E03D1D57F15D00BA0899"
78+ BuildableName = "test-JSONKit"
79+ BlueprintName = "test-JSONKit"
80+ ReferencedContainer = "container:test-JSONKit.xcodeproj">
81+ </BuildableReference>
82+ </BuildableProductRunnable>
83+ </ProfileAction>
84+ <AnalyzeAction
85+ buildConfiguration = "Debug">
86+ </AnalyzeAction>
87+ <ArchiveAction
88+ buildConfiguration = "Release"
89+ revealArchiveInOrganizer = "YES">
90+ </ArchiveAction>
91+</Scheme>
tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22
@@ -0,0 +1,22 @@
1+<?xml version="1.0" encoding="UTF-8"?>
2+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+<plist version="1.0">
4+<dict>
5+ <key>SchemeUserState</key>
6+ <dict>
7+ <key>test-JSONKit.xcscheme</key>
8+ <dict>
9+ <key>orderHint</key>
10+ <integer>0</integer>
11+ </dict>
12+ </dict>
13+ <key>SuppressBuildableAutocreation</key>
14+ <dict>
15+ <key>0388E03D1D57F15D00BA0899</key>
16+ <dict>
17+ <key>primary</key>
18+ <true/>
19+ </dict>
20+ </dict>
21+</dict>
22+</plist>
tests/JSONTestSuite/parsers/test_JSONKit/test-JSONKit/main.mnew file+73
@@ -0,0 +1,73 @@
1+//
2+// main.m
3+// test-JSONKit
4+//
5+// Created by nst on 08/08/16.
6+// Copyright © 2016 Nicolas Seriot. All rights reserved.
7+//
8+
9+#import <Foundation/Foundation.h>
10+#import "JSONKit.h" // https://github.com/johnezang/JSONKit
11+
12+#include <stdio.h>
13+#include <stdlib.h>
14+#include <sys/stat.h>
15+#include <dirent.h>
16+#include <stdio.h>
17+#include <string.h>
18+
19+typedef enum testStatus {ERROR, PASS, FAIL} TestStatus;
20+
21+TestStatus test_file(char* filename, int printParsingResults) {
22+
23+ NSString *path = [NSString stringWithCString:filename encoding:NSUTF8StringEncoding];
24+
25+ //NSLog(@"--- %@", path);
26+
27+// if([path hasSuffix:@"n_structure_100000_opening_arrays.json"]) return ERROR;
28+// if([path hasSuffix:@"n_structure_empty.json"]) return ERROR;
29+
30+ NSData *data = [NSData dataWithContentsOfFile:path];
31+
32+ JSONDecoder *decoder = [JSONDecoder decoderWithParseOptions:JKParseOptionNone];
33+
34+ NSError *error = nil;
35+ id o = [decoder objectWithData:data error:&error];
36+
37+ if (printParsingResults) {
38+ NSLog(@"--------------------------------\n");
39+ NSLog(@"-- file: %@\n", path);
40+ NSLog(@"-- contents: %@\n", data);
41+ NSLog(@"-- parsed: %d\n", o != NULL);
42+ if(o != NULL) {
43+ NSLog(@"-- o: %@", o);
44+ }
45+ }
46+
47+ // if (value == NULL) {
48+ // fprintf(stderr, "Unable to parse data\n");
49+ // free(file_contents);
50+ // return 1;
51+ // }
52+
53+ return o != nil ? PASS : FAIL;
54+}
55+
56+int main(int argc, const char * argv[]) {
57+ @autoreleasepool {
58+
59+ const char* path = argv[1];
60+
61+ int printParsingResults = 0;
62+
63+ int result = test_file(path, printParsingResults);
64+
65+ if (result == PASS) {
66+ return 0;
67+ } else {
68+ return 1;
69+ }
70+
71+ }
72+ return 0;
73+}
tests/JSONTestSuite/parsers/test_Json.NET/Program.csnew file+46
@@ -0,0 +1,46 @@
1+using System;
2+using System.IO;
3+using Newtonsoft.Json;
4+
5+namespace ConsoleApplication
6+{
7+ public class Program
8+ {
9+ public static int Main(string[] args)
10+ {
11+ if (args.Length != 1)
12+ {
13+ Console.Error.WriteLine($"Usage: {Path.GetFileName(Environment.GetCommandLineArgs()[0])} file.json");
14+ return 1;
15+ }
16+
17+ try
18+ {
19+ using (var fileStream = new FileStream(args[0], FileMode.Open))
20+ using (var streamReader = new StreamReader(fileStream))
21+ using (var jsonReader = new JsonTextReader(streamReader))
22+ {
23+ try
24+ {
25+ JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings{
26+ MaxDepth = 512
27+ });
28+ var result = serializer.Deserialize(jsonReader);
29+ Console.WriteLine(result);
30+ }
31+ catch (Exception e)
32+ {
33+ Console.Error.WriteLine(e);
34+ return 1;
35+ }
36+ return 0;
37+ }
38+ }
39+ catch (Exception e)
40+ {
41+ Console.Error.WriteLine(e);
42+ return 2;
43+ }
44+ }
45+ }
46+}
tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/Newtonsoft.Json.dllnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/System.Runtime.Serialization.Primitives.dllnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.deps.jsonnew file+49
@@ -0,0 +1,49 @@
1+{
2+ "runtimeTarget": {
3+ "name": ".NETCoreApp,Version=v1.0",
4+ "signature": "09db60146a5b8a0d40c5ea0fb7485ab3bbdd4a1a"
5+ },
6+ "compilationOptions": {},
7+ "targets": {
8+ ".NETCoreApp,Version=v1.0": {
9+ "test_Json.NET/1.0.0": {
10+ "dependencies": {
11+ "Newtonsoft.Json": "9.0.1"
12+ },
13+ "runtime": {
14+ "test_Json.NET.dll": {}
15+ }
16+ },
17+ "Newtonsoft.Json/9.0.1": {
18+ "dependencies": {
19+ "System.Runtime.Serialization.Primitives": "4.1.1"
20+ },
21+ "runtime": {
22+ "lib/netstandard1.0/Newtonsoft.Json.dll": {}
23+ }
24+ },
25+ "System.Runtime.Serialization.Primitives/4.1.1": {
26+ "runtime": {
27+ "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {}
28+ }
29+ }
30+ }
31+ },
32+ "libraries": {
33+ "test_Json.NET/1.0.0": {
34+ "type": "project",
35+ "serviceable": false,
36+ "sha512": ""
37+ },
38+ "Newtonsoft.Json/9.0.1": {
39+ "type": "package",
40+ "serviceable": true,
41+ "sha512": "sha512-U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw=="
42+ },
43+ "System.Runtime.Serialization.Primitives/4.1.1": {
44+ "type": "package",
45+ "serviceable": true,
46+ "sha512": "sha512-HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg=="
47+ }
48+ }
49+}
tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.dllnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.pdbnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Json.NET/bin/Release/netcoreapp1.0/publish/test_Json.NET.runtimeconfig.jsonnew file+8
@@ -0,0 +1,8 @@
1+{
2+ "runtimeOptions": {
3+ "framework": {
4+ "name": "Microsoft.NETCore.App",
5+ "version": "1.0.1"
6+ }
7+ }
8+}
tests/JSONTestSuite/parsers/test_Json.NET/project.jsonnew file+21
@@ -0,0 +1,21 @@
1+{
2+ "version": "1.0.0-*",
3+ "buildOptions": {
4+ "debugType": "portable",
5+ "emitEntryPoint": true
6+ },
7+ "dependencies": {
8+ "Newtonsoft.Json": "9.0.1"
9+ },
10+ "frameworks": {
11+ "netcoreapp1.0": {
12+ "dependencies": {
13+ "Microsoft.NETCore.App": {
14+ "type": "platform",
15+ "version": "1.0.1"
16+ }
17+ },
18+ "imports": "dnxcore50"
19+ }
20+ }
21+}
tests/JSONTestSuite/parsers/test_Json.NET/project.lock.jsonnew file+6741
@@ -0,0 +1,6741 @@
1+{
2+ "locked": false,
3+ "version": 2,
4+ "targets": {
5+ ".NETCoreApp,Version=v1.0": {
6+ "Libuv/1.9.0": {
7+ "type": "package",
8+ "dependencies": {
9+ "Microsoft.NETCore.Platforms": "1.0.1"
10+ },
11+ "runtimeTargets": {
12+ "runtimes/osx/native/_._": {
13+ "assetType": "native",
14+ "rid": "osx"
15+ }
16+ }
17+ },
18+ "Microsoft.CodeAnalysis.Analyzers/1.1.0": {
19+ "type": "package"
20+ },
21+ "Microsoft.CodeAnalysis.Common/1.3.0": {
22+ "type": "package",
23+ "dependencies": {
24+ "Microsoft.CodeAnalysis.Analyzers": "1.1.0",
25+ "System.AppContext": "4.1.0",
26+ "System.Collections": "4.0.11",
27+ "System.Collections.Concurrent": "4.0.12",
28+ "System.Collections.Immutable": "1.2.0",
29+ "System.Console": "4.0.0",
30+ "System.Diagnostics.Debug": "4.0.11",
31+ "System.Diagnostics.FileVersionInfo": "4.0.0",
32+ "System.Diagnostics.StackTrace": "4.0.1",
33+ "System.Diagnostics.Tools": "4.0.1",
34+ "System.Dynamic.Runtime": "4.0.11",
35+ "System.Globalization": "4.0.11",
36+ "System.IO.FileSystem": "4.0.1",
37+ "System.IO.FileSystem.Primitives": "4.0.1",
38+ "System.Linq": "4.1.0",
39+ "System.Linq.Expressions": "4.1.0",
40+ "System.Reflection": "4.1.0",
41+ "System.Reflection.Metadata": "1.3.0",
42+ "System.Reflection.Primitives": "4.0.1",
43+ "System.Resources.ResourceManager": "4.0.1",
44+ "System.Runtime": "4.1.0",
45+ "System.Runtime.Extensions": "4.1.0",
46+ "System.Runtime.Handles": "4.0.1",
47+ "System.Runtime.InteropServices": "4.1.0",
48+ "System.Runtime.Numerics": "4.0.1",
49+ "System.Security.Cryptography.Algorithms": "4.2.0",
50+ "System.Security.Cryptography.Encoding": "4.0.0",
51+ "System.Security.Cryptography.X509Certificates": "4.1.0",
52+ "System.Text.Encoding": "4.0.11",
53+ "System.Text.Encoding.CodePages": "4.0.1",
54+ "System.Text.Encoding.Extensions": "4.0.11",
55+ "System.Threading": "4.0.11",
56+ "System.Threading.Tasks": "4.0.11",
57+ "System.Threading.Tasks.Parallel": "4.0.1",
58+ "System.Threading.Thread": "4.0.0",
59+ "System.Xml.ReaderWriter": "4.0.11",
60+ "System.Xml.XDocument": "4.0.11",
61+ "System.Xml.XPath.XDocument": "4.0.1",
62+ "System.Xml.XmlDocument": "4.0.1"
63+ },
64+ "compile": {
65+ "lib/netstandard1.3/_._": {}
66+ },
67+ "runtime": {
68+ "lib/netstandard1.3/_._": {}
69+ }
70+ },
71+ "Microsoft.CodeAnalysis.CSharp/1.3.0": {
72+ "type": "package",
73+ "dependencies": {
74+ "Microsoft.CodeAnalysis.Common": "[1.3.0]"
75+ },
76+ "compile": {
77+ "lib/netstandard1.3/_._": {}
78+ },
79+ "runtime": {
80+ "lib/netstandard1.3/_._": {}
81+ }
82+ },
83+ "Microsoft.CodeAnalysis.VisualBasic/1.3.0": {
84+ "type": "package",
85+ "dependencies": {
86+ "Microsoft.CodeAnalysis.Common": "1.3.0"
87+ },
88+ "compile": {
89+ "lib/netstandard1.3/_._": {}
90+ },
91+ "runtime": {
92+ "lib/netstandard1.3/_._": {}
93+ }
94+ },
95+ "Microsoft.CSharp/4.0.1": {
96+ "type": "package",
97+ "dependencies": {
98+ "System.Collections": "4.0.11",
99+ "System.Diagnostics.Debug": "4.0.11",
100+ "System.Dynamic.Runtime": "4.0.11",
101+ "System.Globalization": "4.0.11",
102+ "System.Linq": "4.1.0",
103+ "System.Linq.Expressions": "4.1.0",
104+ "System.ObjectModel": "4.0.12",
105+ "System.Reflection": "4.1.0",
106+ "System.Reflection.Extensions": "4.0.1",
107+ "System.Reflection.Primitives": "4.0.1",
108+ "System.Reflection.TypeExtensions": "4.1.0",
109+ "System.Resources.ResourceManager": "4.0.1",
110+ "System.Runtime": "4.1.0",
111+ "System.Runtime.Extensions": "4.1.0",
112+ "System.Runtime.InteropServices": "4.1.0",
113+ "System.Threading": "4.0.11"
114+ },
115+ "compile": {
116+ "ref/netstandard1.0/Microsoft.CSharp.dll": {}
117+ },
118+ "runtime": {
119+ "lib/netstandard1.3/Microsoft.CSharp.dll": {}
120+ }
121+ },
122+ "Microsoft.NETCore.App/1.0.1": {
123+ "type": "package",
124+ "dependencies": {
125+ "Libuv": "1.9.0",
126+ "Microsoft.CSharp": "4.0.1",
127+ "Microsoft.CodeAnalysis.CSharp": "1.3.0",
128+ "Microsoft.CodeAnalysis.VisualBasic": "1.3.0",
129+ "Microsoft.NETCore.DotNetHostPolicy": "1.0.1",
130+ "Microsoft.NETCore.Runtime.CoreCLR": "1.0.4",
131+ "Microsoft.VisualBasic": "10.0.1",
132+ "NETStandard.Library": "1.6.0",
133+ "System.Buffers": "4.0.0",
134+ "System.Collections.Immutable": "1.2.0",
135+ "System.ComponentModel": "4.0.1",
136+ "System.ComponentModel.Annotations": "4.1.0",
137+ "System.Diagnostics.DiagnosticSource": "4.0.0",
138+ "System.Diagnostics.Process": "4.1.0",
139+ "System.Dynamic.Runtime": "4.0.11",
140+ "System.Globalization.Extensions": "4.0.1",
141+ "System.IO.FileSystem.Watcher": "4.0.0",
142+ "System.IO.MemoryMappedFiles": "4.0.0",
143+ "System.IO.UnmanagedMemoryStream": "4.0.1",
144+ "System.Linq.Expressions": "4.1.0",
145+ "System.Linq.Parallel": "4.0.1",
146+ "System.Linq.Queryable": "4.0.1",
147+ "System.Net.NameResolution": "4.0.0",
148+ "System.Net.Requests": "4.0.11",
149+ "System.Net.Security": "4.0.0",
150+ "System.Net.WebHeaderCollection": "4.0.1",
151+ "System.Numerics.Vectors": "4.1.1",
152+ "System.Reflection.DispatchProxy": "4.0.1",
153+ "System.Reflection.Metadata": "1.3.0",
154+ "System.Reflection.TypeExtensions": "4.1.0",
155+ "System.Resources.Reader": "4.0.0",
156+ "System.Runtime.Loader": "4.0.0",
157+ "System.Security.Cryptography.Algorithms": "4.2.0",
158+ "System.Security.Cryptography.Encoding": "4.0.0",
159+ "System.Security.Cryptography.Primitives": "4.0.0",
160+ "System.Security.Cryptography.X509Certificates": "4.1.0",
161+ "System.Threading.Tasks.Dataflow": "4.6.0",
162+ "System.Threading.Tasks.Extensions": "4.0.0",
163+ "System.Threading.Tasks.Parallel": "4.0.1",
164+ "System.Threading.Thread": "4.0.0",
165+ "System.Threading.ThreadPool": "4.0.10"
166+ },
167+ "compile": {
168+ "lib/netcoreapp1.0/_._": {}
169+ },
170+ "runtime": {
171+ "lib/netcoreapp1.0/_._": {}
172+ }
173+ },
174+ "Microsoft.NETCore.DotNetHost/1.0.1": {
175+ "type": "package"
176+ },
177+ "Microsoft.NETCore.DotNetHostPolicy/1.0.1": {
178+ "type": "package",
179+ "dependencies": {
180+ "Microsoft.NETCore.DotNetHostResolver": "1.0.1"
181+ }
182+ },
183+ "Microsoft.NETCore.DotNetHostResolver/1.0.1": {
184+ "type": "package",
185+ "dependencies": {
186+ "Microsoft.NETCore.DotNetHost": "1.0.1"
187+ }
188+ },
189+ "Microsoft.NETCore.Jit/1.0.4": {
190+ "type": "package"
191+ },
192+ "Microsoft.NETCore.Platforms/1.0.1": {
193+ "type": "package",
194+ "compile": {
195+ "lib/netstandard1.0/_._": {}
196+ },
197+ "runtime": {
198+ "lib/netstandard1.0/_._": {}
199+ }
200+ },
201+ "Microsoft.NETCore.Runtime.CoreCLR/1.0.4": {
202+ "type": "package",
203+ "dependencies": {
204+ "Microsoft.NETCore.Jit": "1.0.4",
205+ "Microsoft.NETCore.Windows.ApiSets": "1.0.1"
206+ }
207+ },
208+ "Microsoft.NETCore.Targets/1.0.1": {
209+ "type": "package",
210+ "compile": {
211+ "lib/netstandard1.0/_._": {}
212+ },
213+ "runtime": {
214+ "lib/netstandard1.0/_._": {}
215+ }
216+ },
217+ "Microsoft.NETCore.Windows.ApiSets/1.0.1": {
218+ "type": "package"
219+ },
220+ "Microsoft.VisualBasic/10.0.1": {
221+ "type": "package",
222+ "dependencies": {
223+ "System.Collections": "4.0.11",
224+ "System.Diagnostics.Debug": "4.0.11",
225+ "System.Dynamic.Runtime": "4.0.11",
226+ "System.Globalization": "4.0.11",
227+ "System.Linq": "4.1.0",
228+ "System.Linq.Expressions": "4.1.0",
229+ "System.ObjectModel": "4.0.12",
230+ "System.Reflection": "4.1.0",
231+ "System.Reflection.Extensions": "4.0.1",
232+ "System.Reflection.Primitives": "4.0.1",
233+ "System.Reflection.TypeExtensions": "4.1.0",
234+ "System.Resources.ResourceManager": "4.0.1",
235+ "System.Runtime": "4.1.0",
236+ "System.Runtime.Extensions": "4.1.0",
237+ "System.Runtime.InteropServices": "4.1.0",
238+ "System.Threading": "4.0.11"
239+ },
240+ "compile": {
241+ "ref/netstandard1.1/Microsoft.VisualBasic.dll": {}
242+ },
243+ "runtime": {
244+ "lib/netstandard1.3/_._": {}
245+ }
246+ },
247+ "Microsoft.Win32.Primitives/4.0.1": {
248+ "type": "package",
249+ "dependencies": {
250+ "Microsoft.NETCore.Platforms": "1.0.1",
251+ "Microsoft.NETCore.Targets": "1.0.1",
252+ "System.Runtime": "4.1.0"
253+ },
254+ "compile": {
255+ "ref/netstandard1.3/Microsoft.Win32.Primitives.dll": {}
256+ }
257+ },
258+ "Microsoft.Win32.Registry/4.0.0": {
259+ "type": "package",
260+ "dependencies": {
261+ "Microsoft.NETCore.Platforms": "1.0.1",
262+ "System.Collections": "4.0.11",
263+ "System.Globalization": "4.0.11",
264+ "System.Resources.ResourceManager": "4.0.1",
265+ "System.Runtime": "4.1.0",
266+ "System.Runtime.Extensions": "4.1.0",
267+ "System.Runtime.Handles": "4.0.1",
268+ "System.Runtime.InteropServices": "4.1.0"
269+ },
270+ "compile": {
271+ "ref/netstandard1.3/_._": {}
272+ },
273+ "runtimeTargets": {
274+ "runtimes/win/lib/netstandard1.3/_._": {
275+ "assetType": "runtime",
276+ "rid": "win"
277+ }
278+ }
279+ },
280+ "NETStandard.Library/1.6.0": {
281+ "type": "package",
282+ "dependencies": {
283+ "Microsoft.NETCore.Platforms": "1.0.1",
284+ "Microsoft.Win32.Primitives": "4.0.1",
285+ "System.AppContext": "4.1.0",
286+ "System.Collections": "4.0.11",
287+ "System.Collections.Concurrent": "4.0.12",
288+ "System.Console": "4.0.0",
289+ "System.Diagnostics.Debug": "4.0.11",
290+ "System.Diagnostics.Tools": "4.0.1",
291+ "System.Diagnostics.Tracing": "4.1.0",
292+ "System.Globalization": "4.0.11",
293+ "System.Globalization.Calendars": "4.0.1",
294+ "System.IO": "4.1.0",
295+ "System.IO.Compression": "4.1.0",
296+ "System.IO.Compression.ZipFile": "4.0.1",
297+ "System.IO.FileSystem": "4.0.1",
298+ "System.IO.FileSystem.Primitives": "4.0.1",
299+ "System.Linq": "4.1.0",
300+ "System.Linq.Expressions": "4.1.0",
301+ "System.Net.Http": "4.1.0",
302+ "System.Net.Primitives": "4.0.11",
303+ "System.Net.Sockets": "4.1.0",
304+ "System.ObjectModel": "4.0.12",
305+ "System.Reflection": "4.1.0",
306+ "System.Reflection.Extensions": "4.0.1",
307+ "System.Reflection.Primitives": "4.0.1",
308+ "System.Resources.ResourceManager": "4.0.1",
309+ "System.Runtime": "4.1.0",
310+ "System.Runtime.Extensions": "4.1.0",
311+ "System.Runtime.Handles": "4.0.1",
312+ "System.Runtime.InteropServices": "4.1.0",
313+ "System.Runtime.InteropServices.RuntimeInformation": "4.0.0",
314+ "System.Runtime.Numerics": "4.0.1",
315+ "System.Security.Cryptography.Algorithms": "4.2.0",
316+ "System.Security.Cryptography.Encoding": "4.0.0",
317+ "System.Security.Cryptography.Primitives": "4.0.0",
318+ "System.Security.Cryptography.X509Certificates": "4.1.0",
319+ "System.Text.Encoding": "4.0.11",
320+ "System.Text.Encoding.Extensions": "4.0.11",
321+ "System.Text.RegularExpressions": "4.1.0",
322+ "System.Threading": "4.0.11",
323+ "System.Threading.Tasks": "4.0.11",
324+ "System.Threading.Timer": "4.0.1",
325+ "System.Xml.ReaderWriter": "4.0.11",
326+ "System.Xml.XDocument": "4.0.11"
327+ }
328+ },
329+ "Newtonsoft.Json/9.0.1": {
330+ "type": "package",
331+ "dependencies": {
332+ "Microsoft.CSharp": "4.0.1",
333+ "System.Collections": "4.0.11",
334+ "System.Diagnostics.Debug": "4.0.11",
335+ "System.Dynamic.Runtime": "4.0.11",
336+ "System.Globalization": "4.0.11",
337+ "System.IO": "4.1.0",
338+ "System.Linq": "4.1.0",
339+ "System.Linq.Expressions": "4.1.0",
340+ "System.ObjectModel": "4.0.12",
341+ "System.Reflection": "4.1.0",
342+ "System.Reflection.Extensions": "4.0.1",
343+ "System.Resources.ResourceManager": "4.0.1",
344+ "System.Runtime": "4.1.0",
345+ "System.Runtime.Extensions": "4.1.0",
346+ "System.Runtime.Serialization.Primitives": "4.1.1",
347+ "System.Text.Encoding": "4.0.11",
348+ "System.Text.Encoding.Extensions": "4.0.11",
349+ "System.Text.RegularExpressions": "4.1.0",
350+ "System.Threading": "4.0.11",
351+ "System.Threading.Tasks": "4.0.11",
352+ "System.Xml.ReaderWriter": "4.0.11",
353+ "System.Xml.XDocument": "4.0.11"
354+ },
355+ "compile": {
356+ "lib/netstandard1.0/Newtonsoft.Json.dll": {}
357+ },
358+ "runtime": {
359+ "lib/netstandard1.0/Newtonsoft.Json.dll": {}
360+ }
361+ },
362+ "runtime.native.System/4.0.0": {
363+ "type": "package",
364+ "dependencies": {
365+ "Microsoft.NETCore.Platforms": "1.0.1",
366+ "Microsoft.NETCore.Targets": "1.0.1"
367+ },
368+ "compile": {
369+ "lib/netstandard1.0/_._": {}
370+ },
371+ "runtime": {
372+ "lib/netstandard1.0/_._": {}
373+ }
374+ },
375+ "runtime.native.System.IO.Compression/4.1.0": {
376+ "type": "package",
377+ "dependencies": {
378+ "Microsoft.NETCore.Platforms": "1.0.1",
379+ "Microsoft.NETCore.Targets": "1.0.1"
380+ },
381+ "compile": {
382+ "lib/netstandard1.0/_._": {}
383+ },
384+ "runtime": {
385+ "lib/netstandard1.0/_._": {}
386+ }
387+ },
388+ "runtime.native.System.Net.Http/4.0.1": {
389+ "type": "package",
390+ "dependencies": {
391+ "Microsoft.NETCore.Platforms": "1.0.1",
392+ "Microsoft.NETCore.Targets": "1.0.1"
393+ },
394+ "compile": {
395+ "lib/netstandard1.0/_._": {}
396+ },
397+ "runtime": {
398+ "lib/netstandard1.0/_._": {}
399+ }
400+ },
401+ "runtime.native.System.Net.Security/4.0.1": {
402+ "type": "package",
403+ "dependencies": {
404+ "Microsoft.NETCore.Platforms": "1.0.1",
405+ "Microsoft.NETCore.Targets": "1.0.1"
406+ },
407+ "compile": {
408+ "lib/netstandard1.0/_._": {}
409+ },
410+ "runtime": {
411+ "lib/netstandard1.0/_._": {}
412+ }
413+ },
414+ "runtime.native.System.Security.Cryptography/4.0.0": {
415+ "type": "package",
416+ "dependencies": {
417+ "Microsoft.NETCore.Platforms": "1.0.1",
418+ "Microsoft.NETCore.Targets": "1.0.1"
419+ },
420+ "compile": {
421+ "lib/netstandard1.0/_._": {}
422+ },
423+ "runtime": {
424+ "lib/netstandard1.0/_._": {}
425+ }
426+ },
427+ "System.AppContext/4.1.0": {
428+ "type": "package",
429+ "dependencies": {
430+ "System.Runtime": "4.1.0"
431+ },
432+ "compile": {
433+ "ref/netstandard1.6/System.AppContext.dll": {}
434+ },
435+ "runtime": {
436+ "lib/netstandard1.6/_._": {}
437+ }
438+ },
439+ "System.Buffers/4.0.0": {
440+ "type": "package",
441+ "dependencies": {
442+ "System.Diagnostics.Debug": "4.0.11",
443+ "System.Diagnostics.Tracing": "4.1.0",
444+ "System.Resources.ResourceManager": "4.0.1",
445+ "System.Runtime": "4.1.0",
446+ "System.Threading": "4.0.11"
447+ },
448+ "compile": {
449+ "lib/netstandard1.1/System.Buffers.dll": {}
450+ },
451+ "runtime": {
452+ "lib/netstandard1.1/_._": {}
453+ }
454+ },
455+ "System.Collections/4.0.11": {
456+ "type": "package",
457+ "dependencies": {
458+ "Microsoft.NETCore.Platforms": "1.0.1",
459+ "Microsoft.NETCore.Targets": "1.0.1",
460+ "System.Runtime": "4.1.0"
461+ },
462+ "compile": {
463+ "ref/netstandard1.3/System.Collections.dll": {}
464+ }
465+ },
466+ "System.Collections.Concurrent/4.0.12": {
467+ "type": "package",
468+ "dependencies": {
469+ "System.Collections": "4.0.11",
470+ "System.Diagnostics.Debug": "4.0.11",
471+ "System.Diagnostics.Tracing": "4.1.0",
472+ "System.Globalization": "4.0.11",
473+ "System.Reflection": "4.1.0",
474+ "System.Resources.ResourceManager": "4.0.1",
475+ "System.Runtime": "4.1.0",
476+ "System.Runtime.Extensions": "4.1.0",
477+ "System.Threading": "4.0.11",
478+ "System.Threading.Tasks": "4.0.11"
479+ },
480+ "compile": {
481+ "ref/netstandard1.3/System.Collections.Concurrent.dll": {}
482+ },
483+ "runtime": {
484+ "lib/netstandard1.3/_._": {}
485+ }
486+ },
487+ "System.Collections.Immutable/1.2.0": {
488+ "type": "package",
489+ "dependencies": {
490+ "System.Collections": "4.0.11",
491+ "System.Diagnostics.Debug": "4.0.11",
492+ "System.Globalization": "4.0.11",
493+ "System.Linq": "4.1.0",
494+ "System.Resources.ResourceManager": "4.0.1",
495+ "System.Runtime": "4.1.0",
496+ "System.Runtime.Extensions": "4.1.0",
497+ "System.Threading": "4.0.11"
498+ },
499+ "compile": {
500+ "lib/netstandard1.0/System.Collections.Immutable.dll": {}
501+ },
502+ "runtime": {
503+ "lib/netstandard1.0/_._": {}
504+ }
505+ },
506+ "System.ComponentModel/4.0.1": {
507+ "type": "package",
508+ "dependencies": {
509+ "System.Runtime": "4.1.0"
510+ },
511+ "compile": {
512+ "ref/netstandard1.0/System.ComponentModel.dll": {}
513+ },
514+ "runtime": {
515+ "lib/netstandard1.3/_._": {}
516+ }
517+ },
518+ "System.ComponentModel.Annotations/4.1.0": {
519+ "type": "package",
520+ "dependencies": {
521+ "System.Collections": "4.0.11",
522+ "System.ComponentModel": "4.0.1",
523+ "System.Globalization": "4.0.11",
524+ "System.Linq": "4.1.0",
525+ "System.Reflection": "4.1.0",
526+ "System.Reflection.Extensions": "4.0.1",
527+ "System.Resources.ResourceManager": "4.0.1",
528+ "System.Runtime": "4.1.0",
529+ "System.Runtime.Extensions": "4.1.0",
530+ "System.Text.RegularExpressions": "4.1.0",
531+ "System.Threading": "4.0.11"
532+ },
533+ "compile": {
534+ "ref/netstandard1.4/System.ComponentModel.Annotations.dll": {}
535+ },
536+ "runtime": {
537+ "lib/netstandard1.4/_._": {}
538+ }
539+ },
540+ "System.Console/4.0.0": {
541+ "type": "package",
542+ "dependencies": {
543+ "Microsoft.NETCore.Platforms": "1.0.1",
544+ "Microsoft.NETCore.Targets": "1.0.1",
545+ "System.IO": "4.1.0",
546+ "System.Runtime": "4.1.0",
547+ "System.Text.Encoding": "4.0.11"
548+ },
549+ "compile": {
550+ "ref/netstandard1.3/System.Console.dll": {}
551+ }
552+ },
553+ "System.Diagnostics.Debug/4.0.11": {
554+ "type": "package",
555+ "dependencies": {
556+ "Microsoft.NETCore.Platforms": "1.0.1",
557+ "Microsoft.NETCore.Targets": "1.0.1",
558+ "System.Runtime": "4.1.0"
559+ },
560+ "compile": {
561+ "ref/netstandard1.3/System.Diagnostics.Debug.dll": {}
562+ }
563+ },
564+ "System.Diagnostics.DiagnosticSource/4.0.0": {
565+ "type": "package",
566+ "dependencies": {
567+ "System.Collections": "4.0.11",
568+ "System.Diagnostics.Tracing": "4.1.0",
569+ "System.Reflection": "4.1.0",
570+ "System.Runtime": "4.1.0",
571+ "System.Threading": "4.0.11"
572+ },
573+ "compile": {
574+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {}
575+ },
576+ "runtime": {
577+ "lib/netstandard1.3/_._": {}
578+ }
579+ },
580+ "System.Diagnostics.FileVersionInfo/4.0.0": {
581+ "type": "package",
582+ "dependencies": {
583+ "Microsoft.NETCore.Platforms": "1.0.1",
584+ "System.Globalization": "4.0.11",
585+ "System.IO": "4.1.0",
586+ "System.IO.FileSystem": "4.0.1",
587+ "System.IO.FileSystem.Primitives": "4.0.1",
588+ "System.Reflection.Metadata": "1.3.0",
589+ "System.Runtime": "4.1.0",
590+ "System.Runtime.Extensions": "4.1.0",
591+ "System.Runtime.InteropServices": "4.1.0"
592+ },
593+ "compile": {
594+ "ref/netstandard1.3/_._": {}
595+ },
596+ "runtimeTargets": {
597+ "runtimes/win/lib/netstandard1.3/_._": {
598+ "assetType": "runtime",
599+ "rid": "win"
600+ }
601+ }
602+ },
603+ "System.Diagnostics.Process/4.1.0": {
604+ "type": "package",
605+ "dependencies": {
606+ "Microsoft.NETCore.Platforms": "1.0.1",
607+ "Microsoft.Win32.Primitives": "4.0.1",
608+ "Microsoft.Win32.Registry": "4.0.0",
609+ "System.Collections": "4.0.11",
610+ "System.Diagnostics.Debug": "4.0.11",
611+ "System.Globalization": "4.0.11",
612+ "System.IO": "4.1.0",
613+ "System.IO.FileSystem": "4.0.1",
614+ "System.IO.FileSystem.Primitives": "4.0.1",
615+ "System.Resources.ResourceManager": "4.0.1",
616+ "System.Runtime": "4.1.0",
617+ "System.Runtime.Extensions": "4.1.0",
618+ "System.Runtime.Handles": "4.0.1",
619+ "System.Runtime.InteropServices": "4.1.0",
620+ "System.Text.Encoding": "4.0.11",
621+ "System.Text.Encoding.Extensions": "4.0.11",
622+ "System.Threading": "4.0.11",
623+ "System.Threading.Tasks": "4.0.11",
624+ "System.Threading.Thread": "4.0.0",
625+ "System.Threading.ThreadPool": "4.0.10",
626+ "runtime.native.System": "4.0.0"
627+ },
628+ "compile": {
629+ "ref/netstandard1.4/System.Diagnostics.Process.dll": {}
630+ },
631+ "runtimeTargets": {
632+ "runtimes/osx/lib/netstandard1.4/_._": {
633+ "assetType": "runtime",
634+ "rid": "osx"
635+ }
636+ }
637+ },
638+ "System.Diagnostics.StackTrace/4.0.1": {
639+ "type": "package",
640+ "dependencies": {
641+ "System.Collections.Immutable": "1.2.0",
642+ "System.IO.FileSystem": "4.0.1",
643+ "System.Reflection": "4.1.0",
644+ "System.Reflection.Metadata": "1.3.0",
645+ "System.Runtime": "4.1.0",
646+ "System.Runtime.Extensions": "4.1.0"
647+ },
648+ "compile": {
649+ "ref/netstandard1.3/_._": {}
650+ },
651+ "runtime": {
652+ "lib/netstandard1.3/_._": {}
653+ }
654+ },
655+ "System.Diagnostics.Tools/4.0.1": {
656+ "type": "package",
657+ "dependencies": {
658+ "Microsoft.NETCore.Platforms": "1.0.1",
659+ "Microsoft.NETCore.Targets": "1.0.1",
660+ "System.Runtime": "4.1.0"
661+ },
662+ "compile": {
663+ "ref/netstandard1.0/System.Diagnostics.Tools.dll": {}
664+ }
665+ },
666+ "System.Diagnostics.Tracing/4.1.0": {
667+ "type": "package",
668+ "dependencies": {
669+ "Microsoft.NETCore.Platforms": "1.0.1",
670+ "Microsoft.NETCore.Targets": "1.0.1",
671+ "System.Runtime": "4.1.0"
672+ },
673+ "compile": {
674+ "ref/netstandard1.5/System.Diagnostics.Tracing.dll": {}
675+ }
676+ },
677+ "System.Dynamic.Runtime/4.0.11": {
678+ "type": "package",
679+ "dependencies": {
680+ "System.Collections": "4.0.11",
681+ "System.Diagnostics.Debug": "4.0.11",
682+ "System.Globalization": "4.0.11",
683+ "System.Linq": "4.1.0",
684+ "System.Linq.Expressions": "4.1.0",
685+ "System.ObjectModel": "4.0.12",
686+ "System.Reflection": "4.1.0",
687+ "System.Reflection.Emit": "4.0.1",
688+ "System.Reflection.Emit.ILGeneration": "4.0.1",
689+ "System.Reflection.Primitives": "4.0.1",
690+ "System.Reflection.TypeExtensions": "4.1.0",
691+ "System.Resources.ResourceManager": "4.0.1",
692+ "System.Runtime": "4.1.0",
693+ "System.Runtime.Extensions": "4.1.0",
694+ "System.Threading": "4.0.11"
695+ },
696+ "compile": {
697+ "ref/netstandard1.3/System.Dynamic.Runtime.dll": {}
698+ },
699+ "runtime": {
700+ "lib/netstandard1.3/System.Dynamic.Runtime.dll": {}
701+ }
702+ },
703+ "System.Globalization/4.0.11": {
704+ "type": "package",
705+ "dependencies": {
706+ "Microsoft.NETCore.Platforms": "1.0.1",
707+ "Microsoft.NETCore.Targets": "1.0.1",
708+ "System.Runtime": "4.1.0"
709+ },
710+ "compile": {
711+ "ref/netstandard1.3/System.Globalization.dll": {}
712+ }
713+ },
714+ "System.Globalization.Calendars/4.0.1": {
715+ "type": "package",
716+ "dependencies": {
717+ "Microsoft.NETCore.Platforms": "1.0.1",
718+ "Microsoft.NETCore.Targets": "1.0.1",
719+ "System.Globalization": "4.0.11",
720+ "System.Runtime": "4.1.0"
721+ },
722+ "compile": {
723+ "ref/netstandard1.3/System.Globalization.Calendars.dll": {}
724+ }
725+ },
726+ "System.Globalization.Extensions/4.0.1": {
727+ "type": "package",
728+ "dependencies": {
729+ "Microsoft.NETCore.Platforms": "1.0.1",
730+ "System.Globalization": "4.0.11",
731+ "System.Resources.ResourceManager": "4.0.1",
732+ "System.Runtime": "4.1.0",
733+ "System.Runtime.Extensions": "4.1.0",
734+ "System.Runtime.InteropServices": "4.1.0"
735+ },
736+ "compile": {
737+ "ref/netstandard1.3/System.Globalization.Extensions.dll": {}
738+ },
739+ "runtimeTargets": {
740+ "runtimes/win/lib/netstandard1.3/_._": {
741+ "assetType": "runtime",
742+ "rid": "win"
743+ }
744+ }
745+ },
746+ "System.IO/4.1.0": {
747+ "type": "package",
748+ "dependencies": {
749+ "Microsoft.NETCore.Platforms": "1.0.1",
750+ "Microsoft.NETCore.Targets": "1.0.1",
751+ "System.Runtime": "4.1.0",
752+ "System.Text.Encoding": "4.0.11",
753+ "System.Threading.Tasks": "4.0.11"
754+ },
755+ "compile": {
756+ "ref/netstandard1.5/System.IO.dll": {}
757+ }
758+ },
759+ "System.IO.Compression/4.1.0": {
760+ "type": "package",
761+ "dependencies": {
762+ "Microsoft.NETCore.Platforms": "1.0.1",
763+ "System.Collections": "4.0.11",
764+ "System.Diagnostics.Debug": "4.0.11",
765+ "System.IO": "4.1.0",
766+ "System.Resources.ResourceManager": "4.0.1",
767+ "System.Runtime": "4.1.0",
768+ "System.Runtime.Extensions": "4.1.0",
769+ "System.Runtime.Handles": "4.0.1",
770+ "System.Runtime.InteropServices": "4.1.0",
771+ "System.Text.Encoding": "4.0.11",
772+ "System.Threading": "4.0.11",
773+ "System.Threading.Tasks": "4.0.11",
774+ "runtime.native.System": "4.0.0",
775+ "runtime.native.System.IO.Compression": "4.1.0"
776+ },
777+ "compile": {
778+ "ref/netstandard1.3/System.IO.Compression.dll": {}
779+ },
780+ "runtimeTargets": {
781+ "runtimes/win/lib/netstandard1.3/_._": {
782+ "assetType": "runtime",
783+ "rid": "win"
784+ }
785+ }
786+ },
787+ "System.IO.Compression.ZipFile/4.0.1": {
788+ "type": "package",
789+ "dependencies": {
790+ "System.Buffers": "4.0.0",
791+ "System.IO": "4.1.0",
792+ "System.IO.Compression": "4.1.0",
793+ "System.IO.FileSystem": "4.0.1",
794+ "System.IO.FileSystem.Primitives": "4.0.1",
795+ "System.Resources.ResourceManager": "4.0.1",
796+ "System.Runtime": "4.1.0",
797+ "System.Runtime.Extensions": "4.1.0",
798+ "System.Text.Encoding": "4.0.11"
799+ },
800+ "compile": {
801+ "ref/netstandard1.3/System.IO.Compression.ZipFile.dll": {}
802+ },
803+ "runtime": {
804+ "lib/netstandard1.3/_._": {}
805+ }
806+ },
807+ "System.IO.FileSystem/4.0.1": {
808+ "type": "package",
809+ "dependencies": {
810+ "Microsoft.NETCore.Platforms": "1.0.1",
811+ "Microsoft.NETCore.Targets": "1.0.1",
812+ "System.IO": "4.1.0",
813+ "System.IO.FileSystem.Primitives": "4.0.1",
814+ "System.Runtime": "4.1.0",
815+ "System.Runtime.Handles": "4.0.1",
816+ "System.Text.Encoding": "4.0.11",
817+ "System.Threading.Tasks": "4.0.11"
818+ },
819+ "compile": {
820+ "ref/netstandard1.3/System.IO.FileSystem.dll": {}
821+ }
822+ },
823+ "System.IO.FileSystem.Primitives/4.0.1": {
824+ "type": "package",
825+ "dependencies": {
826+ "System.Runtime": "4.1.0"
827+ },
828+ "compile": {
829+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
830+ },
831+ "runtime": {
832+ "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {}
833+ }
834+ },
835+ "System.IO.FileSystem.Watcher/4.0.0": {
836+ "type": "package",
837+ "dependencies": {
838+ "Microsoft.NETCore.Platforms": "1.0.1",
839+ "Microsoft.Win32.Primitives": "4.0.1",
840+ "System.Collections": "4.0.11",
841+ "System.IO.FileSystem": "4.0.1",
842+ "System.IO.FileSystem.Primitives": "4.0.1",
843+ "System.Resources.ResourceManager": "4.0.1",
844+ "System.Runtime": "4.1.0",
845+ "System.Runtime.Extensions": "4.1.0",
846+ "System.Runtime.Handles": "4.0.1",
847+ "System.Runtime.InteropServices": "4.1.0",
848+ "System.Text.Encoding": "4.0.11",
849+ "System.Threading": "4.0.11",
850+ "System.Threading.Overlapped": "4.0.1",
851+ "System.Threading.Tasks": "4.0.11",
852+ "System.Threading.Thread": "4.0.0",
853+ "runtime.native.System": "4.0.0"
854+ },
855+ "compile": {
856+ "ref/netstandard1.3/System.IO.FileSystem.Watcher.dll": {}
857+ },
858+ "runtimeTargets": {
859+ "runtimes/osx/lib/netstandard1.3/_._": {
860+ "assetType": "runtime",
861+ "rid": "osx"
862+ }
863+ }
864+ },
865+ "System.IO.MemoryMappedFiles/4.0.0": {
866+ "type": "package",
867+ "dependencies": {
868+ "Microsoft.NETCore.Platforms": "1.0.1",
869+ "System.IO": "4.1.0",
870+ "System.IO.FileSystem": "4.0.1",
871+ "System.IO.FileSystem.Primitives": "4.0.1",
872+ "System.IO.UnmanagedMemoryStream": "4.0.1",
873+ "System.Resources.ResourceManager": "4.0.1",
874+ "System.Runtime": "4.1.0",
875+ "System.Runtime.Extensions": "4.1.0",
876+ "System.Runtime.Handles": "4.0.1",
877+ "System.Runtime.InteropServices": "4.1.0",
878+ "System.Threading": "4.0.11",
879+ "System.Threading.Tasks": "4.0.11",
880+ "runtime.native.System": "4.0.0"
881+ },
882+ "compile": {
883+ "ref/netstandard1.3/System.IO.MemoryMappedFiles.dll": {}
884+ },
885+ "runtimeTargets": {
886+ "runtimes/win/lib/netstandard1.3/_._": {
887+ "assetType": "runtime",
888+ "rid": "win"
889+ }
890+ }
891+ },
892+ "System.IO.UnmanagedMemoryStream/4.0.1": {
893+ "type": "package",
894+ "dependencies": {
895+ "System.IO": "4.1.0",
896+ "System.IO.FileSystem.Primitives": "4.0.1",
897+ "System.Resources.ResourceManager": "4.0.1",
898+ "System.Runtime": "4.1.0",
899+ "System.Runtime.InteropServices": "4.1.0",
900+ "System.Threading": "4.0.11",
901+ "System.Threading.Tasks": "4.0.11"
902+ },
903+ "compile": {
904+ "ref/netstandard1.3/System.IO.UnmanagedMemoryStream.dll": {}
905+ },
906+ "runtime": {
907+ "lib/netstandard1.3/_._": {}
908+ }
909+ },
910+ "System.Linq/4.1.0": {
911+ "type": "package",
912+ "dependencies": {
913+ "System.Collections": "4.0.11",
914+ "System.Diagnostics.Debug": "4.0.11",
915+ "System.Resources.ResourceManager": "4.0.1",
916+ "System.Runtime": "4.1.0",
917+ "System.Runtime.Extensions": "4.1.0"
918+ },
919+ "compile": {
920+ "ref/netstandard1.6/System.Linq.dll": {}
921+ },
922+ "runtime": {
923+ "lib/netstandard1.6/System.Linq.dll": {}
924+ }
925+ },
926+ "System.Linq.Expressions/4.1.0": {
927+ "type": "package",
928+ "dependencies": {
929+ "System.Collections": "4.0.11",
930+ "System.Diagnostics.Debug": "4.0.11",
931+ "System.Globalization": "4.0.11",
932+ "System.IO": "4.1.0",
933+ "System.Linq": "4.1.0",
934+ "System.ObjectModel": "4.0.12",
935+ "System.Reflection": "4.1.0",
936+ "System.Reflection.Emit": "4.0.1",
937+ "System.Reflection.Emit.ILGeneration": "4.0.1",
938+ "System.Reflection.Emit.Lightweight": "4.0.1",
939+ "System.Reflection.Extensions": "4.0.1",
940+ "System.Reflection.Primitives": "4.0.1",
941+ "System.Reflection.TypeExtensions": "4.1.0",
942+ "System.Resources.ResourceManager": "4.0.1",
943+ "System.Runtime": "4.1.0",
944+ "System.Runtime.Extensions": "4.1.0",
945+ "System.Threading": "4.0.11"
946+ },
947+ "compile": {
948+ "ref/netstandard1.6/System.Linq.Expressions.dll": {}
949+ },
950+ "runtime": {
951+ "lib/netstandard1.6/System.Linq.Expressions.dll": {}
952+ }
953+ },
954+ "System.Linq.Parallel/4.0.1": {
955+ "type": "package",
956+ "dependencies": {
957+ "System.Collections": "4.0.11",
958+ "System.Collections.Concurrent": "4.0.12",
959+ "System.Diagnostics.Debug": "4.0.11",
960+ "System.Diagnostics.Tracing": "4.1.0",
961+ "System.Linq": "4.1.0",
962+ "System.Resources.ResourceManager": "4.0.1",
963+ "System.Runtime": "4.1.0",
964+ "System.Runtime.Extensions": "4.1.0",
965+ "System.Threading": "4.0.11",
966+ "System.Threading.Tasks": "4.0.11"
967+ },
968+ "compile": {
969+ "ref/netstandard1.1/System.Linq.Parallel.dll": {}
970+ },
971+ "runtime": {
972+ "lib/netstandard1.3/_._": {}
973+ }
974+ },
975+ "System.Linq.Queryable/4.0.1": {
976+ "type": "package",
977+ "dependencies": {
978+ "System.Collections": "4.0.11",
979+ "System.Diagnostics.Debug": "4.0.11",
980+ "System.Linq": "4.1.0",
981+ "System.Linq.Expressions": "4.1.0",
982+ "System.Reflection": "4.1.0",
983+ "System.Reflection.Extensions": "4.0.1",
984+ "System.Resources.ResourceManager": "4.0.1",
985+ "System.Runtime": "4.1.0"
986+ },
987+ "compile": {
988+ "ref/netstandard1.0/System.Linq.Queryable.dll": {}
989+ },
990+ "runtime": {
991+ "lib/netstandard1.3/_._": {}
992+ }
993+ },
994+ "System.Net.Http/4.1.0": {
995+ "type": "package",
996+ "dependencies": {
997+ "Microsoft.NETCore.Platforms": "1.0.1",
998+ "System.Collections": "4.0.11",
999+ "System.Diagnostics.Debug": "4.0.11",
1000+ "System.Diagnostics.DiagnosticSource": "4.0.0",
1001+ "System.Diagnostics.Tracing": "4.1.0",
1002+ "System.Globalization": "4.0.11",
1003+ "System.Globalization.Extensions": "4.0.1",
1004+ "System.IO": "4.1.0",
1005+ "System.IO.FileSystem": "4.0.1",
1006+ "System.Net.Primitives": "4.0.11",
1007+ "System.Resources.ResourceManager": "4.0.1",
1008+ "System.Runtime": "4.1.0",
1009+ "System.Runtime.Extensions": "4.1.0",
1010+ "System.Runtime.Handles": "4.0.1",
1011+ "System.Runtime.InteropServices": "4.1.0",
1012+ "System.Security.Cryptography.Algorithms": "4.2.0",
1013+ "System.Security.Cryptography.Encoding": "4.0.0",
1014+ "System.Security.Cryptography.OpenSsl": "4.0.0",
1015+ "System.Security.Cryptography.Primitives": "4.0.0",
1016+ "System.Security.Cryptography.X509Certificates": "4.1.0",
1017+ "System.Text.Encoding": "4.0.11",
1018+ "System.Threading": "4.0.11",
1019+ "System.Threading.Tasks": "4.0.11",
1020+ "runtime.native.System": "4.0.0",
1021+ "runtime.native.System.Net.Http": "4.0.1",
1022+ "runtime.native.System.Security.Cryptography": "4.0.0"
1023+ },
1024+ "compile": {
1025+ "ref/netstandard1.3/System.Net.Http.dll": {}
1026+ },
1027+ "runtimeTargets": {
1028+ "runtimes/win/lib/netstandard1.3/_._": {
1029+ "assetType": "runtime",
1030+ "rid": "win"
1031+ }
1032+ }
1033+ },
1034+ "System.Net.NameResolution/4.0.0": {
1035+ "type": "package",
1036+ "dependencies": {
1037+ "Microsoft.NETCore.Platforms": "1.0.1",
1038+ "System.Collections": "4.0.11",
1039+ "System.Diagnostics.Tracing": "4.1.0",
1040+ "System.Globalization": "4.0.11",
1041+ "System.Net.Primitives": "4.0.11",
1042+ "System.Resources.ResourceManager": "4.0.1",
1043+ "System.Runtime": "4.1.0",
1044+ "System.Runtime.Extensions": "4.1.0",
1045+ "System.Runtime.Handles": "4.0.1",
1046+ "System.Runtime.InteropServices": "4.1.0",
1047+ "System.Security.Principal.Windows": "4.0.0",
1048+ "System.Threading": "4.0.11",
1049+ "System.Threading.Tasks": "4.0.11",
1050+ "runtime.native.System": "4.0.0"
1051+ },
1052+ "compile": {
1053+ "ref/netstandard1.3/System.Net.NameResolution.dll": {}
1054+ },
1055+ "runtimeTargets": {
1056+ "runtimes/win/lib/netstandard1.3/_._": {
1057+ "assetType": "runtime",
1058+ "rid": "win"
1059+ }
1060+ }
1061+ },
1062+ "System.Net.Primitives/4.0.11": {
1063+ "type": "package",
1064+ "dependencies": {
1065+ "Microsoft.NETCore.Platforms": "1.0.1",
1066+ "Microsoft.NETCore.Targets": "1.0.1",
1067+ "System.Runtime": "4.1.0",
1068+ "System.Runtime.Handles": "4.0.1"
1069+ },
1070+ "compile": {
1071+ "ref/netstandard1.3/System.Net.Primitives.dll": {}
1072+ }
1073+ },
1074+ "System.Net.Requests/4.0.11": {
1075+ "type": "package",
1076+ "dependencies": {
1077+ "Microsoft.NETCore.Platforms": "1.0.1",
1078+ "System.Collections": "4.0.11",
1079+ "System.Diagnostics.Debug": "4.0.11",
1080+ "System.Diagnostics.Tracing": "4.1.0",
1081+ "System.Globalization": "4.0.11",
1082+ "System.IO": "4.1.0",
1083+ "System.Net.Http": "4.1.0",
1084+ "System.Net.Primitives": "4.0.11",
1085+ "System.Net.WebHeaderCollection": "4.0.1",
1086+ "System.Resources.ResourceManager": "4.0.1",
1087+ "System.Runtime": "4.1.0",
1088+ "System.Threading": "4.0.11",
1089+ "System.Threading.Tasks": "4.0.11"
1090+ },
1091+ "compile": {
1092+ "ref/netstandard1.3/System.Net.Requests.dll": {}
1093+ },
1094+ "runtimeTargets": {
1095+ "runtimes/win/lib/netstandard1.3/_._": {
1096+ "assetType": "runtime",
1097+ "rid": "win"
1098+ }
1099+ }
1100+ },
1101+ "System.Net.Security/4.0.0": {
1102+ "type": "package",
1103+ "dependencies": {
1104+ "Microsoft.NETCore.Platforms": "1.0.1",
1105+ "Microsoft.Win32.Primitives": "4.0.1",
1106+ "System.Collections": "4.0.11",
1107+ "System.Collections.Concurrent": "4.0.12",
1108+ "System.Diagnostics.Tracing": "4.1.0",
1109+ "System.Globalization": "4.0.11",
1110+ "System.Globalization.Extensions": "4.0.1",
1111+ "System.IO": "4.1.0",
1112+ "System.Net.Primitives": "4.0.11",
1113+ "System.Resources.ResourceManager": "4.0.1",
1114+ "System.Runtime": "4.1.0",
1115+ "System.Runtime.Extensions": "4.1.0",
1116+ "System.Runtime.Handles": "4.0.1",
1117+ "System.Runtime.InteropServices": "4.1.0",
1118+ "System.Security.Claims": "4.0.1",
1119+ "System.Security.Cryptography.Algorithms": "4.2.0",
1120+ "System.Security.Cryptography.Encoding": "4.0.0",
1121+ "System.Security.Cryptography.OpenSsl": "4.0.0",
1122+ "System.Security.Cryptography.Primitives": "4.0.0",
1123+ "System.Security.Cryptography.X509Certificates": "4.1.0",
1124+ "System.Security.Principal": "4.0.1",
1125+ "System.Text.Encoding": "4.0.11",
1126+ "System.Threading": "4.0.11",
1127+ "System.Threading.Tasks": "4.0.11",
1128+ "System.Threading.ThreadPool": "4.0.10",
1129+ "runtime.native.System": "4.0.0",
1130+ "runtime.native.System.Net.Security": "4.0.1",
1131+ "runtime.native.System.Security.Cryptography": "4.0.0"
1132+ },
1133+ "compile": {
1134+ "ref/netstandard1.3/System.Net.Security.dll": {}
1135+ },
1136+ "runtimeTargets": {
1137+ "runtimes/win/lib/netstandard1.3/_._": {
1138+ "assetType": "runtime",
1139+ "rid": "win"
1140+ }
1141+ }
1142+ },
1143+ "System.Net.Sockets/4.1.0": {
1144+ "type": "package",
1145+ "dependencies": {
1146+ "Microsoft.NETCore.Platforms": "1.0.1",
1147+ "Microsoft.NETCore.Targets": "1.0.1",
1148+ "System.IO": "4.1.0",
1149+ "System.Net.Primitives": "4.0.11",
1150+ "System.Runtime": "4.1.0",
1151+ "System.Threading.Tasks": "4.0.11"
1152+ },
1153+ "compile": {
1154+ "ref/netstandard1.3/System.Net.Sockets.dll": {}
1155+ }
1156+ },
1157+ "System.Net.WebHeaderCollection/4.0.1": {
1158+ "type": "package",
1159+ "dependencies": {
1160+ "System.Collections": "4.0.11",
1161+ "System.Resources.ResourceManager": "4.0.1",
1162+ "System.Runtime": "4.1.0",
1163+ "System.Runtime.Extensions": "4.1.0"
1164+ },
1165+ "compile": {
1166+ "ref/netstandard1.3/System.Net.WebHeaderCollection.dll": {}
1167+ },
1168+ "runtime": {
1169+ "lib/netstandard1.3/_._": {}
1170+ }
1171+ },
1172+ "System.Numerics.Vectors/4.1.1": {
1173+ "type": "package",
1174+ "dependencies": {
1175+ "System.Globalization": "4.0.11",
1176+ "System.Resources.ResourceManager": "4.0.1",
1177+ "System.Runtime": "4.1.0",
1178+ "System.Runtime.Extensions": "4.1.0"
1179+ },
1180+ "compile": {
1181+ "ref/netstandard1.0/System.Numerics.Vectors.dll": {}
1182+ },
1183+ "runtime": {
1184+ "lib/netstandard1.0/_._": {}
1185+ }
1186+ },
1187+ "System.ObjectModel/4.0.12": {
1188+ "type": "package",
1189+ "dependencies": {
1190+ "System.Collections": "4.0.11",
1191+ "System.Diagnostics.Debug": "4.0.11",
1192+ "System.Resources.ResourceManager": "4.0.1",
1193+ "System.Runtime": "4.1.0",
1194+ "System.Threading": "4.0.11"
1195+ },
1196+ "compile": {
1197+ "ref/netstandard1.3/System.ObjectModel.dll": {}
1198+ },
1199+ "runtime": {
1200+ "lib/netstandard1.3/System.ObjectModel.dll": {}
1201+ }
1202+ },
1203+ "System.Reflection/4.1.0": {
1204+ "type": "package",
1205+ "dependencies": {
1206+ "Microsoft.NETCore.Platforms": "1.0.1",
1207+ "Microsoft.NETCore.Targets": "1.0.1",
1208+ "System.IO": "4.1.0",
1209+ "System.Reflection.Primitives": "4.0.1",
1210+ "System.Runtime": "4.1.0"
1211+ },
1212+ "compile": {
1213+ "ref/netstandard1.5/System.Reflection.dll": {}
1214+ }
1215+ },
1216+ "System.Reflection.DispatchProxy/4.0.1": {
1217+ "type": "package",
1218+ "dependencies": {
1219+ "System.Collections": "4.0.11",
1220+ "System.Linq": "4.1.0",
1221+ "System.Reflection": "4.1.0",
1222+ "System.Reflection.Emit": "4.0.1",
1223+ "System.Reflection.Emit.ILGeneration": "4.0.1",
1224+ "System.Reflection.Extensions": "4.0.1",
1225+ "System.Reflection.Primitives": "4.0.1",
1226+ "System.Resources.ResourceManager": "4.0.1",
1227+ "System.Runtime": "4.1.0",
1228+ "System.Threading": "4.0.11"
1229+ },
1230+ "compile": {
1231+ "ref/netstandard1.3/System.Reflection.DispatchProxy.dll": {}
1232+ },
1233+ "runtime": {
1234+ "lib/netstandard1.3/_._": {}
1235+ }
1236+ },
1237+ "System.Reflection.Emit/4.0.1": {
1238+ "type": "package",
1239+ "dependencies": {
1240+ "System.IO": "4.1.0",
1241+ "System.Reflection": "4.1.0",
1242+ "System.Reflection.Emit.ILGeneration": "4.0.1",
1243+ "System.Reflection.Primitives": "4.0.1",
1244+ "System.Runtime": "4.1.0"
1245+ },
1246+ "compile": {
1247+ "ref/netstandard1.1/_._": {}
1248+ },
1249+ "runtime": {
1250+ "lib/netstandard1.3/System.Reflection.Emit.dll": {}
1251+ }
1252+ },
1253+ "System.Reflection.Emit.ILGeneration/4.0.1": {
1254+ "type": "package",
1255+ "dependencies": {
1256+ "System.Reflection": "4.1.0",
1257+ "System.Reflection.Primitives": "4.0.1",
1258+ "System.Runtime": "4.1.0"
1259+ },
1260+ "compile": {
1261+ "ref/netstandard1.0/_._": {}
1262+ },
1263+ "runtime": {
1264+ "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {}
1265+ }
1266+ },
1267+ "System.Reflection.Emit.Lightweight/4.0.1": {
1268+ "type": "package",
1269+ "dependencies": {
1270+ "System.Reflection": "4.1.0",
1271+ "System.Reflection.Emit.ILGeneration": "4.0.1",
1272+ "System.Reflection.Primitives": "4.0.1",
1273+ "System.Runtime": "4.1.0"
1274+ },
1275+ "compile": {
1276+ "ref/netstandard1.0/_._": {}
1277+ },
1278+ "runtime": {
1279+ "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {}
1280+ }
1281+ },
1282+ "System.Reflection.Extensions/4.0.1": {
1283+ "type": "package",
1284+ "dependencies": {
1285+ "Microsoft.NETCore.Platforms": "1.0.1",
1286+ "Microsoft.NETCore.Targets": "1.0.1",
1287+ "System.Reflection": "4.1.0",
1288+ "System.Runtime": "4.1.0"
1289+ },
1290+ "compile": {
1291+ "ref/netstandard1.0/System.Reflection.Extensions.dll": {}
1292+ }
1293+ },
1294+ "System.Reflection.Metadata/1.3.0": {
1295+ "type": "package",
1296+ "dependencies": {
1297+ "System.Collections": "4.0.11",
1298+ "System.Collections.Immutable": "1.2.0",
1299+ "System.Diagnostics.Debug": "4.0.11",
1300+ "System.IO": "4.1.0",
1301+ "System.Linq": "4.1.0",
1302+ "System.Reflection": "4.1.0",
1303+ "System.Reflection.Extensions": "4.0.1",
1304+ "System.Reflection.Primitives": "4.0.1",
1305+ "System.Resources.ResourceManager": "4.0.1",
1306+ "System.Runtime": "4.1.0",
1307+ "System.Runtime.Extensions": "4.1.0",
1308+ "System.Runtime.InteropServices": "4.1.0",
1309+ "System.Text.Encoding": "4.0.11",
1310+ "System.Text.Encoding.Extensions": "4.0.11",
1311+ "System.Threading": "4.0.11"
1312+ },
1313+ "compile": {
1314+ "lib/netstandard1.1/System.Reflection.Metadata.dll": {}
1315+ },
1316+ "runtime": {
1317+ "lib/netstandard1.1/_._": {}
1318+ }
1319+ },
1320+ "System.Reflection.Primitives/4.0.1": {
1321+ "type": "package",
1322+ "dependencies": {
1323+ "Microsoft.NETCore.Platforms": "1.0.1",
1324+ "Microsoft.NETCore.Targets": "1.0.1",
1325+ "System.Runtime": "4.1.0"
1326+ },
1327+ "compile": {
1328+ "ref/netstandard1.0/System.Reflection.Primitives.dll": {}
1329+ }
1330+ },
1331+ "System.Reflection.TypeExtensions/4.1.0": {
1332+ "type": "package",
1333+ "dependencies": {
1334+ "System.Reflection": "4.1.0",
1335+ "System.Runtime": "4.1.0"
1336+ },
1337+ "compile": {
1338+ "ref/netstandard1.5/System.Reflection.TypeExtensions.dll": {}
1339+ },
1340+ "runtime": {
1341+ "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {}
1342+ }
1343+ },
1344+ "System.Resources.Reader/4.0.0": {
1345+ "type": "package",
1346+ "dependencies": {
1347+ "System.IO": "4.1.0",
1348+ "System.Resources.ResourceManager": "4.0.1",
1349+ "System.Runtime": "4.1.0",
1350+ "System.Text.Encoding": "4.0.11",
1351+ "System.Threading": "4.0.11"
1352+ },
1353+ "compile": {
1354+ "lib/netstandard1.0/System.Resources.Reader.dll": {}
1355+ },
1356+ "runtime": {
1357+ "lib/netstandard1.0/_._": {}
1358+ }
1359+ },
1360+ "System.Resources.ResourceManager/4.0.1": {
1361+ "type": "package",
1362+ "dependencies": {
1363+ "Microsoft.NETCore.Platforms": "1.0.1",
1364+ "Microsoft.NETCore.Targets": "1.0.1",
1365+ "System.Globalization": "4.0.11",
1366+ "System.Reflection": "4.1.0",
1367+ "System.Runtime": "4.1.0"
1368+ },
1369+ "compile": {
1370+ "ref/netstandard1.0/System.Resources.ResourceManager.dll": {}
1371+ }
1372+ },
1373+ "System.Runtime/4.1.0": {
1374+ "type": "package",
1375+ "dependencies": {
1376+ "Microsoft.NETCore.Platforms": "1.0.1",
1377+ "Microsoft.NETCore.Targets": "1.0.1"
1378+ },
1379+ "compile": {
1380+ "ref/netstandard1.5/System.Runtime.dll": {}
1381+ }
1382+ },
1383+ "System.Runtime.Extensions/4.1.0": {
1384+ "type": "package",
1385+ "dependencies": {
1386+ "Microsoft.NETCore.Platforms": "1.0.1",
1387+ "Microsoft.NETCore.Targets": "1.0.1",
1388+ "System.Runtime": "4.1.0"
1389+ },
1390+ "compile": {
1391+ "ref/netstandard1.5/System.Runtime.Extensions.dll": {}
1392+ }
1393+ },
1394+ "System.Runtime.Handles/4.0.1": {
1395+ "type": "package",
1396+ "dependencies": {
1397+ "Microsoft.NETCore.Platforms": "1.0.1",
1398+ "Microsoft.NETCore.Targets": "1.0.1",
1399+ "System.Runtime": "4.1.0"
1400+ },
1401+ "compile": {
1402+ "ref/netstandard1.3/System.Runtime.Handles.dll": {}
1403+ }
1404+ },
1405+ "System.Runtime.InteropServices/4.1.0": {
1406+ "type": "package",
1407+ "dependencies": {
1408+ "Microsoft.NETCore.Platforms": "1.0.1",
1409+ "Microsoft.NETCore.Targets": "1.0.1",
1410+ "System.Reflection": "4.1.0",
1411+ "System.Reflection.Primitives": "4.0.1",
1412+ "System.Runtime": "4.1.0",
1413+ "System.Runtime.Handles": "4.0.1"
1414+ },
1415+ "compile": {
1416+ "ref/netstandard1.5/System.Runtime.InteropServices.dll": {}
1417+ }
1418+ },
1419+ "System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
1420+ "type": "package",
1421+ "dependencies": {
1422+ "Microsoft.NETCore.Platforms": "1.0.1",
1423+ "System.Reflection": "4.1.0",
1424+ "System.Resources.ResourceManager": "4.0.1",
1425+ "System.Runtime": "4.1.0",
1426+ "System.Runtime.InteropServices": "4.1.0",
1427+ "System.Threading": "4.0.11",
1428+ "runtime.native.System": "4.0.0"
1429+ },
1430+ "compile": {
1431+ "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {}
1432+ },
1433+ "runtimeTargets": {
1434+ "runtimes/win/lib/netstandard1.1/_._": {
1435+ "assetType": "runtime",
1436+ "rid": "win"
1437+ }
1438+ }
1439+ },
1440+ "System.Runtime.Loader/4.0.0": {
1441+ "type": "package",
1442+ "dependencies": {
1443+ "System.IO": "4.1.0",
1444+ "System.Reflection": "4.1.0",
1445+ "System.Runtime": "4.1.0"
1446+ },
1447+ "compile": {
1448+ "ref/netstandard1.5/_._": {}
1449+ },
1450+ "runtime": {
1451+ "lib/netstandard1.5/_._": {}
1452+ }
1453+ },
1454+ "System.Runtime.Numerics/4.0.1": {
1455+ "type": "package",
1456+ "dependencies": {
1457+ "System.Globalization": "4.0.11",
1458+ "System.Resources.ResourceManager": "4.0.1",
1459+ "System.Runtime": "4.1.0",
1460+ "System.Runtime.Extensions": "4.1.0"
1461+ },
1462+ "compile": {
1463+ "ref/netstandard1.1/System.Runtime.Numerics.dll": {}
1464+ },
1465+ "runtime": {
1466+ "lib/netstandard1.3/_._": {}
1467+ }
1468+ },
1469+ "System.Runtime.Serialization.Primitives/4.1.1": {
1470+ "type": "package",
1471+ "dependencies": {
1472+ "System.Resources.ResourceManager": "4.0.1",
1473+ "System.Runtime": "4.1.0"
1474+ },
1475+ "compile": {
1476+ "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {}
1477+ },
1478+ "runtime": {
1479+ "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {}
1480+ }
1481+ },
1482+ "System.Security.Claims/4.0.1": {
1483+ "type": "package",
1484+ "dependencies": {
1485+ "System.Collections": "4.0.11",
1486+ "System.Globalization": "4.0.11",
1487+ "System.IO": "4.1.0",
1488+ "System.Resources.ResourceManager": "4.0.1",
1489+ "System.Runtime": "4.1.0",
1490+ "System.Runtime.Extensions": "4.1.0",
1491+ "System.Security.Principal": "4.0.1"
1492+ },
1493+ "compile": {
1494+ "ref/netstandard1.3/_._": {}
1495+ },
1496+ "runtime": {
1497+ "lib/netstandard1.3/_._": {}
1498+ }
1499+ },
1500+ "System.Security.Cryptography.Algorithms/4.2.0": {
1501+ "type": "package",
1502+ "dependencies": {
1503+ "Microsoft.NETCore.Platforms": "1.0.1",
1504+ "System.Collections": "4.0.11",
1505+ "System.IO": "4.1.0",
1506+ "System.Resources.ResourceManager": "4.0.1",
1507+ "System.Runtime": "4.1.0",
1508+ "System.Runtime.Extensions": "4.1.0",
1509+ "System.Runtime.Handles": "4.0.1",
1510+ "System.Runtime.InteropServices": "4.1.0",
1511+ "System.Runtime.Numerics": "4.0.1",
1512+ "System.Security.Cryptography.Encoding": "4.0.0",
1513+ "System.Security.Cryptography.Primitives": "4.0.0",
1514+ "System.Text.Encoding": "4.0.11",
1515+ "runtime.native.System.Security.Cryptography": "4.0.0"
1516+ },
1517+ "compile": {
1518+ "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {}
1519+ },
1520+ "runtimeTargets": {
1521+ "runtimes/win/lib/netstandard1.6/_._": {
1522+ "assetType": "runtime",
1523+ "rid": "win"
1524+ }
1525+ }
1526+ },
1527+ "System.Security.Cryptography.Cng/4.2.0": {
1528+ "type": "package",
1529+ "dependencies": {
1530+ "Microsoft.NETCore.Platforms": "1.0.1",
1531+ "System.IO": "4.1.0",
1532+ "System.Resources.ResourceManager": "4.0.1",
1533+ "System.Runtime": "4.1.0",
1534+ "System.Runtime.Extensions": "4.1.0",
1535+ "System.Runtime.Handles": "4.0.1",
1536+ "System.Runtime.InteropServices": "4.1.0",
1537+ "System.Security.Cryptography.Algorithms": "4.2.0",
1538+ "System.Security.Cryptography.Encoding": "4.0.0",
1539+ "System.Security.Cryptography.Primitives": "4.0.0",
1540+ "System.Text.Encoding": "4.0.11"
1541+ },
1542+ "compile": {
1543+ "ref/netstandard1.6/_._": {}
1544+ },
1545+ "runtimeTargets": {
1546+ "runtimes/win/lib/netstandard1.6/_._": {
1547+ "assetType": "runtime",
1548+ "rid": "win"
1549+ }
1550+ }
1551+ },
1552+ "System.Security.Cryptography.Csp/4.0.0": {
1553+ "type": "package",
1554+ "dependencies": {
1555+ "Microsoft.NETCore.Platforms": "1.0.1",
1556+ "System.IO": "4.1.0",
1557+ "System.Reflection": "4.1.0",
1558+ "System.Resources.ResourceManager": "4.0.1",
1559+ "System.Runtime": "4.1.0",
1560+ "System.Runtime.Extensions": "4.1.0",
1561+ "System.Runtime.Handles": "4.0.1",
1562+ "System.Runtime.InteropServices": "4.1.0",
1563+ "System.Security.Cryptography.Algorithms": "4.2.0",
1564+ "System.Security.Cryptography.Encoding": "4.0.0",
1565+ "System.Security.Cryptography.Primitives": "4.0.0",
1566+ "System.Text.Encoding": "4.0.11",
1567+ "System.Threading": "4.0.11"
1568+ },
1569+ "compile": {
1570+ "ref/netstandard1.3/_._": {}
1571+ },
1572+ "runtimeTargets": {
1573+ "runtimes/win/lib/netstandard1.3/_._": {
1574+ "assetType": "runtime",
1575+ "rid": "win"
1576+ }
1577+ }
1578+ },
1579+ "System.Security.Cryptography.Encoding/4.0.0": {
1580+ "type": "package",
1581+ "dependencies": {
1582+ "Microsoft.NETCore.Platforms": "1.0.1",
1583+ "System.Collections": "4.0.11",
1584+ "System.Collections.Concurrent": "4.0.12",
1585+ "System.Linq": "4.1.0",
1586+ "System.Resources.ResourceManager": "4.0.1",
1587+ "System.Runtime": "4.1.0",
1588+ "System.Runtime.Extensions": "4.1.0",
1589+ "System.Runtime.Handles": "4.0.1",
1590+ "System.Runtime.InteropServices": "4.1.0",
1591+ "System.Security.Cryptography.Primitives": "4.0.0",
1592+ "System.Text.Encoding": "4.0.11",
1593+ "runtime.native.System.Security.Cryptography": "4.0.0"
1594+ },
1595+ "compile": {
1596+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": {}
1597+ },
1598+ "runtimeTargets": {
1599+ "runtimes/win/lib/netstandard1.3/_._": {
1600+ "assetType": "runtime",
1601+ "rid": "win"
1602+ }
1603+ }
1604+ },
1605+ "System.Security.Cryptography.OpenSsl/4.0.0": {
1606+ "type": "package",
1607+ "dependencies": {
1608+ "System.Collections": "4.0.11",
1609+ "System.IO": "4.1.0",
1610+ "System.Resources.ResourceManager": "4.0.1",
1611+ "System.Runtime": "4.1.0",
1612+ "System.Runtime.Extensions": "4.1.0",
1613+ "System.Runtime.Handles": "4.0.1",
1614+ "System.Runtime.InteropServices": "4.1.0",
1615+ "System.Runtime.Numerics": "4.0.1",
1616+ "System.Security.Cryptography.Algorithms": "4.2.0",
1617+ "System.Security.Cryptography.Encoding": "4.0.0",
1618+ "System.Security.Cryptography.Primitives": "4.0.0",
1619+ "System.Text.Encoding": "4.0.11",
1620+ "runtime.native.System.Security.Cryptography": "4.0.0"
1621+ },
1622+ "compile": {
1623+ "ref/netstandard1.6/_._": {}
1624+ },
1625+ "runtime": {
1626+ "lib/netstandard1.6/_._": {}
1627+ },
1628+ "runtimeTargets": {
1629+ "runtimes/unix/lib/netstandard1.6/_._": {
1630+ "assetType": "runtime",
1631+ "rid": "unix"
1632+ }
1633+ }
1634+ },
1635+ "System.Security.Cryptography.Primitives/4.0.0": {
1636+ "type": "package",
1637+ "dependencies": {
1638+ "System.Diagnostics.Debug": "4.0.11",
1639+ "System.Globalization": "4.0.11",
1640+ "System.IO": "4.1.0",
1641+ "System.Resources.ResourceManager": "4.0.1",
1642+ "System.Runtime": "4.1.0",
1643+ "System.Threading": "4.0.11",
1644+ "System.Threading.Tasks": "4.0.11"
1645+ },
1646+ "compile": {
1647+ "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {}
1648+ },
1649+ "runtime": {
1650+ "lib/netstandard1.3/_._": {}
1651+ }
1652+ },
1653+ "System.Security.Cryptography.X509Certificates/4.1.0": {
1654+ "type": "package",
1655+ "dependencies": {
1656+ "Microsoft.NETCore.Platforms": "1.0.1",
1657+ "System.Collections": "4.0.11",
1658+ "System.Diagnostics.Debug": "4.0.11",
1659+ "System.Globalization": "4.0.11",
1660+ "System.Globalization.Calendars": "4.0.1",
1661+ "System.IO": "4.1.0",
1662+ "System.IO.FileSystem": "4.0.1",
1663+ "System.IO.FileSystem.Primitives": "4.0.1",
1664+ "System.Resources.ResourceManager": "4.0.1",
1665+ "System.Runtime": "4.1.0",
1666+ "System.Runtime.Extensions": "4.1.0",
1667+ "System.Runtime.Handles": "4.0.1",
1668+ "System.Runtime.InteropServices": "4.1.0",
1669+ "System.Runtime.Numerics": "4.0.1",
1670+ "System.Security.Cryptography.Algorithms": "4.2.0",
1671+ "System.Security.Cryptography.Cng": "4.2.0",
1672+ "System.Security.Cryptography.Csp": "4.0.0",
1673+ "System.Security.Cryptography.Encoding": "4.0.0",
1674+ "System.Security.Cryptography.OpenSsl": "4.0.0",
1675+ "System.Security.Cryptography.Primitives": "4.0.0",
1676+ "System.Text.Encoding": "4.0.11",
1677+ "System.Threading": "4.0.11",
1678+ "runtime.native.System": "4.0.0",
1679+ "runtime.native.System.Net.Http": "4.0.1",
1680+ "runtime.native.System.Security.Cryptography": "4.0.0"
1681+ },
1682+ "compile": {
1683+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": {}
1684+ },
1685+ "runtimeTargets": {
1686+ "runtimes/win/lib/netstandard1.6/_._": {
1687+ "assetType": "runtime",
1688+ "rid": "win"
1689+ }
1690+ }
1691+ },
1692+ "System.Security.Principal/4.0.1": {
1693+ "type": "package",
1694+ "dependencies": {
1695+ "System.Runtime": "4.1.0"
1696+ },
1697+ "compile": {
1698+ "ref/netstandard1.0/System.Security.Principal.dll": {}
1699+ },
1700+ "runtime": {
1701+ "lib/netstandard1.0/_._": {}
1702+ }
1703+ },
1704+ "System.Security.Principal.Windows/4.0.0": {
1705+ "type": "package",
1706+ "dependencies": {
1707+ "Microsoft.NETCore.Platforms": "1.0.1",
1708+ "Microsoft.Win32.Primitives": "4.0.1",
1709+ "System.Collections": "4.0.11",
1710+ "System.Diagnostics.Debug": "4.0.11",
1711+ "System.Reflection": "4.1.0",
1712+ "System.Resources.ResourceManager": "4.0.1",
1713+ "System.Runtime": "4.1.0",
1714+ "System.Runtime.Extensions": "4.1.0",
1715+ "System.Runtime.Handles": "4.0.1",
1716+ "System.Runtime.InteropServices": "4.1.0",
1717+ "System.Security.Claims": "4.0.1",
1718+ "System.Security.Principal": "4.0.1",
1719+ "System.Text.Encoding": "4.0.11",
1720+ "System.Threading": "4.0.11"
1721+ },
1722+ "compile": {
1723+ "ref/netstandard1.3/_._": {}
1724+ },
1725+ "runtimeTargets": {
1726+ "runtimes/win/lib/netstandard1.3/_._": {
1727+ "assetType": "runtime",
1728+ "rid": "win"
1729+ }
1730+ }
1731+ },
1732+ "System.Text.Encoding/4.0.11": {
1733+ "type": "package",
1734+ "dependencies": {
1735+ "Microsoft.NETCore.Platforms": "1.0.1",
1736+ "Microsoft.NETCore.Targets": "1.0.1",
1737+ "System.Runtime": "4.1.0"
1738+ },
1739+ "compile": {
1740+ "ref/netstandard1.3/System.Text.Encoding.dll": {}
1741+ }
1742+ },
1743+ "System.Text.Encoding.CodePages/4.0.1": {
1744+ "type": "package",
1745+ "dependencies": {
1746+ "Microsoft.NETCore.Platforms": "1.0.1",
1747+ "System.Collections": "4.0.11",
1748+ "System.Globalization": "4.0.11",
1749+ "System.IO": "4.1.0",
1750+ "System.Reflection": "4.1.0",
1751+ "System.Resources.ResourceManager": "4.0.1",
1752+ "System.Runtime": "4.1.0",
1753+ "System.Runtime.Extensions": "4.1.0",
1754+ "System.Runtime.Handles": "4.0.1",
1755+ "System.Runtime.InteropServices": "4.1.0",
1756+ "System.Text.Encoding": "4.0.11",
1757+ "System.Threading": "4.0.11"
1758+ },
1759+ "compile": {
1760+ "ref/netstandard1.3/_._": {}
1761+ },
1762+ "runtimeTargets": {
1763+ "runtimes/win/lib/netstandard1.3/_._": {
1764+ "assetType": "runtime",
1765+ "rid": "win"
1766+ }
1767+ }
1768+ },
1769+ "System.Text.Encoding.Extensions/4.0.11": {
1770+ "type": "package",
1771+ "dependencies": {
1772+ "Microsoft.NETCore.Platforms": "1.0.1",
1773+ "Microsoft.NETCore.Targets": "1.0.1",
1774+ "System.Runtime": "4.1.0",
1775+ "System.Text.Encoding": "4.0.11"
1776+ },
1777+ "compile": {
1778+ "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": {}
1779+ }
1780+ },
1781+ "System.Text.RegularExpressions/4.1.0": {
1782+ "type": "package",
1783+ "dependencies": {
1784+ "System.Collections": "4.0.11",
1785+ "System.Globalization": "4.0.11",
1786+ "System.Resources.ResourceManager": "4.0.1",
1787+ "System.Runtime": "4.1.0",
1788+ "System.Runtime.Extensions": "4.1.0",
1789+ "System.Threading": "4.0.11"
1790+ },
1791+ "compile": {
1792+ "ref/netstandard1.6/System.Text.RegularExpressions.dll": {}
1793+ },
1794+ "runtime": {
1795+ "lib/netstandard1.6/System.Text.RegularExpressions.dll": {}
1796+ }
1797+ },
1798+ "System.Threading/4.0.11": {
1799+ "type": "package",
1800+ "dependencies": {
1801+ "System.Runtime": "4.1.0",
1802+ "System.Threading.Tasks": "4.0.11"
1803+ },
1804+ "compile": {
1805+ "ref/netstandard1.3/System.Threading.dll": {}
1806+ },
1807+ "runtime": {
1808+ "lib/netstandard1.3/System.Threading.dll": {}
1809+ }
1810+ },
1811+ "System.Threading.Overlapped/4.0.1": {
1812+ "type": "package",
1813+ "dependencies": {
1814+ "Microsoft.NETCore.Platforms": "1.0.1",
1815+ "System.Resources.ResourceManager": "4.0.1",
1816+ "System.Runtime": "4.1.0",
1817+ "System.Runtime.Handles": "4.0.1"
1818+ },
1819+ "compile": {
1820+ "ref/netstandard1.3/_._": {}
1821+ },
1822+ "runtimeTargets": {
1823+ "runtimes/win/lib/netstandard1.3/_._": {
1824+ "assetType": "runtime",
1825+ "rid": "win"
1826+ }
1827+ }
1828+ },
1829+ "System.Threading.Tasks/4.0.11": {
1830+ "type": "package",
1831+ "dependencies": {
1832+ "Microsoft.NETCore.Platforms": "1.0.1",
1833+ "Microsoft.NETCore.Targets": "1.0.1",
1834+ "System.Runtime": "4.1.0"
1835+ },
1836+ "compile": {
1837+ "ref/netstandard1.3/System.Threading.Tasks.dll": {}
1838+ }
1839+ },
1840+ "System.Threading.Tasks.Dataflow/4.6.0": {
1841+ "type": "package",
1842+ "dependencies": {
1843+ "System.Collections": "4.0.11",
1844+ "System.Collections.Concurrent": "4.0.12",
1845+ "System.Diagnostics.Debug": "4.0.11",
1846+ "System.Diagnostics.Tracing": "4.1.0",
1847+ "System.Dynamic.Runtime": "4.0.11",
1848+ "System.Linq": "4.1.0",
1849+ "System.Resources.ResourceManager": "4.0.1",
1850+ "System.Runtime": "4.1.0",
1851+ "System.Runtime.Extensions": "4.1.0",
1852+ "System.Threading": "4.0.11",
1853+ "System.Threading.Tasks": "4.0.11"
1854+ },
1855+ "compile": {
1856+ "lib/netstandard1.1/System.Threading.Tasks.Dataflow.dll": {}
1857+ },
1858+ "runtime": {
1859+ "lib/netstandard1.1/_._": {}
1860+ }
1861+ },
1862+ "System.Threading.Tasks.Extensions/4.0.0": {
1863+ "type": "package",
1864+ "dependencies": {
1865+ "System.Collections": "4.0.11",
1866+ "System.Runtime": "4.1.0",
1867+ "System.Threading.Tasks": "4.0.11"
1868+ },
1869+ "compile": {
1870+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {}
1871+ },
1872+ "runtime": {
1873+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": {}
1874+ }
1875+ },
1876+ "System.Threading.Tasks.Parallel/4.0.1": {
1877+ "type": "package",
1878+ "dependencies": {
1879+ "System.Collections.Concurrent": "4.0.12",
1880+ "System.Diagnostics.Debug": "4.0.11",
1881+ "System.Diagnostics.Tracing": "4.1.0",
1882+ "System.Resources.ResourceManager": "4.0.1",
1883+ "System.Runtime": "4.1.0",
1884+ "System.Runtime.Extensions": "4.1.0",
1885+ "System.Threading": "4.0.11",
1886+ "System.Threading.Tasks": "4.0.11"
1887+ },
1888+ "compile": {
1889+ "ref/netstandard1.1/System.Threading.Tasks.Parallel.dll": {}
1890+ },
1891+ "runtime": {
1892+ "lib/netstandard1.3/_._": {}
1893+ }
1894+ },
1895+ "System.Threading.Thread/4.0.0": {
1896+ "type": "package",
1897+ "dependencies": {
1898+ "System.Runtime": "4.1.0"
1899+ },
1900+ "compile": {
1901+ "ref/netstandard1.3/System.Threading.Thread.dll": {}
1902+ },
1903+ "runtime": {
1904+ "lib/netstandard1.3/_._": {}
1905+ }
1906+ },
1907+ "System.Threading.ThreadPool/4.0.10": {
1908+ "type": "package",
1909+ "dependencies": {
1910+ "System.Runtime": "4.1.0",
1911+ "System.Runtime.Handles": "4.0.1"
1912+ },
1913+ "compile": {
1914+ "ref/netstandard1.3/System.Threading.ThreadPool.dll": {}
1915+ },
1916+ "runtime": {
1917+ "lib/netstandard1.3/_._": {}
1918+ }
1919+ },
1920+ "System.Threading.Timer/4.0.1": {
1921+ "type": "package",
1922+ "dependencies": {
1923+ "Microsoft.NETCore.Platforms": "1.0.1",
1924+ "Microsoft.NETCore.Targets": "1.0.1",
1925+ "System.Runtime": "4.1.0"
1926+ },
1927+ "compile": {
1928+ "ref/netstandard1.2/System.Threading.Timer.dll": {}
1929+ }
1930+ },
1931+ "System.Xml.ReaderWriter/4.0.11": {
1932+ "type": "package",
1933+ "dependencies": {
1934+ "System.Collections": "4.0.11",
1935+ "System.Diagnostics.Debug": "4.0.11",
1936+ "System.Globalization": "4.0.11",
1937+ "System.IO": "4.1.0",
1938+ "System.IO.FileSystem": "4.0.1",
1939+ "System.IO.FileSystem.Primitives": "4.0.1",
1940+ "System.Resources.ResourceManager": "4.0.1",
1941+ "System.Runtime": "4.1.0",
1942+ "System.Runtime.Extensions": "4.1.0",
1943+ "System.Runtime.InteropServices": "4.1.0",
1944+ "System.Text.Encoding": "4.0.11",
1945+ "System.Text.Encoding.Extensions": "4.0.11",
1946+ "System.Text.RegularExpressions": "4.1.0",
1947+ "System.Threading.Tasks": "4.0.11",
1948+ "System.Threading.Tasks.Extensions": "4.0.0"
1949+ },
1950+ "compile": {
1951+ "ref/netstandard1.3/System.Xml.ReaderWriter.dll": {}
1952+ },
1953+ "runtime": {
1954+ "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {}
1955+ }
1956+ },
1957+ "System.Xml.XDocument/4.0.11": {
1958+ "type": "package",
1959+ "dependencies": {
1960+ "System.Collections": "4.0.11",
1961+ "System.Diagnostics.Debug": "4.0.11",
1962+ "System.Diagnostics.Tools": "4.0.1",
1963+ "System.Globalization": "4.0.11",
1964+ "System.IO": "4.1.0",
1965+ "System.Reflection": "4.1.0",
1966+ "System.Resources.ResourceManager": "4.0.1",
1967+ "System.Runtime": "4.1.0",
1968+ "System.Runtime.Extensions": "4.1.0",
1969+ "System.Text.Encoding": "4.0.11",
1970+ "System.Threading": "4.0.11",
1971+ "System.Xml.ReaderWriter": "4.0.11"
1972+ },
1973+ "compile": {
1974+ "ref/netstandard1.3/System.Xml.XDocument.dll": {}
1975+ },
1976+ "runtime": {
1977+ "lib/netstandard1.3/System.Xml.XDocument.dll": {}
1978+ }
1979+ },
1980+ "System.Xml.XmlDocument/4.0.1": {
1981+ "type": "package",
1982+ "dependencies": {
1983+ "System.Collections": "4.0.11",
1984+ "System.Diagnostics.Debug": "4.0.11",
1985+ "System.Globalization": "4.0.11",
1986+ "System.IO": "4.1.0",
1987+ "System.Resources.ResourceManager": "4.0.1",
1988+ "System.Runtime": "4.1.0",
1989+ "System.Runtime.Extensions": "4.1.0",
1990+ "System.Text.Encoding": "4.0.11",
1991+ "System.Threading": "4.0.11",
1992+ "System.Xml.ReaderWriter": "4.0.11"
1993+ },
1994+ "compile": {
1995+ "ref/netstandard1.3/_._": {}
1996+ },
1997+ "runtime": {
1998+ "lib/netstandard1.3/_._": {}
1999+ }
2000+ },
2001+ "System.Xml.XPath/4.0.1": {
2002+ "type": "package",
2003+ "dependencies": {
2004+ "System.Collections": "4.0.11",
2005+ "System.Diagnostics.Debug": "4.0.11",
2006+ "System.Globalization": "4.0.11",
2007+ "System.IO": "4.1.0",
2008+ "System.Resources.ResourceManager": "4.0.1",
2009+ "System.Runtime": "4.1.0",
2010+ "System.Runtime.Extensions": "4.1.0",
2011+ "System.Threading": "4.0.11",
2012+ "System.Xml.ReaderWriter": "4.0.11"
2013+ },
2014+ "compile": {
2015+ "ref/netstandard1.3/_._": {}
2016+ },
2017+ "runtime": {
2018+ "lib/netstandard1.3/_._": {}
2019+ }
2020+ },
2021+ "System.Xml.XPath.XDocument/4.0.1": {
2022+ "type": "package",
2023+ "dependencies": {
2024+ "System.Diagnostics.Debug": "4.0.11",
2025+ "System.Linq": "4.1.0",
2026+ "System.Resources.ResourceManager": "4.0.1",
2027+ "System.Runtime": "4.1.0",
2028+ "System.Runtime.Extensions": "4.1.0",
2029+ "System.Threading": "4.0.11",
2030+ "System.Xml.ReaderWriter": "4.0.11",
2031+ "System.Xml.XDocument": "4.0.11",
2032+ "System.Xml.XPath": "4.0.1"
2033+ },
2034+ "compile": {
2035+ "ref/netstandard1.3/_._": {}
2036+ },
2037+ "runtime": {
2038+ "lib/netstandard1.3/_._": {}
2039+ }
2040+ }
2041+ }
2042+ },
2043+ "libraries": {
2044+ "Libuv/1.9.0": {
2045+ "sha512": "D8v8u5uSFuPNVxs2f7p4jxbNv8dbFuC77iKzvKPdFezOewuzOIqD1TXylLQqA5BEcylP9d0ENJlP/MrTLUEjVA==",
2046+ "type": "package",
2047+ "path": "Libuv/1.9.0",
2048+ "files": [
2049+ "Libuv.1.9.0.nupkg.sha512",
2050+ "Libuv.nuspec",
2051+ "License.txt",
2052+ "runtimes/debian-x64/native/libuv.so",
2053+ "runtimes/fedora-x64/native/libuv.so",
2054+ "runtimes/opensuse-x64/native/libuv.so",
2055+ "runtimes/osx/native/libuv.dylib",
2056+ "runtimes/rhel-x64/native/libuv.so",
2057+ "runtimes/win7-arm/native/libuv.dll",
2058+ "runtimes/win7-x64/native/libuv.dll",
2059+ "runtimes/win7-x86/native/libuv.dll"
2060+ ]
2061+ },
2062+ "Microsoft.CodeAnalysis.Analyzers/1.1.0": {
2063+ "sha512": "OH6ljOMgMRZdmt5fNQ6UTMbdj8raOzuzDSrIW5C2ZKTrCKxVzzXF8yAywokUC+bkK826eeJ2xD5dxIwEAULhFA==",
2064+ "type": "package",
2065+ "path": "Microsoft.CodeAnalysis.Analyzers/1.1.0",
2066+ "files": [
2067+ "Microsoft.CodeAnalysis.Analyzers.1.1.0.nupkg.sha512",
2068+ "Microsoft.CodeAnalysis.Analyzers.nuspec",
2069+ "ThirdPartyNotices.rtf",
2070+ "analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll",
2071+ "analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll",
2072+ "analyzers/dotnet/vb/Microsoft.CodeAnalysis.Analyzers.dll",
2073+ "analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.Analyzers.dll",
2074+ "tools/install.ps1",
2075+ "tools/uninstall.ps1"
2076+ ]
2077+ },
2078+ "Microsoft.CodeAnalysis.Common/1.3.0": {
2079+ "sha512": "x7OqhuCTG3yGpsbN0jmnxew6nF6GG1JXWcCQ+gvoqlk8rO+JqUYtCJrHtzzw2jFb0kVsZNlRnigqTzbz9tqR5g==",
2080+ "type": "package",
2081+ "path": "Microsoft.CodeAnalysis.Common/1.3.0",
2082+ "files": [
2083+ "Microsoft.CodeAnalysis.Common.1.3.0.nupkg.sha512",
2084+ "Microsoft.CodeAnalysis.Common.nuspec",
2085+ "ThirdPartyNotices.rtf",
2086+ "lib/net45/Microsoft.CodeAnalysis.dll",
2087+ "lib/net45/Microsoft.CodeAnalysis.xml",
2088+ "lib/netstandard1.3/Microsoft.CodeAnalysis.dll",
2089+ "lib/netstandard1.3/Microsoft.CodeAnalysis.xml",
2090+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.dll",
2091+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.xml"
2092+ ]
2093+ },
2094+ "Microsoft.CodeAnalysis.CSharp/1.3.0": {
2095+ "sha512": "mFf0XRjrNYxpme+j7OwlFS8LiAdL67HAnMv6tiqcwSXXfNz6LFAqcB90jQB8AQIQd/n6TtoqBayf47Fk+1w7HQ==",
2096+ "type": "package",
2097+ "path": "Microsoft.CodeAnalysis.CSharp/1.3.0",
2098+ "files": [
2099+ "Microsoft.CodeAnalysis.CSharp.1.3.0.nupkg.sha512",
2100+ "Microsoft.CodeAnalysis.CSharp.nuspec",
2101+ "ThirdPartyNotices.rtf",
2102+ "lib/net45/Microsoft.CodeAnalysis.CSharp.dll",
2103+ "lib/net45/Microsoft.CodeAnalysis.CSharp.xml",
2104+ "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll",
2105+ "lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.xml",
2106+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.dll",
2107+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.CSharp.xml"
2108+ ]
2109+ },
2110+ "Microsoft.CodeAnalysis.VisualBasic/1.3.0": {
2111+ "sha512": "s3UugysCXE1uE/grnNxuifxfz46kftnZya4poBASL1jpQweRd7MBgHMZdwR23wOXkGoqZPOcAbQMnWx4yhiGmw==",
2112+ "type": "package",
2113+ "path": "Microsoft.CodeAnalysis.VisualBasic/1.3.0",
2114+ "files": [
2115+ "Microsoft.CodeAnalysis.VisualBasic.1.3.0.nupkg.sha512",
2116+ "Microsoft.CodeAnalysis.VisualBasic.nuspec",
2117+ "ThirdPartyNotices.rtf",
2118+ "lib/net45/Microsoft.CodeAnalysis.VisualBasic.dll",
2119+ "lib/net45/Microsoft.CodeAnalysis.VisualBasic.xml",
2120+ "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.dll",
2121+ "lib/netstandard1.3/Microsoft.CodeAnalysis.VisualBasic.xml",
2122+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.VisualBasic.dll",
2123+ "lib/portable-net45+win8/Microsoft.CodeAnalysis.VisualBasic.xml"
2124+ ]
2125+ },
2126+ "Microsoft.CSharp/4.0.1": {
2127+ "sha512": "9ghWfwsNHaWVZcy86YIUYGv9c9AZLYZ4Tad47IzjekVrI5zp6TGy6FXoxqdkxGn8apv6TqoaLoRWAAEQXyf60Q==",
2128+ "type": "package",
2129+ "path": "Microsoft.CSharp/4.0.1",
2130+ "files": [
2131+ "Microsoft.CSharp.4.0.1.nupkg.sha512",
2132+ "Microsoft.CSharp.nuspec",
2133+ "ThirdPartyNotices.txt",
2134+ "dotnet_library_license.txt",
2135+ "lib/MonoAndroid10/_._",
2136+ "lib/MonoTouch10/_._",
2137+ "lib/net45/_._",
2138+ "lib/netcore50/Microsoft.CSharp.dll",
2139+ "lib/netstandard1.3/Microsoft.CSharp.dll",
2140+ "lib/portable-net45+win8+wp8+wpa81/_._",
2141+ "lib/win8/_._",
2142+ "lib/wp80/_._",
2143+ "lib/wpa81/_._",
2144+ "lib/xamarinios10/_._",
2145+ "lib/xamarinmac20/_._",
2146+ "lib/xamarintvos10/_._",
2147+ "lib/xamarinwatchos10/_._",
2148+ "ref/MonoAndroid10/_._",
2149+ "ref/MonoTouch10/_._",
2150+ "ref/net45/_._",
2151+ "ref/netcore50/Microsoft.CSharp.dll",
2152+ "ref/netcore50/Microsoft.CSharp.xml",
2153+ "ref/netcore50/de/Microsoft.CSharp.xml",
2154+ "ref/netcore50/es/Microsoft.CSharp.xml",
2155+ "ref/netcore50/fr/Microsoft.CSharp.xml",
2156+ "ref/netcore50/it/Microsoft.CSharp.xml",
2157+ "ref/netcore50/ja/Microsoft.CSharp.xml",
2158+ "ref/netcore50/ko/Microsoft.CSharp.xml",
2159+ "ref/netcore50/ru/Microsoft.CSharp.xml",
2160+ "ref/netcore50/zh-hans/Microsoft.CSharp.xml",
2161+ "ref/netcore50/zh-hant/Microsoft.CSharp.xml",
2162+ "ref/netstandard1.0/Microsoft.CSharp.dll",
2163+ "ref/netstandard1.0/Microsoft.CSharp.xml",
2164+ "ref/netstandard1.0/de/Microsoft.CSharp.xml",
2165+ "ref/netstandard1.0/es/Microsoft.CSharp.xml",
2166+ "ref/netstandard1.0/fr/Microsoft.CSharp.xml",
2167+ "ref/netstandard1.0/it/Microsoft.CSharp.xml",
2168+ "ref/netstandard1.0/ja/Microsoft.CSharp.xml",
2169+ "ref/netstandard1.0/ko/Microsoft.CSharp.xml",
2170+ "ref/netstandard1.0/ru/Microsoft.CSharp.xml",
2171+ "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml",
2172+ "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml",
2173+ "ref/portable-net45+win8+wp8+wpa81/_._",
2174+ "ref/win8/_._",
2175+ "ref/wp80/_._",
2176+ "ref/wpa81/_._",
2177+ "ref/xamarinios10/_._",
2178+ "ref/xamarinmac20/_._",
2179+ "ref/xamarintvos10/_._",
2180+ "ref/xamarinwatchos10/_._"
2181+ ]
2182+ },
2183+ "Microsoft.NETCore.App/1.0.1": {
2184+ "sha512": "wtgwT7w/yMHKUB5Y0dVzVEoUagz7VaZj9REjfP7GtgzVlAVrrK+V0f59HZPG35JIjE8nfBlzOCR+L61FDJEnNw==",
2185+ "type": "package",
2186+ "path": "Microsoft.NETCore.App/1.0.1",
2187+ "files": [
2188+ "Microsoft.NETCore.App.1.0.1.nupkg.sha512",
2189+ "Microsoft.NETCore.App.nuspec",
2190+ "ThirdPartyNotices.txt",
2191+ "dotnet_library_license.txt",
2192+ "lib/netcoreapp1.0/_._"
2193+ ]
2194+ },
2195+ "Microsoft.NETCore.DotNetHost/1.0.1": {
2196+ "sha512": "SYdAiKG/O9ekimIQ05bbdVjWnY8RBsfKnhmx4OkJv3bhQzOKOTbMgNCTXcUu5k4A2HXF6tCFISlkTRT5WZ3kJQ==",
2197+ "type": "package",
2198+ "path": "Microsoft.NETCore.DotNetHost/1.0.1",
2199+ "files": [
2200+ "Microsoft.NETCore.DotNetHost.1.0.1.nupkg.sha512",
2201+ "Microsoft.NETCore.DotNetHost.nuspec",
2202+ "ThirdPartyNotices.txt",
2203+ "dotnet_library_license.txt",
2204+ "runtime.json"
2205+ ]
2206+ },
2207+ "Microsoft.NETCore.DotNetHostPolicy/1.0.1": {
2208+ "sha512": "4uX9ChfLNRGAT6kZnXOB51VvveEy7HOiAPBtvSqKeI5fVmNJkCLBOG8JwCxxOU1Yxbgu5OSoZyoYCJt0NqMQuA==",
2209+ "type": "package",
2210+ "path": "Microsoft.NETCore.DotNetHostPolicy/1.0.1",
2211+ "files": [
2212+ "Microsoft.NETCore.DotNetHostPolicy.1.0.1.nupkg.sha512",
2213+ "Microsoft.NETCore.DotNetHostPolicy.nuspec",
2214+ "ThirdPartyNotices.txt",
2215+ "dotnet_library_license.txt",
2216+ "runtime.json"
2217+ ]
2218+ },
2219+ "Microsoft.NETCore.DotNetHostResolver/1.0.1": {
2220+ "sha512": "yVXttMsS/v8EpK698VTvuCTB4+wI1O7qFjZK3gPul6juCqoXEABRdpe+DxehtZ3qRBkbWH4MXxCyrfI2iOLy2w==",
2221+ "type": "package",
2222+ "path": "Microsoft.NETCore.DotNetHostResolver/1.0.1",
2223+ "files": [
2224+ "Microsoft.NETCore.DotNetHostResolver.1.0.1.nupkg.sha512",
2225+ "Microsoft.NETCore.DotNetHostResolver.nuspec",
2226+ "ThirdPartyNotices.txt",
2227+ "dotnet_library_license.txt",
2228+ "runtime.json"
2229+ ]
2230+ },
2231+ "Microsoft.NETCore.Jit/1.0.4": {
2232+ "sha512": "EeJczJ2Gxx7ikO7N0IVE+CAv4/G3uYLKZGSGMXz8SgFMSk2fSytUCBBTv8iOAPXflbCOameAe+I+tFKX+6I3vg==",
2233+ "type": "package",
2234+ "path": "Microsoft.NETCore.Jit/1.0.4",
2235+ "files": [
2236+ "Microsoft.NETCore.Jit.1.0.4.nupkg.sha512",
2237+ "Microsoft.NETCore.Jit.nuspec",
2238+ "ThirdPartyNotices.txt",
2239+ "dotnet_library_license.txt",
2240+ "runtime.json"
2241+ ]
2242+ },
2243+ "Microsoft.NETCore.Platforms/1.0.1": {
2244+ "sha512": "oUUR+PxdiR+DDOMYD/qbSB1gtuuDR9bToBZjqSKwyr/HtzPVpHCg4zl5TgPLaxQ9X/A8VfbPoGUE1c5wi6D2uA==",
2245+ "type": "package",
2246+ "path": "Microsoft.NETCore.Platforms/1.0.1",
2247+ "files": [
2248+ "Microsoft.NETCore.Platforms.1.0.1.nupkg.sha512",
2249+ "Microsoft.NETCore.Platforms.nuspec",
2250+ "ThirdPartyNotices.txt",
2251+ "dotnet_library_license.txt",
2252+ "lib/netstandard1.0/_._",
2253+ "runtime.json"
2254+ ]
2255+ },
2256+ "Microsoft.NETCore.Runtime.CoreCLR/1.0.4": {
2257+ "sha512": "YOt2elMGDdHsnmRDMFKk1bjUjNbCuabxCPYYPrXuyrNodXe2uTUh7kRvSow3ONGYX8VHP426PejCwy0vSoFDag==",
2258+ "type": "package",
2259+ "path": "Microsoft.NETCore.Runtime.CoreCLR/1.0.4",
2260+ "files": [
2261+ "Microsoft.NETCore.Runtime.CoreCLR.1.0.4.nupkg.sha512",
2262+ "Microsoft.NETCore.Runtime.CoreCLR.nuspec",
2263+ "ThirdPartyNotices.txt",
2264+ "dotnet_library_license.txt",
2265+ "runtime.json"
2266+ ]
2267+ },
2268+ "Microsoft.NETCore.Targets/1.0.1": {
2269+ "sha512": "D6W7E7bvLMulsxXkMmMZTkYTr2lbV/J1JHYELebmtXEJVBGUA/E6xuDbbkcxZok/jl/FiM/xDp2JESnff8vAkA==",
2270+ "type": "package",
2271+ "path": "Microsoft.NETCore.Targets/1.0.1",
2272+ "files": [
2273+ "Microsoft.NETCore.Targets.1.0.1.nupkg.sha512",
2274+ "Microsoft.NETCore.Targets.nuspec",
2275+ "ThirdPartyNotices.txt",
2276+ "dotnet_library_license.txt",
2277+ "lib/netstandard1.0/_._",
2278+ "runtime.json"
2279+ ]
2280+ },
2281+ "Microsoft.NETCore.Windows.ApiSets/1.0.1": {
2282+ "sha512": "j2w31BijMivx1IuXXfiMfJ6aIggvCap3+uwrkBGMdJwZnJfLr0O1Si5dpv503TPWmCfOFC9X8w5EF43CmehFuw==",
2283+ "type": "package",
2284+ "path": "Microsoft.NETCore.Windows.ApiSets/1.0.1",
2285+ "files": [
2286+ "Microsoft.NETCore.Windows.ApiSets.1.0.1.nupkg.sha512",
2287+ "Microsoft.NETCore.Windows.ApiSets.nuspec",
2288+ "ThirdPartyNotices.txt",
2289+ "dotnet_library_license.txt",
2290+ "runtime.json"
2291+ ]
2292+ },
2293+ "Microsoft.VisualBasic/10.0.1": {
2294+ "sha512": "X7UPwB1yNq1O3x/x+GsPEEZLq2m6/DkFOw+dwMYpvisuLeepCBex6KOIg76N125VkYNKHFYQW1xHKxfUp6rzQA==",
2295+ "type": "package",
2296+ "path": "Microsoft.VisualBasic/10.0.1",
2297+ "files": [
2298+ "Microsoft.VisualBasic.10.0.1.nupkg.sha512",
2299+ "Microsoft.VisualBasic.nuspec",
2300+ "ThirdPartyNotices.txt",
2301+ "dotnet_library_license.txt",
2302+ "lib/net45/_._",
2303+ "lib/netcore50/Microsoft.VisualBasic.dll",
2304+ "lib/netstandard1.3/Microsoft.VisualBasic.dll",
2305+ "lib/portable-net45+win8+wpa81/_._",
2306+ "lib/win8/_._",
2307+ "lib/wpa81/_._",
2308+ "ref/net45/_._",
2309+ "ref/netcore50/Microsoft.VisualBasic.dll",
2310+ "ref/netcore50/Microsoft.VisualBasic.xml",
2311+ "ref/netcore50/de/Microsoft.VisualBasic.xml",
2312+ "ref/netcore50/es/Microsoft.VisualBasic.xml",
2313+ "ref/netcore50/fr/Microsoft.VisualBasic.xml",
2314+ "ref/netcore50/it/Microsoft.VisualBasic.xml",
2315+ "ref/netcore50/ja/Microsoft.VisualBasic.xml",
2316+ "ref/netcore50/ko/Microsoft.VisualBasic.xml",
2317+ "ref/netcore50/ru/Microsoft.VisualBasic.xml",
2318+ "ref/netcore50/zh-hans/Microsoft.VisualBasic.xml",
2319+ "ref/netcore50/zh-hant/Microsoft.VisualBasic.xml",
2320+ "ref/netstandard1.1/Microsoft.VisualBasic.dll",
2321+ "ref/netstandard1.1/Microsoft.VisualBasic.xml",
2322+ "ref/netstandard1.1/de/Microsoft.VisualBasic.xml",
2323+ "ref/netstandard1.1/es/Microsoft.VisualBasic.xml",
2324+ "ref/netstandard1.1/fr/Microsoft.VisualBasic.xml",
2325+ "ref/netstandard1.1/it/Microsoft.VisualBasic.xml",
2326+ "ref/netstandard1.1/ja/Microsoft.VisualBasic.xml",
2327+ "ref/netstandard1.1/ko/Microsoft.VisualBasic.xml",
2328+ "ref/netstandard1.1/ru/Microsoft.VisualBasic.xml",
2329+ "ref/netstandard1.1/zh-hans/Microsoft.VisualBasic.xml",
2330+ "ref/netstandard1.1/zh-hant/Microsoft.VisualBasic.xml",
2331+ "ref/portable-net45+win8+wpa81/_._",
2332+ "ref/win8/_._",
2333+ "ref/wpa81/_._"
2334+ ]
2335+ },
2336+ "Microsoft.Win32.Primitives/4.0.1": {
2337+ "sha512": "blO/BsGSJaNZyiocTXJDAn3zdNUmckwWuxYC0Xv0sTp6KX+4lzV6iJR3YpFrxL6j4wu9lSnAYVQ1FX49G/QJcA==",
2338+ "type": "package",
2339+ "path": "Microsoft.Win32.Primitives/4.0.1",
2340+ "files": [
2341+ "Microsoft.Win32.Primitives.4.0.1.nupkg.sha512",
2342+ "Microsoft.Win32.Primitives.nuspec",
2343+ "ThirdPartyNotices.txt",
2344+ "dotnet_library_license.txt",
2345+ "lib/MonoAndroid10/_._",
2346+ "lib/MonoTouch10/_._",
2347+ "lib/net46/Microsoft.Win32.Primitives.dll",
2348+ "lib/xamarinios10/_._",
2349+ "lib/xamarinmac20/_._",
2350+ "lib/xamarintvos10/_._",
2351+ "lib/xamarinwatchos10/_._",
2352+ "ref/MonoAndroid10/_._",
2353+ "ref/MonoTouch10/_._",
2354+ "ref/net46/Microsoft.Win32.Primitives.dll",
2355+ "ref/netstandard1.3/Microsoft.Win32.Primitives.dll",
2356+ "ref/netstandard1.3/Microsoft.Win32.Primitives.xml",
2357+ "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml",
2358+ "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml",
2359+ "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml",
2360+ "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml",
2361+ "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml",
2362+ "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml",
2363+ "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml",
2364+ "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml",
2365+ "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml",
2366+ "ref/xamarinios10/_._",
2367+ "ref/xamarinmac20/_._",
2368+ "ref/xamarintvos10/_._",
2369+ "ref/xamarinwatchos10/_._"
2370+ ]
2371+ },
2372+ "Microsoft.Win32.Registry/4.0.0": {
2373+ "sha512": "sKRGsOYljokZ+fG3veg9izmLN/pSNVAkQTsaTqv3Fws8TDJr0uBICSXZz9/d/SCeZhZwqpAUxmnJSrHsOXOPbg==",
2374+ "type": "package",
2375+ "path": "Microsoft.Win32.Registry/4.0.0",
2376+ "files": [
2377+ "Microsoft.Win32.Registry.4.0.0.nupkg.sha512",
2378+ "Microsoft.Win32.Registry.nuspec",
2379+ "ThirdPartyNotices.txt",
2380+ "dotnet_library_license.txt",
2381+ "lib/net46/Microsoft.Win32.Registry.dll",
2382+ "ref/net46/Microsoft.Win32.Registry.dll",
2383+ "ref/netstandard1.3/Microsoft.Win32.Registry.dll",
2384+ "ref/netstandard1.3/Microsoft.Win32.Registry.xml",
2385+ "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml",
2386+ "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml",
2387+ "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml",
2388+ "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml",
2389+ "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml",
2390+ "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml",
2391+ "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml",
2392+ "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml",
2393+ "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml",
2394+ "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll",
2395+ "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll",
2396+ "runtimes/win/lib/netcore50/_._",
2397+ "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll"
2398+ ]
2399+ },
2400+ "NETStandard.Library/1.6.0": {
2401+ "sha512": "SJiGdgbNk3ihgCwRxHNrIGquXfaWIAFT/J2V2MWrvkQAfxqJa+HPZQ5SBnY+/OEdJamg1jDbbn2TPtl0dEFWPA==",
2402+ "type": "package",
2403+ "path": "NETStandard.Library/1.6.0",
2404+ "files": [
2405+ "NETStandard.Library.1.6.0.nupkg.sha512",
2406+ "NETStandard.Library.nuspec",
2407+ "ThirdPartyNotices.txt",
2408+ "dotnet_library_license.txt"
2409+ ]
2410+ },
2411+ "Newtonsoft.Json/9.0.1": {
2412+ "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==",
2413+ "type": "package",
2414+ "path": "Newtonsoft.Json/9.0.1",
2415+ "files": [
2416+ "Newtonsoft.Json.9.0.1.nupkg.sha512",
2417+ "Newtonsoft.Json.nuspec",
2418+ "lib/net20/Newtonsoft.Json.dll",
2419+ "lib/net20/Newtonsoft.Json.xml",
2420+ "lib/net35/Newtonsoft.Json.dll",
2421+ "lib/net35/Newtonsoft.Json.xml",
2422+ "lib/net40/Newtonsoft.Json.dll",
2423+ "lib/net40/Newtonsoft.Json.xml",
2424+ "lib/net45/Newtonsoft.Json.dll",
2425+ "lib/net45/Newtonsoft.Json.xml",
2426+ "lib/netstandard1.0/Newtonsoft.Json.dll",
2427+ "lib/netstandard1.0/Newtonsoft.Json.xml",
2428+ "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll",
2429+ "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml",
2430+ "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll",
2431+ "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml",
2432+ "tools/install.ps1"
2433+ ]
2434+ },
2435+ "runtime.native.System/4.0.0": {
2436+ "sha512": "gFmH1mF+QbzRzVT93fsDgvjOv8BdosZrRo14BDAkU3DgjhjvRMvfqzFQROFfu3NabxUjfeGMAsJ/VFED3EvWdA==",
2437+ "type": "package",
2438+ "path": "runtime.native.System/4.0.0",
2439+ "files": [
2440+ "ThirdPartyNotices.txt",
2441+ "dotnet_library_license.txt",
2442+ "lib/netstandard1.0/_._",
2443+ "runtime.native.System.4.0.0.nupkg.sha512",
2444+ "runtime.native.System.nuspec"
2445+ ]
2446+ },
2447+ "runtime.native.System.IO.Compression/4.1.0": {
2448+ "sha512": "8KVM+e9f20jMcW0nxaLZZb1/SuKXpqLDkXE0yOJscB1i84ibUnirFvvHwbKE/4Zw+1EhnXqbW6gfRQG5pTY7/Q==",
2449+ "type": "package",
2450+ "path": "runtime.native.System.IO.Compression/4.1.0",
2451+ "files": [
2452+ "ThirdPartyNotices.txt",
2453+ "dotnet_library_license.txt",
2454+ "lib/netstandard1.0/_._",
2455+ "runtime.native.System.IO.Compression.4.1.0.nupkg.sha512",
2456+ "runtime.native.System.IO.Compression.nuspec"
2457+ ]
2458+ },
2459+ "runtime.native.System.Net.Http/4.0.1": {
2460+ "sha512": "KjLWjCsLyD3b8mfCtNyR4pXowLdBq9Z2CZUcy0bo4RHIW9TutuvILOlDKR7q/DLMNC8DODqknLspZm6FupE/qA==",
2461+ "type": "package",
2462+ "path": "runtime.native.System.Net.Http/4.0.1",
2463+ "files": [
2464+ "ThirdPartyNotices.txt",
2465+ "dotnet_library_license.txt",
2466+ "lib/netstandard1.0/_._",
2467+ "runtime.native.System.Net.Http.4.0.1.nupkg.sha512",
2468+ "runtime.native.System.Net.Http.nuspec"
2469+ ]
2470+ },
2471+ "runtime.native.System.Net.Security/4.0.1": {
2472+ "sha512": "a55jykBPMea1SIVjJEN1PvQ4KnyL1ZG8i60MBDzLk5Eu4IakIPetbnOc+d4knFtUKfzUcNW95BlprQU5IWuALg==",
2473+ "type": "package",
2474+ "path": "runtime.native.System.Net.Security/4.0.1",
2475+ "files": [
2476+ "ThirdPartyNotices.txt",
2477+ "dotnet_library_license.txt",
2478+ "lib/netstandard1.0/_._",
2479+ "runtime.native.System.Net.Security.4.0.1.nupkg.sha512",
2480+ "runtime.native.System.Net.Security.nuspec"
2481+ ]
2482+ },
2483+ "runtime.native.System.Security.Cryptography/4.0.0": {
2484+ "sha512": "X2LMjiJLUp7SmlOEcJIZkLuMe8ns8EB1SDeGTgTwQta2XFGU8W7pnORYg17dMA6p002pXHCWlWrP6M0d4rSWCA==",
2485+ "type": "package",
2486+ "path": "runtime.native.System.Security.Cryptography/4.0.0",
2487+ "files": [
2488+ "ThirdPartyNotices.txt",
2489+ "dotnet_library_license.txt",
2490+ "lib/netstandard1.0/_._",
2491+ "runtime.native.System.Security.Cryptography.4.0.0.nupkg.sha512",
2492+ "runtime.native.System.Security.Cryptography.nuspec"
2493+ ]
2494+ },
2495+ "System.AppContext/4.1.0": {
2496+ "sha512": "5Km5wcAufp3oVpLzIvB3APvVCjmZQB04rwl6kjMLOGDZW/w+kZPEMmTisoG4V6UkZ2o0Kyg9hYB66kkCdEIL+g==",
2497+ "type": "package",
2498+ "path": "System.AppContext/4.1.0",
2499+ "files": [
2500+ "System.AppContext.4.1.0.nupkg.sha512",
2501+ "System.AppContext.nuspec",
2502+ "ThirdPartyNotices.txt",
2503+ "dotnet_library_license.txt",
2504+ "lib/MonoAndroid10/_._",
2505+ "lib/MonoTouch10/_._",
2506+ "lib/net46/System.AppContext.dll",
2507+ "lib/net463/System.AppContext.dll",
2508+ "lib/netcore50/System.AppContext.dll",
2509+ "lib/netstandard1.6/System.AppContext.dll",
2510+ "lib/xamarinios10/_._",
2511+ "lib/xamarinmac20/_._",
2512+ "lib/xamarintvos10/_._",
2513+ "lib/xamarinwatchos10/_._",
2514+ "ref/MonoAndroid10/_._",
2515+ "ref/MonoTouch10/_._",
2516+ "ref/net46/System.AppContext.dll",
2517+ "ref/net463/System.AppContext.dll",
2518+ "ref/netstandard/_._",
2519+ "ref/netstandard1.3/System.AppContext.dll",
2520+ "ref/netstandard1.3/System.AppContext.xml",
2521+ "ref/netstandard1.3/de/System.AppContext.xml",
2522+ "ref/netstandard1.3/es/System.AppContext.xml",
2523+ "ref/netstandard1.3/fr/System.AppContext.xml",
2524+ "ref/netstandard1.3/it/System.AppContext.xml",
2525+ "ref/netstandard1.3/ja/System.AppContext.xml",
2526+ "ref/netstandard1.3/ko/System.AppContext.xml",
2527+ "ref/netstandard1.3/ru/System.AppContext.xml",
2528+ "ref/netstandard1.3/zh-hans/System.AppContext.xml",
2529+ "ref/netstandard1.3/zh-hant/System.AppContext.xml",
2530+ "ref/netstandard1.6/System.AppContext.dll",
2531+ "ref/netstandard1.6/System.AppContext.xml",
2532+ "ref/netstandard1.6/de/System.AppContext.xml",
2533+ "ref/netstandard1.6/es/System.AppContext.xml",
2534+ "ref/netstandard1.6/fr/System.AppContext.xml",
2535+ "ref/netstandard1.6/it/System.AppContext.xml",
2536+ "ref/netstandard1.6/ja/System.AppContext.xml",
2537+ "ref/netstandard1.6/ko/System.AppContext.xml",
2538+ "ref/netstandard1.6/ru/System.AppContext.xml",
2539+ "ref/netstandard1.6/zh-hans/System.AppContext.xml",
2540+ "ref/netstandard1.6/zh-hant/System.AppContext.xml",
2541+ "ref/xamarinios10/_._",
2542+ "ref/xamarinmac20/_._",
2543+ "ref/xamarintvos10/_._",
2544+ "ref/xamarinwatchos10/_._",
2545+ "runtimes/aot/lib/netcore50/System.AppContext.dll"
2546+ ]
2547+ },
2548+ "System.Buffers/4.0.0": {
2549+ "sha512": "YnxcvD1w2t1M+e/ILFMmHG8SOAtFo0SXyLrF38QWLM+oFBWUD4yZx3uCzPTZOUw9kQnQwp93VvC30SZygWNN6g==",
2550+ "type": "package",
2551+ "path": "System.Buffers/4.0.0",
2552+ "files": [
2553+ "System.Buffers.4.0.0.nupkg.sha512",
2554+ "System.Buffers.nuspec",
2555+ "ThirdPartyNotices.txt",
2556+ "dotnet_library_license.txt",
2557+ "lib/netstandard1.1/.xml",
2558+ "lib/netstandard1.1/System.Buffers.dll"
2559+ ]
2560+ },
2561+ "System.Collections/4.0.11": {
2562+ "sha512": "Q8IfQjdxgGhg7xO82qGScQqrSh0gGT5bZltznwc4rbLW9i65GPJa11dskMHDtiWXMKfKoe0B71U1S70zZd61mw==",
2563+ "type": "package",
2564+ "path": "System.Collections/4.0.11",
2565+ "files": [
2566+ "System.Collections.4.0.11.nupkg.sha512",
2567+ "System.Collections.nuspec",
2568+ "ThirdPartyNotices.txt",
2569+ "dotnet_library_license.txt",
2570+ "lib/MonoAndroid10/_._",
2571+ "lib/MonoTouch10/_._",
2572+ "lib/net45/_._",
2573+ "lib/portable-net45+win8+wp8+wpa81/_._",
2574+ "lib/win8/_._",
2575+ "lib/wp80/_._",
2576+ "lib/wpa81/_._",
2577+ "lib/xamarinios10/_._",
2578+ "lib/xamarinmac20/_._",
2579+ "lib/xamarintvos10/_._",
2580+ "lib/xamarinwatchos10/_._",
2581+ "ref/MonoAndroid10/_._",
2582+ "ref/MonoTouch10/_._",
2583+ "ref/net45/_._",
2584+ "ref/netcore50/System.Collections.dll",
2585+ "ref/netcore50/System.Collections.xml",
2586+ "ref/netcore50/de/System.Collections.xml",
2587+ "ref/netcore50/es/System.Collections.xml",
2588+ "ref/netcore50/fr/System.Collections.xml",
2589+ "ref/netcore50/it/System.Collections.xml",
2590+ "ref/netcore50/ja/System.Collections.xml",
2591+ "ref/netcore50/ko/System.Collections.xml",
2592+ "ref/netcore50/ru/System.Collections.xml",
2593+ "ref/netcore50/zh-hans/System.Collections.xml",
2594+ "ref/netcore50/zh-hant/System.Collections.xml",
2595+ "ref/netstandard1.0/System.Collections.dll",
2596+ "ref/netstandard1.0/System.Collections.xml",
2597+ "ref/netstandard1.0/de/System.Collections.xml",
2598+ "ref/netstandard1.0/es/System.Collections.xml",
2599+ "ref/netstandard1.0/fr/System.Collections.xml",
2600+ "ref/netstandard1.0/it/System.Collections.xml",
2601+ "ref/netstandard1.0/ja/System.Collections.xml",
2602+ "ref/netstandard1.0/ko/System.Collections.xml",
2603+ "ref/netstandard1.0/ru/System.Collections.xml",
2604+ "ref/netstandard1.0/zh-hans/System.Collections.xml",
2605+ "ref/netstandard1.0/zh-hant/System.Collections.xml",
2606+ "ref/netstandard1.3/System.Collections.dll",
2607+ "ref/netstandard1.3/System.Collections.xml",
2608+ "ref/netstandard1.3/de/System.Collections.xml",
2609+ "ref/netstandard1.3/es/System.Collections.xml",
2610+ "ref/netstandard1.3/fr/System.Collections.xml",
2611+ "ref/netstandard1.3/it/System.Collections.xml",
2612+ "ref/netstandard1.3/ja/System.Collections.xml",
2613+ "ref/netstandard1.3/ko/System.Collections.xml",
2614+ "ref/netstandard1.3/ru/System.Collections.xml",
2615+ "ref/netstandard1.3/zh-hans/System.Collections.xml",
2616+ "ref/netstandard1.3/zh-hant/System.Collections.xml",
2617+ "ref/portable-net45+win8+wp8+wpa81/_._",
2618+ "ref/win8/_._",
2619+ "ref/wp80/_._",
2620+ "ref/wpa81/_._",
2621+ "ref/xamarinios10/_._",
2622+ "ref/xamarinmac20/_._",
2623+ "ref/xamarintvos10/_._",
2624+ "ref/xamarinwatchos10/_._"
2625+ ]
2626+ },
2627+ "System.Collections.Concurrent/4.0.12": {
2628+ "sha512": "7x8U6XmBv2xdZBSpF2mvgdmuWZtUthW2+uacIl/l72sY9RWbczkbb1u+BjdajyzMN0JIM+bwUvduCYxXmjD/5A==",
2629+ "type": "package",
2630+ "path": "System.Collections.Concurrent/4.0.12",
2631+ "files": [
2632+ "System.Collections.Concurrent.4.0.12.nupkg.sha512",
2633+ "System.Collections.Concurrent.nuspec",
2634+ "ThirdPartyNotices.txt",
2635+ "dotnet_library_license.txt",
2636+ "lib/MonoAndroid10/_._",
2637+ "lib/MonoTouch10/_._",
2638+ "lib/net45/_._",
2639+ "lib/netcore50/System.Collections.Concurrent.dll",
2640+ "lib/netstandard1.3/System.Collections.Concurrent.dll",
2641+ "lib/portable-net45+win8+wpa81/_._",
2642+ "lib/win8/_._",
2643+ "lib/wpa81/_._",
2644+ "lib/xamarinios10/_._",
2645+ "lib/xamarinmac20/_._",
2646+ "lib/xamarintvos10/_._",
2647+ "lib/xamarinwatchos10/_._",
2648+ "ref/MonoAndroid10/_._",
2649+ "ref/MonoTouch10/_._",
2650+ "ref/net45/_._",
2651+ "ref/netcore50/System.Collections.Concurrent.dll",
2652+ "ref/netcore50/System.Collections.Concurrent.xml",
2653+ "ref/netcore50/de/System.Collections.Concurrent.xml",
2654+ "ref/netcore50/es/System.Collections.Concurrent.xml",
2655+ "ref/netcore50/fr/System.Collections.Concurrent.xml",
2656+ "ref/netcore50/it/System.Collections.Concurrent.xml",
2657+ "ref/netcore50/ja/System.Collections.Concurrent.xml",
2658+ "ref/netcore50/ko/System.Collections.Concurrent.xml",
2659+ "ref/netcore50/ru/System.Collections.Concurrent.xml",
2660+ "ref/netcore50/zh-hans/System.Collections.Concurrent.xml",
2661+ "ref/netcore50/zh-hant/System.Collections.Concurrent.xml",
2662+ "ref/netstandard1.1/System.Collections.Concurrent.dll",
2663+ "ref/netstandard1.1/System.Collections.Concurrent.xml",
2664+ "ref/netstandard1.1/de/System.Collections.Concurrent.xml",
2665+ "ref/netstandard1.1/es/System.Collections.Concurrent.xml",
2666+ "ref/netstandard1.1/fr/System.Collections.Concurrent.xml",
2667+ "ref/netstandard1.1/it/System.Collections.Concurrent.xml",
2668+ "ref/netstandard1.1/ja/System.Collections.Concurrent.xml",
2669+ "ref/netstandard1.1/ko/System.Collections.Concurrent.xml",
2670+ "ref/netstandard1.1/ru/System.Collections.Concurrent.xml",
2671+ "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml",
2672+ "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml",
2673+ "ref/netstandard1.3/System.Collections.Concurrent.dll",
2674+ "ref/netstandard1.3/System.Collections.Concurrent.xml",
2675+ "ref/netstandard1.3/de/System.Collections.Concurrent.xml",
2676+ "ref/netstandard1.3/es/System.Collections.Concurrent.xml",
2677+ "ref/netstandard1.3/fr/System.Collections.Concurrent.xml",
2678+ "ref/netstandard1.3/it/System.Collections.Concurrent.xml",
2679+ "ref/netstandard1.3/ja/System.Collections.Concurrent.xml",
2680+ "ref/netstandard1.3/ko/System.Collections.Concurrent.xml",
2681+ "ref/netstandard1.3/ru/System.Collections.Concurrent.xml",
2682+ "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml",
2683+ "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml",
2684+ "ref/portable-net45+win8+wpa81/_._",
2685+ "ref/win8/_._",
2686+ "ref/wpa81/_._",
2687+ "ref/xamarinios10/_._",
2688+ "ref/xamarinmac20/_._",
2689+ "ref/xamarintvos10/_._",
2690+ "ref/xamarinwatchos10/_._"
2691+ ]
2692+ },
2693+ "System.Collections.Immutable/1.2.0": {
2694+ "sha512": "DQaTY0MHjfJ0h0Go/qlFxkdwWVgR6wIhTw9DD8QdiFhjweE3mduvOu1SBYNLMycX5lKHjq3gv8K37++atweafA==",
2695+ "type": "package",
2696+ "path": "System.Collections.Immutable/1.2.0",
2697+ "files": [
2698+ "System.Collections.Immutable.1.2.0.nupkg.sha512",
2699+ "System.Collections.Immutable.nuspec",
2700+ "ThirdPartyNotices.txt",
2701+ "dotnet_library_license.txt",
2702+ "lib/netstandard1.0/System.Collections.Immutable.dll",
2703+ "lib/netstandard1.0/System.Collections.Immutable.xml",
2704+ "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll",
2705+ "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml"
2706+ ]
2707+ },
2708+ "System.ComponentModel/4.0.1": {
2709+ "sha512": "cZ7UeRSwTYaLTMQ7fxkjODurM8JihcdjIQNsYCTlOshdDmXmWPRWLS3xz8mDlSVU4pQAdVTXBHo+wO6Xf5uO9w==",
2710+ "type": "package",
2711+ "path": "System.ComponentModel/4.0.1",
2712+ "files": [
2713+ "System.ComponentModel.4.0.1.nupkg.sha512",
2714+ "System.ComponentModel.nuspec",
2715+ "ThirdPartyNotices.txt",
2716+ "dotnet_library_license.txt",
2717+ "lib/MonoAndroid10/_._",
2718+ "lib/MonoTouch10/_._",
2719+ "lib/net45/_._",
2720+ "lib/netcore50/System.ComponentModel.dll",
2721+ "lib/netstandard1.3/System.ComponentModel.dll",
2722+ "lib/portable-net45+win8+wp8+wpa81/_._",
2723+ "lib/win8/_._",
2724+ "lib/wp80/_._",
2725+ "lib/wpa81/_._",
2726+ "lib/xamarinios10/_._",
2727+ "lib/xamarinmac20/_._",
2728+ "lib/xamarintvos10/_._",
2729+ "lib/xamarinwatchos10/_._",
2730+ "ref/MonoAndroid10/_._",
2731+ "ref/MonoTouch10/_._",
2732+ "ref/net45/_._",
2733+ "ref/netcore50/System.ComponentModel.dll",
2734+ "ref/netcore50/System.ComponentModel.xml",
2735+ "ref/netcore50/de/System.ComponentModel.xml",
2736+ "ref/netcore50/es/System.ComponentModel.xml",
2737+ "ref/netcore50/fr/System.ComponentModel.xml",
2738+ "ref/netcore50/it/System.ComponentModel.xml",
2739+ "ref/netcore50/ja/System.ComponentModel.xml",
2740+ "ref/netcore50/ko/System.ComponentModel.xml",
2741+ "ref/netcore50/ru/System.ComponentModel.xml",
2742+ "ref/netcore50/zh-hans/System.ComponentModel.xml",
2743+ "ref/netcore50/zh-hant/System.ComponentModel.xml",
2744+ "ref/netstandard1.0/System.ComponentModel.dll",
2745+ "ref/netstandard1.0/System.ComponentModel.xml",
2746+ "ref/netstandard1.0/de/System.ComponentModel.xml",
2747+ "ref/netstandard1.0/es/System.ComponentModel.xml",
2748+ "ref/netstandard1.0/fr/System.ComponentModel.xml",
2749+ "ref/netstandard1.0/it/System.ComponentModel.xml",
2750+ "ref/netstandard1.0/ja/System.ComponentModel.xml",
2751+ "ref/netstandard1.0/ko/System.ComponentModel.xml",
2752+ "ref/netstandard1.0/ru/System.ComponentModel.xml",
2753+ "ref/netstandard1.0/zh-hans/System.ComponentModel.xml",
2754+ "ref/netstandard1.0/zh-hant/System.ComponentModel.xml",
2755+ "ref/portable-net45+win8+wp8+wpa81/_._",
2756+ "ref/win8/_._",
2757+ "ref/wp80/_._",
2758+ "ref/wpa81/_._",
2759+ "ref/xamarinios10/_._",
2760+ "ref/xamarinmac20/_._",
2761+ "ref/xamarintvos10/_._",
2762+ "ref/xamarinwatchos10/_._"
2763+ ]
2764+ },
2765+ "System.ComponentModel.Annotations/4.1.0": {
2766+ "sha512": "KdgtuTz/RAAsuJk9cqebTM/pPYwxXzTP923N8BlbEmIdNZyjCfPBfDTG263ifarRj089s1DlkeK6MsQPItlpiQ==",
2767+ "type": "package",
2768+ "path": "System.ComponentModel.Annotations/4.1.0",
2769+ "files": [
2770+ "System.ComponentModel.Annotations.4.1.0.nupkg.sha512",
2771+ "System.ComponentModel.Annotations.nuspec",
2772+ "ThirdPartyNotices.txt",
2773+ "dotnet_library_license.txt",
2774+ "lib/MonoAndroid10/_._",
2775+ "lib/MonoTouch10/_._",
2776+ "lib/net45/_._",
2777+ "lib/net461/System.ComponentModel.Annotations.dll",
2778+ "lib/netcore50/System.ComponentModel.Annotations.dll",
2779+ "lib/netstandard1.4/System.ComponentModel.Annotations.dll",
2780+ "lib/portable-net45+win8/_._",
2781+ "lib/win8/_._",
2782+ "lib/xamarinios10/_._",
2783+ "lib/xamarinmac20/_._",
2784+ "lib/xamarintvos10/_._",
2785+ "lib/xamarinwatchos10/_._",
2786+ "ref/MonoAndroid10/_._",
2787+ "ref/MonoTouch10/_._",
2788+ "ref/net45/_._",
2789+ "ref/net461/System.ComponentModel.Annotations.dll",
2790+ "ref/netcore50/System.ComponentModel.Annotations.dll",
2791+ "ref/netcore50/System.ComponentModel.Annotations.xml",
2792+ "ref/netcore50/de/System.ComponentModel.Annotations.xml",
2793+ "ref/netcore50/es/System.ComponentModel.Annotations.xml",
2794+ "ref/netcore50/fr/System.ComponentModel.Annotations.xml",
2795+ "ref/netcore50/it/System.ComponentModel.Annotations.xml",
2796+ "ref/netcore50/ja/System.ComponentModel.Annotations.xml",
2797+ "ref/netcore50/ko/System.ComponentModel.Annotations.xml",
2798+ "ref/netcore50/ru/System.ComponentModel.Annotations.xml",
2799+ "ref/netcore50/zh-hans/System.ComponentModel.Annotations.xml",
2800+ "ref/netcore50/zh-hant/System.ComponentModel.Annotations.xml",
2801+ "ref/netstandard1.1/System.ComponentModel.Annotations.dll",
2802+ "ref/netstandard1.1/System.ComponentModel.Annotations.xml",
2803+ "ref/netstandard1.1/de/System.ComponentModel.Annotations.xml",
2804+ "ref/netstandard1.1/es/System.ComponentModel.Annotations.xml",
2805+ "ref/netstandard1.1/fr/System.ComponentModel.Annotations.xml",
2806+ "ref/netstandard1.1/it/System.ComponentModel.Annotations.xml",
2807+ "ref/netstandard1.1/ja/System.ComponentModel.Annotations.xml",
2808+ "ref/netstandard1.1/ko/System.ComponentModel.Annotations.xml",
2809+ "ref/netstandard1.1/ru/System.ComponentModel.Annotations.xml",
2810+ "ref/netstandard1.1/zh-hans/System.ComponentModel.Annotations.xml",
2811+ "ref/netstandard1.1/zh-hant/System.ComponentModel.Annotations.xml",
2812+ "ref/netstandard1.3/System.ComponentModel.Annotations.dll",
2813+ "ref/netstandard1.3/System.ComponentModel.Annotations.xml",
2814+ "ref/netstandard1.3/de/System.ComponentModel.Annotations.xml",
2815+ "ref/netstandard1.3/es/System.ComponentModel.Annotations.xml",
2816+ "ref/netstandard1.3/fr/System.ComponentModel.Annotations.xml",
2817+ "ref/netstandard1.3/it/System.ComponentModel.Annotations.xml",
2818+ "ref/netstandard1.3/ja/System.ComponentModel.Annotations.xml",
2819+ "ref/netstandard1.3/ko/System.ComponentModel.Annotations.xml",
2820+ "ref/netstandard1.3/ru/System.ComponentModel.Annotations.xml",
2821+ "ref/netstandard1.3/zh-hans/System.ComponentModel.Annotations.xml",
2822+ "ref/netstandard1.3/zh-hant/System.ComponentModel.Annotations.xml",
2823+ "ref/netstandard1.4/System.ComponentModel.Annotations.dll",
2824+ "ref/netstandard1.4/System.ComponentModel.Annotations.xml",
2825+ "ref/netstandard1.4/de/System.ComponentModel.Annotations.xml",
2826+ "ref/netstandard1.4/es/System.ComponentModel.Annotations.xml",
2827+ "ref/netstandard1.4/fr/System.ComponentModel.Annotations.xml",
2828+ "ref/netstandard1.4/it/System.ComponentModel.Annotations.xml",
2829+ "ref/netstandard1.4/ja/System.ComponentModel.Annotations.xml",
2830+ "ref/netstandard1.4/ko/System.ComponentModel.Annotations.xml",
2831+ "ref/netstandard1.4/ru/System.ComponentModel.Annotations.xml",
2832+ "ref/netstandard1.4/zh-hans/System.ComponentModel.Annotations.xml",
2833+ "ref/netstandard1.4/zh-hant/System.ComponentModel.Annotations.xml",
2834+ "ref/portable-net45+win8/_._",
2835+ "ref/win8/_._",
2836+ "ref/xamarinios10/_._",
2837+ "ref/xamarinmac20/_._",
2838+ "ref/xamarintvos10/_._",
2839+ "ref/xamarinwatchos10/_._"
2840+ ]
2841+ },
2842+ "System.Console/4.0.0": {
2843+ "sha512": "Csrh0bnPH2QRA72lcxefVJ6ecCHWsTc28ruaEKDNLX0MKB30LhS0o77l9rqde0LVd1+HlD5Mx/sLAhJdAdVHaw==",
2844+ "type": "package",
2845+ "path": "System.Console/4.0.0",
2846+ "files": [
2847+ "System.Console.4.0.0.nupkg.sha512",
2848+ "System.Console.nuspec",
2849+ "ThirdPartyNotices.txt",
2850+ "dotnet_library_license.txt",
2851+ "lib/MonoAndroid10/_._",
2852+ "lib/MonoTouch10/_._",
2853+ "lib/net46/System.Console.dll",
2854+ "lib/xamarinios10/_._",
2855+ "lib/xamarinmac20/_._",
2856+ "lib/xamarintvos10/_._",
2857+ "lib/xamarinwatchos10/_._",
2858+ "ref/MonoAndroid10/_._",
2859+ "ref/MonoTouch10/_._",
2860+ "ref/net46/System.Console.dll",
2861+ "ref/netstandard1.3/System.Console.dll",
2862+ "ref/netstandard1.3/System.Console.xml",
2863+ "ref/netstandard1.3/de/System.Console.xml",
2864+ "ref/netstandard1.3/es/System.Console.xml",
2865+ "ref/netstandard1.3/fr/System.Console.xml",
2866+ "ref/netstandard1.3/it/System.Console.xml",
2867+ "ref/netstandard1.3/ja/System.Console.xml",
2868+ "ref/netstandard1.3/ko/System.Console.xml",
2869+ "ref/netstandard1.3/ru/System.Console.xml",
2870+ "ref/netstandard1.3/zh-hans/System.Console.xml",
2871+ "ref/netstandard1.3/zh-hant/System.Console.xml",
2872+ "ref/xamarinios10/_._",
2873+ "ref/xamarinmac20/_._",
2874+ "ref/xamarintvos10/_._",
2875+ "ref/xamarinwatchos10/_._"
2876+ ]
2877+ },
2878+ "System.Diagnostics.Debug/4.0.11": {
2879+ "sha512": "ZPSemq+D8LPPdQ31o4MdF9TuWO57pGsktFEqWoseVfRBtk61ahIZFB1PBUiezuS1oLE7O5PDaj7HPGqcdKXxzw==",
2880+ "type": "package",
2881+ "path": "System.Diagnostics.Debug/4.0.11",
2882+ "files": [
2883+ "System.Diagnostics.Debug.4.0.11.nupkg.sha512",
2884+ "System.Diagnostics.Debug.nuspec",
2885+ "ThirdPartyNotices.txt",
2886+ "dotnet_library_license.txt",
2887+ "lib/MonoAndroid10/_._",
2888+ "lib/MonoTouch10/_._",
2889+ "lib/net45/_._",
2890+ "lib/portable-net45+win8+wp8+wpa81/_._",
2891+ "lib/win8/_._",
2892+ "lib/wp80/_._",
2893+ "lib/wpa81/_._",
2894+ "lib/xamarinios10/_._",
2895+ "lib/xamarinmac20/_._",
2896+ "lib/xamarintvos10/_._",
2897+ "lib/xamarinwatchos10/_._",
2898+ "ref/MonoAndroid10/_._",
2899+ "ref/MonoTouch10/_._",
2900+ "ref/net45/_._",
2901+ "ref/netcore50/System.Diagnostics.Debug.dll",
2902+ "ref/netcore50/System.Diagnostics.Debug.xml",
2903+ "ref/netcore50/de/System.Diagnostics.Debug.xml",
2904+ "ref/netcore50/es/System.Diagnostics.Debug.xml",
2905+ "ref/netcore50/fr/System.Diagnostics.Debug.xml",
2906+ "ref/netcore50/it/System.Diagnostics.Debug.xml",
2907+ "ref/netcore50/ja/System.Diagnostics.Debug.xml",
2908+ "ref/netcore50/ko/System.Diagnostics.Debug.xml",
2909+ "ref/netcore50/ru/System.Diagnostics.Debug.xml",
2910+ "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml",
2911+ "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml",
2912+ "ref/netstandard1.0/System.Diagnostics.Debug.dll",
2913+ "ref/netstandard1.0/System.Diagnostics.Debug.xml",
2914+ "ref/netstandard1.0/de/System.Diagnostics.Debug.xml",
2915+ "ref/netstandard1.0/es/System.Diagnostics.Debug.xml",
2916+ "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml",
2917+ "ref/netstandard1.0/it/System.Diagnostics.Debug.xml",
2918+ "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml",
2919+ "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml",
2920+ "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml",
2921+ "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml",
2922+ "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml",
2923+ "ref/netstandard1.3/System.Diagnostics.Debug.dll",
2924+ "ref/netstandard1.3/System.Diagnostics.Debug.xml",
2925+ "ref/netstandard1.3/de/System.Diagnostics.Debug.xml",
2926+ "ref/netstandard1.3/es/System.Diagnostics.Debug.xml",
2927+ "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml",
2928+ "ref/netstandard1.3/it/System.Diagnostics.Debug.xml",
2929+ "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml",
2930+ "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml",
2931+ "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml",
2932+ "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml",
2933+ "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml",
2934+ "ref/portable-net45+win8+wp8+wpa81/_._",
2935+ "ref/win8/_._",
2936+ "ref/wp80/_._",
2937+ "ref/wpa81/_._",
2938+ "ref/xamarinios10/_._",
2939+ "ref/xamarinmac20/_._",
2940+ "ref/xamarintvos10/_._",
2941+ "ref/xamarinwatchos10/_._"
2942+ ]
2943+ },
2944+ "System.Diagnostics.DiagnosticSource/4.0.0": {
2945+ "sha512": "mm9ia/8ccnqwhP8ocxahTkBrpZZlHCaKfJrooXAIPPY0XaeMKxawRmsCumRxqNy/s9ca92B9vM+GkQK3g95D5A==",
2946+ "type": "package",
2947+ "path": "System.Diagnostics.DiagnosticSource/4.0.0",
2948+ "files": [
2949+ "System.Diagnostics.DiagnosticSource.4.0.0.nupkg.sha512",
2950+ "System.Diagnostics.DiagnosticSource.nuspec",
2951+ "ThirdPartyNotices.txt",
2952+ "dotnet_library_license.txt",
2953+ "lib/net46/System.Diagnostics.DiagnosticSource.dll",
2954+ "lib/net46/System.Diagnostics.DiagnosticSource.xml",
2955+ "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll",
2956+ "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml",
2957+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll",
2958+ "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml",
2959+ "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll",
2960+ "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml"
2961+ ]
2962+ },
2963+ "System.Diagnostics.FileVersionInfo/4.0.0": {
2964+ "sha512": "yEylMXNSFocrjNF+X3b8wsQqOowse01NkGIBmlH5sz5MS/zYIpi373AQP5xwcFMXh1lLhJDtUrVWabY3jtHU/A==",
2965+ "type": "package",
2966+ "path": "System.Diagnostics.FileVersionInfo/4.0.0",
2967+ "files": [
2968+ "System.Diagnostics.FileVersionInfo.4.0.0.nupkg.sha512",
2969+ "System.Diagnostics.FileVersionInfo.nuspec",
2970+ "ThirdPartyNotices.txt",
2971+ "dotnet_library_license.txt",
2972+ "lib/MonoAndroid10/_._",
2973+ "lib/MonoTouch10/_._",
2974+ "lib/net46/System.Diagnostics.FileVersionInfo.dll",
2975+ "lib/xamarinios10/_._",
2976+ "lib/xamarinmac20/_._",
2977+ "lib/xamarintvos10/_._",
2978+ "lib/xamarinwatchos10/_._",
2979+ "ref/MonoAndroid10/_._",
2980+ "ref/MonoTouch10/_._",
2981+ "ref/net46/System.Diagnostics.FileVersionInfo.dll",
2982+ "ref/netstandard1.3/System.Diagnostics.FileVersionInfo.dll",
2983+ "ref/netstandard1.3/System.Diagnostics.FileVersionInfo.xml",
2984+ "ref/netstandard1.3/de/System.Diagnostics.FileVersionInfo.xml",
2985+ "ref/netstandard1.3/es/System.Diagnostics.FileVersionInfo.xml",
2986+ "ref/netstandard1.3/fr/System.Diagnostics.FileVersionInfo.xml",
2987+ "ref/netstandard1.3/it/System.Diagnostics.FileVersionInfo.xml",
2988+ "ref/netstandard1.3/ja/System.Diagnostics.FileVersionInfo.xml",
2989+ "ref/netstandard1.3/ko/System.Diagnostics.FileVersionInfo.xml",
2990+ "ref/netstandard1.3/ru/System.Diagnostics.FileVersionInfo.xml",
2991+ "ref/netstandard1.3/zh-hans/System.Diagnostics.FileVersionInfo.xml",
2992+ "ref/netstandard1.3/zh-hant/System.Diagnostics.FileVersionInfo.xml",
2993+ "ref/xamarinios10/_._",
2994+ "ref/xamarinmac20/_._",
2995+ "ref/xamarintvos10/_._",
2996+ "ref/xamarinwatchos10/_._",
2997+ "runtimes/unix/lib/netstandard1.3/System.Diagnostics.FileVersionInfo.dll",
2998+ "runtimes/win/lib/net46/System.Diagnostics.FileVersionInfo.dll",
2999+ "runtimes/win/lib/netcore50/System.Diagnostics.FileVersionInfo.dll",
3000+ "runtimes/win/lib/netstandard1.3/System.Diagnostics.FileVersionInfo.dll"
3001+ ]
3002+ },
3003+ "System.Diagnostics.Process/4.1.0": {
3004+ "sha512": "M+yw/XrfdXHOOO8jkcXjs/WEkNF4tbsfRZAcPv75eAFQ+kqNef5vkBbzEjzJP7VZ9cHKh9wevW35M77nZA3nAA==",
3005+ "type": "package",
3006+ "path": "System.Diagnostics.Process/4.1.0",
3007+ "files": [
3008+ "System.Diagnostics.Process.4.1.0.nupkg.sha512",
3009+ "System.Diagnostics.Process.nuspec",
3010+ "ThirdPartyNotices.txt",
3011+ "dotnet_library_license.txt",
3012+ "lib/MonoAndroid10/_._",
3013+ "lib/MonoTouch10/_._",
3014+ "lib/net46/System.Diagnostics.Process.dll",
3015+ "lib/net461/System.Diagnostics.Process.dll",
3016+ "lib/xamarinios10/_._",
3017+ "lib/xamarinmac20/_._",
3018+ "lib/xamarintvos10/_._",
3019+ "lib/xamarinwatchos10/_._",
3020+ "ref/MonoAndroid10/_._",
3021+ "ref/MonoTouch10/_._",
3022+ "ref/net46/System.Diagnostics.Process.dll",
3023+ "ref/net461/System.Diagnostics.Process.dll",
3024+ "ref/netstandard1.3/System.Diagnostics.Process.dll",
3025+ "ref/netstandard1.3/System.Diagnostics.Process.xml",
3026+ "ref/netstandard1.3/de/System.Diagnostics.Process.xml",
3027+ "ref/netstandard1.3/es/System.Diagnostics.Process.xml",
3028+ "ref/netstandard1.3/fr/System.Diagnostics.Process.xml",
3029+ "ref/netstandard1.3/it/System.Diagnostics.Process.xml",
3030+ "ref/netstandard1.3/ja/System.Diagnostics.Process.xml",
3031+ "ref/netstandard1.3/ko/System.Diagnostics.Process.xml",
3032+ "ref/netstandard1.3/ru/System.Diagnostics.Process.xml",
3033+ "ref/netstandard1.3/zh-hans/System.Diagnostics.Process.xml",
3034+ "ref/netstandard1.3/zh-hant/System.Diagnostics.Process.xml",
3035+ "ref/netstandard1.4/System.Diagnostics.Process.dll",
3036+ "ref/netstandard1.4/System.Diagnostics.Process.xml",
3037+ "ref/netstandard1.4/de/System.Diagnostics.Process.xml",
3038+ "ref/netstandard1.4/es/System.Diagnostics.Process.xml",
3039+ "ref/netstandard1.4/fr/System.Diagnostics.Process.xml",
3040+ "ref/netstandard1.4/it/System.Diagnostics.Process.xml",
3041+ "ref/netstandard1.4/ja/System.Diagnostics.Process.xml",
3042+ "ref/netstandard1.4/ko/System.Diagnostics.Process.xml",
3043+ "ref/netstandard1.4/ru/System.Diagnostics.Process.xml",
3044+ "ref/netstandard1.4/zh-hans/System.Diagnostics.Process.xml",
3045+ "ref/netstandard1.4/zh-hant/System.Diagnostics.Process.xml",
3046+ "ref/xamarinios10/_._",
3047+ "ref/xamarinmac20/_._",
3048+ "ref/xamarintvos10/_._",
3049+ "ref/xamarinwatchos10/_._",
3050+ "runtimes/linux/lib/netstandard1.4/System.Diagnostics.Process.dll",
3051+ "runtimes/osx/lib/netstandard1.4/System.Diagnostics.Process.dll",
3052+ "runtimes/win/lib/net46/System.Diagnostics.Process.dll",
3053+ "runtimes/win/lib/net461/System.Diagnostics.Process.dll",
3054+ "runtimes/win/lib/netstandard1.4/System.Diagnostics.Process.dll",
3055+ "runtimes/win7/lib/netcore50/_._"
3056+ ]
3057+ },
3058+ "System.Diagnostics.StackTrace/4.0.1": {
3059+ "sha512": "YHqAy1CS6a3SEH9cZkYGozIyf96OwyEHUaNoJcofN7OmPbJWU1e0m7ZuLy8TiCgfHFMNgmStCrcrmX6YK5jGww==",
3060+ "type": "package",
3061+ "path": "System.Diagnostics.StackTrace/4.0.1",
3062+ "files": [
3063+ "System.Diagnostics.StackTrace.4.0.1.nupkg.sha512",
3064+ "System.Diagnostics.StackTrace.nuspec",
3065+ "ThirdPartyNotices.txt",
3066+ "dotnet_library_license.txt",
3067+ "lib/MonoAndroid10/_._",
3068+ "lib/MonoTouch10/_._",
3069+ "lib/net46/System.Diagnostics.StackTrace.dll",
3070+ "lib/netstandard1.3/System.Diagnostics.StackTrace.dll",
3071+ "lib/xamarinios10/_._",
3072+ "lib/xamarinmac20/_._",
3073+ "lib/xamarintvos10/_._",
3074+ "lib/xamarinwatchos10/_._",
3075+ "ref/MonoAndroid10/_._",
3076+ "ref/MonoTouch10/_._",
3077+ "ref/net46/System.Diagnostics.StackTrace.dll",
3078+ "ref/netstandard1.3/System.Diagnostics.StackTrace.dll",
3079+ "ref/netstandard1.3/System.Diagnostics.StackTrace.xml",
3080+ "ref/netstandard1.3/de/System.Diagnostics.StackTrace.xml",
3081+ "ref/netstandard1.3/es/System.Diagnostics.StackTrace.xml",
3082+ "ref/netstandard1.3/fr/System.Diagnostics.StackTrace.xml",
3083+ "ref/netstandard1.3/it/System.Diagnostics.StackTrace.xml",
3084+ "ref/netstandard1.3/ja/System.Diagnostics.StackTrace.xml",
3085+ "ref/netstandard1.3/ko/System.Diagnostics.StackTrace.xml",
3086+ "ref/netstandard1.3/ru/System.Diagnostics.StackTrace.xml",
3087+ "ref/netstandard1.3/zh-hans/System.Diagnostics.StackTrace.xml",
3088+ "ref/netstandard1.3/zh-hant/System.Diagnostics.StackTrace.xml",
3089+ "ref/xamarinios10/_._",
3090+ "ref/xamarinmac20/_._",
3091+ "ref/xamarintvos10/_._",
3092+ "ref/xamarinwatchos10/_._",
3093+ "runtimes/aot/lib/netcore50/System.Diagnostics.StackTrace.dll"
3094+ ]
3095+ },
3096+ "System.Diagnostics.Tools/4.0.1": {
3097+ "sha512": "gsMDPD+hZUQjKSCco+l523+KnLu5ecGyRH6ROMKQ99TWgS6HBCjuAefAAHZBxxzpfdOdftWxIT/yRpxnK16GRQ==",
3098+ "type": "package",
3099+ "path": "System.Diagnostics.Tools/4.0.1",
3100+ "files": [
3101+ "System.Diagnostics.Tools.4.0.1.nupkg.sha512",
3102+ "System.Diagnostics.Tools.nuspec",
3103+ "ThirdPartyNotices.txt",
3104+ "dotnet_library_license.txt",
3105+ "lib/MonoAndroid10/_._",
3106+ "lib/MonoTouch10/_._",
3107+ "lib/net45/_._",
3108+ "lib/portable-net45+win8+wp8+wpa81/_._",
3109+ "lib/win8/_._",
3110+ "lib/wp80/_._",
3111+ "lib/wpa81/_._",
3112+ "lib/xamarinios10/_._",
3113+ "lib/xamarinmac20/_._",
3114+ "lib/xamarintvos10/_._",
3115+ "lib/xamarinwatchos10/_._",
3116+ "ref/MonoAndroid10/_._",
3117+ "ref/MonoTouch10/_._",
3118+ "ref/net45/_._",
3119+ "ref/netcore50/System.Diagnostics.Tools.dll",
3120+ "ref/netcore50/System.Diagnostics.Tools.xml",
3121+ "ref/netcore50/de/System.Diagnostics.Tools.xml",
3122+ "ref/netcore50/es/System.Diagnostics.Tools.xml",
3123+ "ref/netcore50/fr/System.Diagnostics.Tools.xml",
3124+ "ref/netcore50/it/System.Diagnostics.Tools.xml",
3125+ "ref/netcore50/ja/System.Diagnostics.Tools.xml",
3126+ "ref/netcore50/ko/System.Diagnostics.Tools.xml",
3127+ "ref/netcore50/ru/System.Diagnostics.Tools.xml",
3128+ "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml",
3129+ "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml",
3130+ "ref/netstandard1.0/System.Diagnostics.Tools.dll",
3131+ "ref/netstandard1.0/System.Diagnostics.Tools.xml",
3132+ "ref/netstandard1.0/de/System.Diagnostics.Tools.xml",
3133+ "ref/netstandard1.0/es/System.Diagnostics.Tools.xml",
3134+ "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml",
3135+ "ref/netstandard1.0/it/System.Diagnostics.Tools.xml",
3136+ "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml",
3137+ "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml",
3138+ "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml",
3139+ "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml",
3140+ "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml",
3141+ "ref/portable-net45+win8+wp8+wpa81/_._",
3142+ "ref/win8/_._",
3143+ "ref/wp80/_._",
3144+ "ref/wpa81/_._",
3145+ "ref/xamarinios10/_._",
3146+ "ref/xamarinmac20/_._",
3147+ "ref/xamarintvos10/_._",
3148+ "ref/xamarinwatchos10/_._"
3149+ ]
3150+ },
3151+ "System.Diagnostics.Tracing/4.1.0": {
3152+ "sha512": "ZaM+U6aVTDoNkJS2IVccYjCrMU2LSyfXFKsMHp1+O1KVjpAuvryPFKOz7msel4h8zOKQS3Ra24n0nsLS2eQ3qg==",
3153+ "type": "package",
3154+ "path": "System.Diagnostics.Tracing/4.1.0",
3155+ "files": [
3156+ "System.Diagnostics.Tracing.4.1.0.nupkg.sha512",
3157+ "System.Diagnostics.Tracing.nuspec",
3158+ "ThirdPartyNotices.txt",
3159+ "dotnet_library_license.txt",
3160+ "lib/MonoAndroid10/_._",
3161+ "lib/MonoTouch10/_._",
3162+ "lib/net45/_._",
3163+ "lib/net462/System.Diagnostics.Tracing.dll",
3164+ "lib/portable-net45+win8+wpa81/_._",
3165+ "lib/win8/_._",
3166+ "lib/wpa81/_._",
3167+ "lib/xamarinios10/_._",
3168+ "lib/xamarinmac20/_._",
3169+ "lib/xamarintvos10/_._",
3170+ "lib/xamarinwatchos10/_._",
3171+ "ref/MonoAndroid10/_._",
3172+ "ref/MonoTouch10/_._",
3173+ "ref/net45/_._",
3174+ "ref/net462/System.Diagnostics.Tracing.dll",
3175+ "ref/netcore50/System.Diagnostics.Tracing.dll",
3176+ "ref/netcore50/System.Diagnostics.Tracing.xml",
3177+ "ref/netcore50/de/System.Diagnostics.Tracing.xml",
3178+ "ref/netcore50/es/System.Diagnostics.Tracing.xml",
3179+ "ref/netcore50/fr/System.Diagnostics.Tracing.xml",
3180+ "ref/netcore50/it/System.Diagnostics.Tracing.xml",
3181+ "ref/netcore50/ja/System.Diagnostics.Tracing.xml",
3182+ "ref/netcore50/ko/System.Diagnostics.Tracing.xml",
3183+ "ref/netcore50/ru/System.Diagnostics.Tracing.xml",
3184+ "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml",
3185+ "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml",
3186+ "ref/netstandard1.1/System.Diagnostics.Tracing.dll",
3187+ "ref/netstandard1.1/System.Diagnostics.Tracing.xml",
3188+ "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml",
3189+ "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml",
3190+ "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml",
3191+ "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml",
3192+ "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml",
3193+ "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml",
3194+ "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml",
3195+ "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml",
3196+ "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml",
3197+ "ref/netstandard1.2/System.Diagnostics.Tracing.dll",
3198+ "ref/netstandard1.2/System.Diagnostics.Tracing.xml",
3199+ "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml",
3200+ "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml",
3201+ "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml",
3202+ "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml",
3203+ "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml",
3204+ "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml",
3205+ "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml",
3206+ "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml",
3207+ "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml",
3208+ "ref/netstandard1.3/System.Diagnostics.Tracing.dll",
3209+ "ref/netstandard1.3/System.Diagnostics.Tracing.xml",
3210+ "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml",
3211+ "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml",
3212+ "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml",
3213+ "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml",
3214+ "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml",
3215+ "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml",
3216+ "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml",
3217+ "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml",
3218+ "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml",
3219+ "ref/netstandard1.5/System.Diagnostics.Tracing.dll",
3220+ "ref/netstandard1.5/System.Diagnostics.Tracing.xml",
3221+ "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml",
3222+ "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml",
3223+ "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml",
3224+ "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml",
3225+ "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml",
3226+ "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml",
3227+ "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml",
3228+ "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml",
3229+ "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml",
3230+ "ref/portable-net45+win8+wpa81/_._",
3231+ "ref/win8/_._",
3232+ "ref/wpa81/_._",
3233+ "ref/xamarinios10/_._",
3234+ "ref/xamarinmac20/_._",
3235+ "ref/xamarintvos10/_._",
3236+ "ref/xamarinwatchos10/_._"
3237+ ]
3238+ },
3239+ "System.Dynamic.Runtime/4.0.11": {
3240+ "sha512": "hVeEKnlsPLX5jWZwRzCrqIZyJqaF7IKP77F7RCjsBdg+U5Fdze1ECoU5X08YEo4pLWkaA4oLpFeE+VX3AR20DQ==",
3241+ "type": "package",
3242+ "path": "System.Dynamic.Runtime/4.0.11",
3243+ "files": [
3244+ "System.Dynamic.Runtime.4.0.11.nupkg.sha512",
3245+ "System.Dynamic.Runtime.nuspec",
3246+ "ThirdPartyNotices.txt",
3247+ "dotnet_library_license.txt",
3248+ "lib/MonoAndroid10/_._",
3249+ "lib/MonoTouch10/_._",
3250+ "lib/net45/_._",
3251+ "lib/netcore50/System.Dynamic.Runtime.dll",
3252+ "lib/netstandard1.3/System.Dynamic.Runtime.dll",
3253+ "lib/portable-net45+win8+wp8+wpa81/_._",
3254+ "lib/win8/_._",
3255+ "lib/wp80/_._",
3256+ "lib/wpa81/_._",
3257+ "lib/xamarinios10/_._",
3258+ "lib/xamarinmac20/_._",
3259+ "lib/xamarintvos10/_._",
3260+ "lib/xamarinwatchos10/_._",
3261+ "ref/MonoAndroid10/_._",
3262+ "ref/MonoTouch10/_._",
3263+ "ref/net45/_._",
3264+ "ref/netcore50/System.Dynamic.Runtime.dll",
3265+ "ref/netcore50/System.Dynamic.Runtime.xml",
3266+ "ref/netcore50/de/System.Dynamic.Runtime.xml",
3267+ "ref/netcore50/es/System.Dynamic.Runtime.xml",
3268+ "ref/netcore50/fr/System.Dynamic.Runtime.xml",
3269+ "ref/netcore50/it/System.Dynamic.Runtime.xml",
3270+ "ref/netcore50/ja/System.Dynamic.Runtime.xml",
3271+ "ref/netcore50/ko/System.Dynamic.Runtime.xml",
3272+ "ref/netcore50/ru/System.Dynamic.Runtime.xml",
3273+ "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml",
3274+ "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml",
3275+ "ref/netstandard1.0/System.Dynamic.Runtime.dll",
3276+ "ref/netstandard1.0/System.Dynamic.Runtime.xml",
3277+ "ref/netstandard1.0/de/System.Dynamic.Runtime.xml",
3278+ "ref/netstandard1.0/es/System.Dynamic.Runtime.xml",
3279+ "ref/netstandard1.0/fr/System.Dynamic.Runtime.xml",
3280+ "ref/netstandard1.0/it/System.Dynamic.Runtime.xml",
3281+ "ref/netstandard1.0/ja/System.Dynamic.Runtime.xml",
3282+ "ref/netstandard1.0/ko/System.Dynamic.Runtime.xml",
3283+ "ref/netstandard1.0/ru/System.Dynamic.Runtime.xml",
3284+ "ref/netstandard1.0/zh-hans/System.Dynamic.Runtime.xml",
3285+ "ref/netstandard1.0/zh-hant/System.Dynamic.Runtime.xml",
3286+ "ref/netstandard1.3/System.Dynamic.Runtime.dll",
3287+ "ref/netstandard1.3/System.Dynamic.Runtime.xml",
3288+ "ref/netstandard1.3/de/System.Dynamic.Runtime.xml",
3289+ "ref/netstandard1.3/es/System.Dynamic.Runtime.xml",
3290+ "ref/netstandard1.3/fr/System.Dynamic.Runtime.xml",
3291+ "ref/netstandard1.3/it/System.Dynamic.Runtime.xml",
3292+ "ref/netstandard1.3/ja/System.Dynamic.Runtime.xml",
3293+ "ref/netstandard1.3/ko/System.Dynamic.Runtime.xml",
3294+ "ref/netstandard1.3/ru/System.Dynamic.Runtime.xml",
3295+ "ref/netstandard1.3/zh-hans/System.Dynamic.Runtime.xml",
3296+ "ref/netstandard1.3/zh-hant/System.Dynamic.Runtime.xml",
3297+ "ref/portable-net45+win8+wp8+wpa81/_._",
3298+ "ref/win8/_._",
3299+ "ref/wp80/_._",
3300+ "ref/wpa81/_._",
3301+ "ref/xamarinios10/_._",
3302+ "ref/xamarinmac20/_._",
3303+ "ref/xamarintvos10/_._",
3304+ "ref/xamarinwatchos10/_._",
3305+ "runtimes/aot/lib/netcore50/System.Dynamic.Runtime.dll"
3306+ ]
3307+ },
3308+ "System.Globalization/4.0.11": {
3309+ "sha512": "4OkH9ucdngUq3WvXclho8fxvspuHU8YivNvcWWO55+MhdmB4feKf9RPwzSoEQ6wA0KcLYT3yAPU7lr0MHUGcCw==",
3310+ "type": "package",
3311+ "path": "System.Globalization/4.0.11",
3312+ "files": [
3313+ "System.Globalization.4.0.11.nupkg.sha512",
3314+ "System.Globalization.nuspec",
3315+ "ThirdPartyNotices.txt",
3316+ "dotnet_library_license.txt",
3317+ "lib/MonoAndroid10/_._",
3318+ "lib/MonoTouch10/_._",
3319+ "lib/net45/_._",
3320+ "lib/portable-net45+win8+wp8+wpa81/_._",
3321+ "lib/win8/_._",
3322+ "lib/wp80/_._",
3323+ "lib/wpa81/_._",
3324+ "lib/xamarinios10/_._",
3325+ "lib/xamarinmac20/_._",
3326+ "lib/xamarintvos10/_._",
3327+ "lib/xamarinwatchos10/_._",
3328+ "ref/MonoAndroid10/_._",
3329+ "ref/MonoTouch10/_._",
3330+ "ref/net45/_._",
3331+ "ref/netcore50/System.Globalization.dll",
3332+ "ref/netcore50/System.Globalization.xml",
3333+ "ref/netcore50/de/System.Globalization.xml",
3334+ "ref/netcore50/es/System.Globalization.xml",
3335+ "ref/netcore50/fr/System.Globalization.xml",
3336+ "ref/netcore50/it/System.Globalization.xml",
3337+ "ref/netcore50/ja/System.Globalization.xml",
3338+ "ref/netcore50/ko/System.Globalization.xml",
3339+ "ref/netcore50/ru/System.Globalization.xml",
3340+ "ref/netcore50/zh-hans/System.Globalization.xml",
3341+ "ref/netcore50/zh-hant/System.Globalization.xml",
3342+ "ref/netstandard1.0/System.Globalization.dll",
3343+ "ref/netstandard1.0/System.Globalization.xml",
3344+ "ref/netstandard1.0/de/System.Globalization.xml",
3345+ "ref/netstandard1.0/es/System.Globalization.xml",
3346+ "ref/netstandard1.0/fr/System.Globalization.xml",
3347+ "ref/netstandard1.0/it/System.Globalization.xml",
3348+ "ref/netstandard1.0/ja/System.Globalization.xml",
3349+ "ref/netstandard1.0/ko/System.Globalization.xml",
3350+ "ref/netstandard1.0/ru/System.Globalization.xml",
3351+ "ref/netstandard1.0/zh-hans/System.Globalization.xml",
3352+ "ref/netstandard1.0/zh-hant/System.Globalization.xml",
3353+ "ref/netstandard1.3/System.Globalization.dll",
3354+ "ref/netstandard1.3/System.Globalization.xml",
3355+ "ref/netstandard1.3/de/System.Globalization.xml",
3356+ "ref/netstandard1.3/es/System.Globalization.xml",
3357+ "ref/netstandard1.3/fr/System.Globalization.xml",
3358+ "ref/netstandard1.3/it/System.Globalization.xml",
3359+ "ref/netstandard1.3/ja/System.Globalization.xml",
3360+ "ref/netstandard1.3/ko/System.Globalization.xml",
3361+ "ref/netstandard1.3/ru/System.Globalization.xml",
3362+ "ref/netstandard1.3/zh-hans/System.Globalization.xml",
3363+ "ref/netstandard1.3/zh-hant/System.Globalization.xml",
3364+ "ref/portable-net45+win8+wp8+wpa81/_._",
3365+ "ref/win8/_._",
3366+ "ref/wp80/_._",
3367+ "ref/wpa81/_._",
3368+ "ref/xamarinios10/_._",
3369+ "ref/xamarinmac20/_._",
3370+ "ref/xamarintvos10/_._",
3371+ "ref/xamarinwatchos10/_._"
3372+ ]
3373+ },
3374+ "System.Globalization.Calendars/4.0.1": {
3375+ "sha512": "Rx7SxJI4VoRvUFS/O5xjK1iQFVGqwBSi6wlt4ZDYhE6dN6H4LQ8zWAvGab/j0EDFh/yOQ0AL15XG3kj/hUkKSQ==",
3376+ "type": "package",
3377+ "path": "System.Globalization.Calendars/4.0.1",
3378+ "files": [
3379+ "System.Globalization.Calendars.4.0.1.nupkg.sha512",
3380+ "System.Globalization.Calendars.nuspec",
3381+ "ThirdPartyNotices.txt",
3382+ "dotnet_library_license.txt",
3383+ "lib/MonoAndroid10/_._",
3384+ "lib/MonoTouch10/_._",
3385+ "lib/net46/System.Globalization.Calendars.dll",
3386+ "lib/xamarinios10/_._",
3387+ "lib/xamarinmac20/_._",
3388+ "lib/xamarintvos10/_._",
3389+ "lib/xamarinwatchos10/_._",
3390+ "ref/MonoAndroid10/_._",
3391+ "ref/MonoTouch10/_._",
3392+ "ref/net46/System.Globalization.Calendars.dll",
3393+ "ref/netstandard1.3/System.Globalization.Calendars.dll",
3394+ "ref/netstandard1.3/System.Globalization.Calendars.xml",
3395+ "ref/netstandard1.3/de/System.Globalization.Calendars.xml",
3396+ "ref/netstandard1.3/es/System.Globalization.Calendars.xml",
3397+ "ref/netstandard1.3/fr/System.Globalization.Calendars.xml",
3398+ "ref/netstandard1.3/it/System.Globalization.Calendars.xml",
3399+ "ref/netstandard1.3/ja/System.Globalization.Calendars.xml",
3400+ "ref/netstandard1.3/ko/System.Globalization.Calendars.xml",
3401+ "ref/netstandard1.3/ru/System.Globalization.Calendars.xml",
3402+ "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml",
3403+ "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml",
3404+ "ref/xamarinios10/_._",
3405+ "ref/xamarinmac20/_._",
3406+ "ref/xamarintvos10/_._",
3407+ "ref/xamarinwatchos10/_._"
3408+ ]
3409+ },
3410+ "System.Globalization.Extensions/4.0.1": {
3411+ "sha512": "ywlaKelQMSMGlwOcVuepCJXxLBZSgrZlXIYjWPvoA4XW/fqf/gji3yB6m1SdrmPoE9HsAXAuyF9V4SjZEnyvbA==",
3412+ "type": "package",
3413+ "path": "System.Globalization.Extensions/4.0.1",
3414+ "files": [
3415+ "System.Globalization.Extensions.4.0.1.nupkg.sha512",
3416+ "System.Globalization.Extensions.nuspec",
3417+ "ThirdPartyNotices.txt",
3418+ "dotnet_library_license.txt",
3419+ "lib/MonoAndroid10/_._",
3420+ "lib/MonoTouch10/_._",
3421+ "lib/net46/System.Globalization.Extensions.dll",
3422+ "lib/xamarinios10/_._",
3423+ "lib/xamarinmac20/_._",
3424+ "lib/xamarintvos10/_._",
3425+ "lib/xamarinwatchos10/_._",
3426+ "ref/MonoAndroid10/_._",
3427+ "ref/MonoTouch10/_._",
3428+ "ref/net46/System.Globalization.Extensions.dll",
3429+ "ref/netstandard1.3/System.Globalization.Extensions.dll",
3430+ "ref/netstandard1.3/System.Globalization.Extensions.xml",
3431+ "ref/netstandard1.3/de/System.Globalization.Extensions.xml",
3432+ "ref/netstandard1.3/es/System.Globalization.Extensions.xml",
3433+ "ref/netstandard1.3/fr/System.Globalization.Extensions.xml",
3434+ "ref/netstandard1.3/it/System.Globalization.Extensions.xml",
3435+ "ref/netstandard1.3/ja/System.Globalization.Extensions.xml",
3436+ "ref/netstandard1.3/ko/System.Globalization.Extensions.xml",
3437+ "ref/netstandard1.3/ru/System.Globalization.Extensions.xml",
3438+ "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml",
3439+ "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml",
3440+ "ref/xamarinios10/_._",
3441+ "ref/xamarinmac20/_._",
3442+ "ref/xamarintvos10/_._",
3443+ "ref/xamarinwatchos10/_._",
3444+ "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll",
3445+ "runtimes/win/lib/net46/System.Globalization.Extensions.dll",
3446+ "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll"
3447+ ]
3448+ },
3449+ "System.IO/4.1.0": {
3450+ "sha512": "fDY/S3SmZzfGOoamBtl9zIWy8l5tyy9DoHWqa5kOltjZKt/pU5BV/cujiLDTIt06yutMlZ0IbXoKfQ0icMzCDA==",
3451+ "type": "package",
3452+ "path": "System.IO/4.1.0",
3453+ "files": [
3454+ "System.IO.4.1.0.nupkg.sha512",
3455+ "System.IO.nuspec",
3456+ "ThirdPartyNotices.txt",
3457+ "dotnet_library_license.txt",
3458+ "lib/MonoAndroid10/_._",
3459+ "lib/MonoTouch10/_._",
3460+ "lib/net45/_._",
3461+ "lib/net462/System.IO.dll",
3462+ "lib/portable-net45+win8+wp8+wpa81/_._",
3463+ "lib/win8/_._",
3464+ "lib/wp80/_._",
3465+ "lib/wpa81/_._",
3466+ "lib/xamarinios10/_._",
3467+ "lib/xamarinmac20/_._",
3468+ "lib/xamarintvos10/_._",
3469+ "lib/xamarinwatchos10/_._",
3470+ "ref/MonoAndroid10/_._",
3471+ "ref/MonoTouch10/_._",
3472+ "ref/net45/_._",
3473+ "ref/net462/System.IO.dll",
3474+ "ref/netcore50/System.IO.dll",
3475+ "ref/netcore50/System.IO.xml",
3476+ "ref/netcore50/de/System.IO.xml",
3477+ "ref/netcore50/es/System.IO.xml",
3478+ "ref/netcore50/fr/System.IO.xml",
3479+ "ref/netcore50/it/System.IO.xml",
3480+ "ref/netcore50/ja/System.IO.xml",
3481+ "ref/netcore50/ko/System.IO.xml",
3482+ "ref/netcore50/ru/System.IO.xml",
3483+ "ref/netcore50/zh-hans/System.IO.xml",
3484+ "ref/netcore50/zh-hant/System.IO.xml",
3485+ "ref/netstandard1.0/System.IO.dll",
3486+ "ref/netstandard1.0/System.IO.xml",
3487+ "ref/netstandard1.0/de/System.IO.xml",
3488+ "ref/netstandard1.0/es/System.IO.xml",
3489+ "ref/netstandard1.0/fr/System.IO.xml",
3490+ "ref/netstandard1.0/it/System.IO.xml",
3491+ "ref/netstandard1.0/ja/System.IO.xml",
3492+ "ref/netstandard1.0/ko/System.IO.xml",
3493+ "ref/netstandard1.0/ru/System.IO.xml",
3494+ "ref/netstandard1.0/zh-hans/System.IO.xml",
3495+ "ref/netstandard1.0/zh-hant/System.IO.xml",
3496+ "ref/netstandard1.3/System.IO.dll",
3497+ "ref/netstandard1.3/System.IO.xml",
3498+ "ref/netstandard1.3/de/System.IO.xml",
3499+ "ref/netstandard1.3/es/System.IO.xml",
3500+ "ref/netstandard1.3/fr/System.IO.xml",
3501+ "ref/netstandard1.3/it/System.IO.xml",
3502+ "ref/netstandard1.3/ja/System.IO.xml",
3503+ "ref/netstandard1.3/ko/System.IO.xml",
3504+ "ref/netstandard1.3/ru/System.IO.xml",
3505+ "ref/netstandard1.3/zh-hans/System.IO.xml",
3506+ "ref/netstandard1.3/zh-hant/System.IO.xml",
3507+ "ref/netstandard1.5/System.IO.dll",
3508+ "ref/netstandard1.5/System.IO.xml",
3509+ "ref/netstandard1.5/de/System.IO.xml",
3510+ "ref/netstandard1.5/es/System.IO.xml",
3511+ "ref/netstandard1.5/fr/System.IO.xml",
3512+ "ref/netstandard1.5/it/System.IO.xml",
3513+ "ref/netstandard1.5/ja/System.IO.xml",
3514+ "ref/netstandard1.5/ko/System.IO.xml",
3515+ "ref/netstandard1.5/ru/System.IO.xml",
3516+ "ref/netstandard1.5/zh-hans/System.IO.xml",
3517+ "ref/netstandard1.5/zh-hant/System.IO.xml",
3518+ "ref/portable-net45+win8+wp8+wpa81/_._",
3519+ "ref/win8/_._",
3520+ "ref/wp80/_._",
3521+ "ref/wpa81/_._",
3522+ "ref/xamarinios10/_._",
3523+ "ref/xamarinmac20/_._",
3524+ "ref/xamarintvos10/_._",
3525+ "ref/xamarinwatchos10/_._"
3526+ ]
3527+ },
3528+ "System.IO.Compression/4.1.0": {
3529+ "sha512": "1UPUauRB+MyeHKnf8gwc2WtP4VVEHFJ3hwW3UGQvlhbIiYez6Xgp8Yfda6NpLTTyR+pkCZg5qjSMWCn+UiKF6w==",
3530+ "type": "package",
3531+ "path": "System.IO.Compression/4.1.0",
3532+ "files": [
3533+ "System.IO.Compression.4.1.0.nupkg.sha512",
3534+ "System.IO.Compression.nuspec",
3535+ "ThirdPartyNotices.txt",
3536+ "dotnet_library_license.txt",
3537+ "lib/MonoAndroid10/_._",
3538+ "lib/MonoTouch10/_._",
3539+ "lib/net45/_._",
3540+ "lib/net46/System.IO.Compression.dll",
3541+ "lib/portable-net45+win8+wpa81/_._",
3542+ "lib/win8/_._",
3543+ "lib/wpa81/_._",
3544+ "lib/xamarinios10/_._",
3545+ "lib/xamarinmac20/_._",
3546+ "lib/xamarintvos10/_._",
3547+ "lib/xamarinwatchos10/_._",
3548+ "ref/MonoAndroid10/_._",
3549+ "ref/MonoTouch10/_._",
3550+ "ref/net45/_._",
3551+ "ref/net46/System.IO.Compression.dll",
3552+ "ref/netcore50/System.IO.Compression.dll",
3553+ "ref/netcore50/System.IO.Compression.xml",
3554+ "ref/netcore50/de/System.IO.Compression.xml",
3555+ "ref/netcore50/es/System.IO.Compression.xml",
3556+ "ref/netcore50/fr/System.IO.Compression.xml",
3557+ "ref/netcore50/it/System.IO.Compression.xml",
3558+ "ref/netcore50/ja/System.IO.Compression.xml",
3559+ "ref/netcore50/ko/System.IO.Compression.xml",
3560+ "ref/netcore50/ru/System.IO.Compression.xml",
3561+ "ref/netcore50/zh-hans/System.IO.Compression.xml",
3562+ "ref/netcore50/zh-hant/System.IO.Compression.xml",
3563+ "ref/netstandard1.1/System.IO.Compression.dll",
3564+ "ref/netstandard1.1/System.IO.Compression.xml",
3565+ "ref/netstandard1.1/de/System.IO.Compression.xml",
3566+ "ref/netstandard1.1/es/System.IO.Compression.xml",
3567+ "ref/netstandard1.1/fr/System.IO.Compression.xml",
3568+ "ref/netstandard1.1/it/System.IO.Compression.xml",
3569+ "ref/netstandard1.1/ja/System.IO.Compression.xml",
3570+ "ref/netstandard1.1/ko/System.IO.Compression.xml",
3571+ "ref/netstandard1.1/ru/System.IO.Compression.xml",
3572+ "ref/netstandard1.1/zh-hans/System.IO.Compression.xml",
3573+ "ref/netstandard1.1/zh-hant/System.IO.Compression.xml",
3574+ "ref/netstandard1.3/System.IO.Compression.dll",
3575+ "ref/netstandard1.3/System.IO.Compression.xml",
3576+ "ref/netstandard1.3/de/System.IO.Compression.xml",
3577+ "ref/netstandard1.3/es/System.IO.Compression.xml",
3578+ "ref/netstandard1.3/fr/System.IO.Compression.xml",
3579+ "ref/netstandard1.3/it/System.IO.Compression.xml",
3580+ "ref/netstandard1.3/ja/System.IO.Compression.xml",
3581+ "ref/netstandard1.3/ko/System.IO.Compression.xml",
3582+ "ref/netstandard1.3/ru/System.IO.Compression.xml",
3583+ "ref/netstandard1.3/zh-hans/System.IO.Compression.xml",
3584+ "ref/netstandard1.3/zh-hant/System.IO.Compression.xml",
3585+ "ref/portable-net45+win8+wpa81/_._",
3586+ "ref/win8/_._",
3587+ "ref/wpa81/_._",
3588+ "ref/xamarinios10/_._",
3589+ "ref/xamarinmac20/_._",
3590+ "ref/xamarintvos10/_._",
3591+ "ref/xamarinwatchos10/_._",
3592+ "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll",
3593+ "runtimes/win/lib/net46/System.IO.Compression.dll",
3594+ "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll"
3595+ ]
3596+ },
3597+ "System.IO.Compression.ZipFile/4.0.1": {
3598+ "sha512": "Lm36G8QNfncuHx/WX3NqYbcgytLom5i252He3gziUOJH/4bV1OpQ7iYYUPHDIW3BG3Uu2SaGrXS5F3BOP4/51A==",
3599+ "type": "package",
3600+ "path": "System.IO.Compression.ZipFile/4.0.1",
3601+ "files": [
3602+ "System.IO.Compression.ZipFile.4.0.1.nupkg.sha512",
3603+ "System.IO.Compression.ZipFile.nuspec",
3604+ "ThirdPartyNotices.txt",
3605+ "dotnet_library_license.txt",
3606+ "lib/MonoAndroid10/_._",
3607+ "lib/MonoTouch10/_._",
3608+ "lib/net46/System.IO.Compression.ZipFile.dll",
3609+ "lib/netstandard1.3/System.IO.Compression.ZipFile.dll",
3610+ "lib/xamarinios10/_._",
3611+ "lib/xamarinmac20/_._",
3612+ "lib/xamarintvos10/_._",
3613+ "lib/xamarinwatchos10/_._",
3614+ "ref/MonoAndroid10/_._",
3615+ "ref/MonoTouch10/_._",
3616+ "ref/net46/System.IO.Compression.ZipFile.dll",
3617+ "ref/netstandard1.3/System.IO.Compression.ZipFile.dll",
3618+ "ref/netstandard1.3/System.IO.Compression.ZipFile.xml",
3619+ "ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml",
3620+ "ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml",
3621+ "ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml",
3622+ "ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml",
3623+ "ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml",
3624+ "ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml",
3625+ "ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml",
3626+ "ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml",
3627+ "ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml",
3628+ "ref/xamarinios10/_._",
3629+ "ref/xamarinmac20/_._",
3630+ "ref/xamarintvos10/_._",
3631+ "ref/xamarinwatchos10/_._"
3632+ ]
3633+ },
3634+ "System.IO.FileSystem/4.0.1": {
3635+ "sha512": "HFpllN5lfzCcaLxzYHkq7P3XITywUOQ7uEbGObhdO5MHBjzPd+ebk4G2NnQUEIdLA+LBvkV7UHMUoSB00mwm9w==",
3636+ "type": "package",
3637+ "path": "System.IO.FileSystem/4.0.1",
3638+ "files": [
3639+ "System.IO.FileSystem.4.0.1.nupkg.sha512",
3640+ "System.IO.FileSystem.nuspec",
3641+ "ThirdPartyNotices.txt",
3642+ "dotnet_library_license.txt",
3643+ "lib/MonoAndroid10/_._",
3644+ "lib/MonoTouch10/_._",
3645+ "lib/net46/System.IO.FileSystem.dll",
3646+ "lib/xamarinios10/_._",
3647+ "lib/xamarinmac20/_._",
3648+ "lib/xamarintvos10/_._",
3649+ "lib/xamarinwatchos10/_._",
3650+ "ref/MonoAndroid10/_._",
3651+ "ref/MonoTouch10/_._",
3652+ "ref/net46/System.IO.FileSystem.dll",
3653+ "ref/netstandard1.3/System.IO.FileSystem.dll",
3654+ "ref/netstandard1.3/System.IO.FileSystem.xml",
3655+ "ref/netstandard1.3/de/System.IO.FileSystem.xml",
3656+ "ref/netstandard1.3/es/System.IO.FileSystem.xml",
3657+ "ref/netstandard1.3/fr/System.IO.FileSystem.xml",
3658+ "ref/netstandard1.3/it/System.IO.FileSystem.xml",
3659+ "ref/netstandard1.3/ja/System.IO.FileSystem.xml",
3660+ "ref/netstandard1.3/ko/System.IO.FileSystem.xml",
3661+ "ref/netstandard1.3/ru/System.IO.FileSystem.xml",
3662+ "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml",
3663+ "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml",
3664+ "ref/xamarinios10/_._",
3665+ "ref/xamarinmac20/_._",
3666+ "ref/xamarintvos10/_._",
3667+ "ref/xamarinwatchos10/_._"
3668+ ]
3669+ },
3670+ "System.IO.FileSystem.Primitives/4.0.1": {
3671+ "sha512": "fXuPsJnvdzhn7a6Ac6Zx0cLTa9FjU44xhVLGIxmAwcYFlr/OG8BGoEIeqxbiDMHWP3Q6nEKcgjPmfAPp6KwHdQ==",
3672+ "type": "package",
3673+ "path": "System.IO.FileSystem.Primitives/4.0.1",
3674+ "files": [
3675+ "System.IO.FileSystem.Primitives.4.0.1.nupkg.sha512",
3676+ "System.IO.FileSystem.Primitives.nuspec",
3677+ "ThirdPartyNotices.txt",
3678+ "dotnet_library_license.txt",
3679+ "lib/MonoAndroid10/_._",
3680+ "lib/MonoTouch10/_._",
3681+ "lib/net46/System.IO.FileSystem.Primitives.dll",
3682+ "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll",
3683+ "lib/xamarinios10/_._",
3684+ "lib/xamarinmac20/_._",
3685+ "lib/xamarintvos10/_._",
3686+ "lib/xamarinwatchos10/_._",
3687+ "ref/MonoAndroid10/_._",
3688+ "ref/MonoTouch10/_._",
3689+ "ref/net46/System.IO.FileSystem.Primitives.dll",
3690+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll",
3691+ "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml",
3692+ "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml",
3693+ "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml",
3694+ "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml",
3695+ "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml",
3696+ "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml",
3697+ "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml",
3698+ "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml",
3699+ "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml",
3700+ "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml",
3701+ "ref/xamarinios10/_._",
3702+ "ref/xamarinmac20/_._",
3703+ "ref/xamarintvos10/_._",
3704+ "ref/xamarinwatchos10/_._"
3705+ ]
3706+ },
3707+ "System.IO.FileSystem.Watcher/4.0.0": {
3708+ "sha512": "/fC9hfjVJfj68AoVj0pS30/IjByEz+7QctNGG3KYh0ISdFgU9XreDNCXrGPmq8mzxfWqQbRRoS+4fEAwRDaKWw==",
3709+ "type": "package",
3710+ "path": "System.IO.FileSystem.Watcher/4.0.0",
3711+ "files": [
3712+ "System.IO.FileSystem.Watcher.4.0.0.nupkg.sha512",
3713+ "System.IO.FileSystem.Watcher.nuspec",
3714+ "ThirdPartyNotices.txt",
3715+ "dotnet_library_license.txt",
3716+ "lib/MonoAndroid10/_._",
3717+ "lib/MonoTouch10/_._",
3718+ "lib/net46/System.IO.FileSystem.Watcher.dll",
3719+ "lib/xamarinios10/_._",
3720+ "lib/xamarinmac20/_._",
3721+ "lib/xamarintvos10/_._",
3722+ "lib/xamarinwatchos10/_._",
3723+ "ref/MonoAndroid10/_._",
3724+ "ref/MonoTouch10/_._",
3725+ "ref/net46/System.IO.FileSystem.Watcher.dll",
3726+ "ref/netstandard1.3/System.IO.FileSystem.Watcher.dll",
3727+ "ref/netstandard1.3/System.IO.FileSystem.Watcher.xml",
3728+ "ref/netstandard1.3/de/System.IO.FileSystem.Watcher.xml",
3729+ "ref/netstandard1.3/es/System.IO.FileSystem.Watcher.xml",
3730+ "ref/netstandard1.3/fr/System.IO.FileSystem.Watcher.xml",
3731+ "ref/netstandard1.3/it/System.IO.FileSystem.Watcher.xml",
3732+ "ref/netstandard1.3/ja/System.IO.FileSystem.Watcher.xml",
3733+ "ref/netstandard1.3/ko/System.IO.FileSystem.Watcher.xml",
3734+ "ref/netstandard1.3/ru/System.IO.FileSystem.Watcher.xml",
3735+ "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Watcher.xml",
3736+ "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Watcher.xml",
3737+ "ref/xamarinios10/_._",
3738+ "ref/xamarinmac20/_._",
3739+ "ref/xamarintvos10/_._",
3740+ "ref/xamarinwatchos10/_._",
3741+ "runtimes/linux/lib/netstandard1.3/System.IO.FileSystem.Watcher.dll",
3742+ "runtimes/osx/lib/netstandard1.3/System.IO.FileSystem.Watcher.dll",
3743+ "runtimes/win/lib/net46/System.IO.FileSystem.Watcher.dll",
3744+ "runtimes/win/lib/netstandard1.3/System.IO.FileSystem.Watcher.dll",
3745+ "runtimes/win7/lib/netcore50/_._"
3746+ ]
3747+ },
3748+ "System.IO.MemoryMappedFiles/4.0.0": {
3749+ "sha512": "fgdb0TbtVwr7++pJzJUSSTmEQVVYeHs578IxnKkUjdJ0ZGqsLHJ+4ESZ7PB+Q7BHIv2Iw5LHQow1E0n9LfoJUQ==",
3750+ "type": "package",
3751+ "path": "System.IO.MemoryMappedFiles/4.0.0",
3752+ "files": [
3753+ "System.IO.MemoryMappedFiles.4.0.0.nupkg.sha512",
3754+ "System.IO.MemoryMappedFiles.nuspec",
3755+ "ThirdPartyNotices.txt",
3756+ "dotnet_library_license.txt",
3757+ "lib/MonoAndroid10/_._",
3758+ "lib/MonoTouch10/_._",
3759+ "lib/net46/System.IO.MemoryMappedFiles.dll",
3760+ "lib/xamarinios10/_._",
3761+ "lib/xamarinmac20/_._",
3762+ "lib/xamarintvos10/_._",
3763+ "lib/xamarinwatchos10/_._",
3764+ "ref/MonoAndroid10/_._",
3765+ "ref/MonoTouch10/_._",
3766+ "ref/net46/System.IO.MemoryMappedFiles.dll",
3767+ "ref/netstandard1.3/System.IO.MemoryMappedFiles.dll",
3768+ "ref/netstandard1.3/System.IO.MemoryMappedFiles.xml",
3769+ "ref/netstandard1.3/de/System.IO.MemoryMappedFiles.xml",
3770+ "ref/netstandard1.3/es/System.IO.MemoryMappedFiles.xml",
3771+ "ref/netstandard1.3/fr/System.IO.MemoryMappedFiles.xml",
3772+ "ref/netstandard1.3/it/System.IO.MemoryMappedFiles.xml",
3773+ "ref/netstandard1.3/ja/System.IO.MemoryMappedFiles.xml",
3774+ "ref/netstandard1.3/ko/System.IO.MemoryMappedFiles.xml",
3775+ "ref/netstandard1.3/ru/System.IO.MemoryMappedFiles.xml",
3776+ "ref/netstandard1.3/zh-hans/System.IO.MemoryMappedFiles.xml",
3777+ "ref/netstandard1.3/zh-hant/System.IO.MemoryMappedFiles.xml",
3778+ "ref/xamarinios10/_._",
3779+ "ref/xamarinmac20/_._",
3780+ "ref/xamarintvos10/_._",
3781+ "ref/xamarinwatchos10/_._",
3782+ "runtimes/unix/lib/netstandard1.3/System.IO.MemoryMappedFiles.dll",
3783+ "runtimes/win/lib/net46/System.IO.MemoryMappedFiles.dll",
3784+ "runtimes/win/lib/netcore50/System.IO.MemoryMappedFiles.dll",
3785+ "runtimes/win/lib/netstandard1.3/System.IO.MemoryMappedFiles.dll"
3786+ ]
3787+ },
3788+ "System.IO.UnmanagedMemoryStream/4.0.1": {
3789+ "sha512": "ZymchmVl1tFgDC2j4MHXgtKwUmoKeJ5csVxsBT6HxHJhlpaGUwJJtp+sTWS1XlPvBTMJvLv0MUBFssDbKxWEEg==",
3790+ "type": "package",
3791+ "path": "System.IO.UnmanagedMemoryStream/4.0.1",
3792+ "files": [
3793+ "System.IO.UnmanagedMemoryStream.4.0.1.nupkg.sha512",
3794+ "System.IO.UnmanagedMemoryStream.nuspec",
3795+ "ThirdPartyNotices.txt",
3796+ "dotnet_library_license.txt",
3797+ "lib/MonoAndroid10/_._",
3798+ "lib/MonoTouch10/_._",
3799+ "lib/net46/System.IO.UnmanagedMemoryStream.dll",
3800+ "lib/netstandard1.3/System.IO.UnmanagedMemoryStream.dll",
3801+ "lib/xamarinios10/_._",
3802+ "lib/xamarinmac20/_._",
3803+ "lib/xamarintvos10/_._",
3804+ "lib/xamarinwatchos10/_._",
3805+ "ref/MonoAndroid10/_._",
3806+ "ref/MonoTouch10/_._",
3807+ "ref/net46/System.IO.UnmanagedMemoryStream.dll",
3808+ "ref/netstandard1.3/System.IO.UnmanagedMemoryStream.dll",
3809+ "ref/netstandard1.3/System.IO.UnmanagedMemoryStream.xml",
3810+ "ref/netstandard1.3/de/System.IO.UnmanagedMemoryStream.xml",
3811+ "ref/netstandard1.3/es/System.IO.UnmanagedMemoryStream.xml",
3812+ "ref/netstandard1.3/fr/System.IO.UnmanagedMemoryStream.xml",
3813+ "ref/netstandard1.3/it/System.IO.UnmanagedMemoryStream.xml",
3814+ "ref/netstandard1.3/ja/System.IO.UnmanagedMemoryStream.xml",
3815+ "ref/netstandard1.3/ko/System.IO.UnmanagedMemoryStream.xml",
3816+ "ref/netstandard1.3/ru/System.IO.UnmanagedMemoryStream.xml",
3817+ "ref/netstandard1.3/zh-hans/System.IO.UnmanagedMemoryStream.xml",
3818+ "ref/netstandard1.3/zh-hant/System.IO.UnmanagedMemoryStream.xml",
3819+ "ref/xamarinios10/_._",
3820+ "ref/xamarinmac20/_._",
3821+ "ref/xamarintvos10/_._",
3822+ "ref/xamarinwatchos10/_._"
3823+ ]
3824+ },
3825+ "System.Linq/4.1.0": {
3826+ "sha512": "0RdoPVXle4lmjVjAvHeo1SjvnjXOTczTRBJF+XMWZma6R0XU8z4dvDDJby+lDtUblE0MmXgUXrqLMWwS5kriLA==",
3827+ "type": "package",
3828+ "path": "System.Linq/4.1.0",
3829+ "files": [
3830+ "System.Linq.4.1.0.nupkg.sha512",
3831+ "System.Linq.nuspec",
3832+ "ThirdPartyNotices.txt",
3833+ "dotnet_library_license.txt",
3834+ "lib/MonoAndroid10/_._",
3835+ "lib/MonoTouch10/_._",
3836+ "lib/net45/_._",
3837+ "lib/net463/System.Linq.dll",
3838+ "lib/netcore50/System.Linq.dll",
3839+ "lib/netstandard1.6/System.Linq.dll",
3840+ "lib/portable-net45+win8+wp8+wpa81/_._",
3841+ "lib/win8/_._",
3842+ "lib/wp80/_._",
3843+ "lib/wpa81/_._",
3844+ "lib/xamarinios10/_._",
3845+ "lib/xamarinmac20/_._",
3846+ "lib/xamarintvos10/_._",
3847+ "lib/xamarinwatchos10/_._",
3848+ "ref/MonoAndroid10/_._",
3849+ "ref/MonoTouch10/_._",
3850+ "ref/net45/_._",
3851+ "ref/net463/System.Linq.dll",
3852+ "ref/netcore50/System.Linq.dll",
3853+ "ref/netcore50/System.Linq.xml",
3854+ "ref/netcore50/de/System.Linq.xml",
3855+ "ref/netcore50/es/System.Linq.xml",
3856+ "ref/netcore50/fr/System.Linq.xml",
3857+ "ref/netcore50/it/System.Linq.xml",
3858+ "ref/netcore50/ja/System.Linq.xml",
3859+ "ref/netcore50/ko/System.Linq.xml",
3860+ "ref/netcore50/ru/System.Linq.xml",
3861+ "ref/netcore50/zh-hans/System.Linq.xml",
3862+ "ref/netcore50/zh-hant/System.Linq.xml",
3863+ "ref/netstandard1.0/System.Linq.dll",
3864+ "ref/netstandard1.0/System.Linq.xml",
3865+ "ref/netstandard1.0/de/System.Linq.xml",
3866+ "ref/netstandard1.0/es/System.Linq.xml",
3867+ "ref/netstandard1.0/fr/System.Linq.xml",
3868+ "ref/netstandard1.0/it/System.Linq.xml",
3869+ "ref/netstandard1.0/ja/System.Linq.xml",
3870+ "ref/netstandard1.0/ko/System.Linq.xml",
3871+ "ref/netstandard1.0/ru/System.Linq.xml",
3872+ "ref/netstandard1.0/zh-hans/System.Linq.xml",
3873+ "ref/netstandard1.0/zh-hant/System.Linq.xml",
3874+ "ref/netstandard1.6/System.Linq.dll",
3875+ "ref/netstandard1.6/System.Linq.xml",
3876+ "ref/netstandard1.6/de/System.Linq.xml",
3877+ "ref/netstandard1.6/es/System.Linq.xml",
3878+ "ref/netstandard1.6/fr/System.Linq.xml",
3879+ "ref/netstandard1.6/it/System.Linq.xml",
3880+ "ref/netstandard1.6/ja/System.Linq.xml",
3881+ "ref/netstandard1.6/ko/System.Linq.xml",
3882+ "ref/netstandard1.6/ru/System.Linq.xml",
3883+ "ref/netstandard1.6/zh-hans/System.Linq.xml",
3884+ "ref/netstandard1.6/zh-hant/System.Linq.xml",
3885+ "ref/portable-net45+win8+wp8+wpa81/_._",
3886+ "ref/win8/_._",
3887+ "ref/wp80/_._",
3888+ "ref/wpa81/_._",
3889+ "ref/xamarinios10/_._",
3890+ "ref/xamarinmac20/_._",
3891+ "ref/xamarintvos10/_._",
3892+ "ref/xamarinwatchos10/_._"
3893+ ]
3894+ },
3895+ "System.Linq.Expressions/4.1.0": {
3896+ "sha512": "DcR/TsucSdvUaD2+2AyH5OhEXMLvt1z1EFtR3DjapY/zQWf1/jMbZLh/WbrzxhYhmrWB1/5sWs1kdc3Q+g1SEg==",
3897+ "type": "package",
3898+ "path": "System.Linq.Expressions/4.1.0",
3899+ "files": [
3900+ "System.Linq.Expressions.4.1.0.nupkg.sha512",
3901+ "System.Linq.Expressions.nuspec",
3902+ "ThirdPartyNotices.txt",
3903+ "dotnet_library_license.txt",
3904+ "lib/MonoAndroid10/_._",
3905+ "lib/MonoTouch10/_._",
3906+ "lib/net45/_._",
3907+ "lib/net463/System.Linq.Expressions.dll",
3908+ "lib/netcore50/System.Linq.Expressions.dll",
3909+ "lib/netstandard1.6/System.Linq.Expressions.dll",
3910+ "lib/portable-net45+win8+wp8+wpa81/_._",
3911+ "lib/win8/_._",
3912+ "lib/wp80/_._",
3913+ "lib/wpa81/_._",
3914+ "lib/xamarinios10/_._",
3915+ "lib/xamarinmac20/_._",
3916+ "lib/xamarintvos10/_._",
3917+ "lib/xamarinwatchos10/_._",
3918+ "ref/MonoAndroid10/_._",
3919+ "ref/MonoTouch10/_._",
3920+ "ref/net45/_._",
3921+ "ref/net463/System.Linq.Expressions.dll",
3922+ "ref/netcore50/System.Linq.Expressions.dll",
3923+ "ref/netcore50/System.Linq.Expressions.xml",
3924+ "ref/netcore50/de/System.Linq.Expressions.xml",
3925+ "ref/netcore50/es/System.Linq.Expressions.xml",
3926+ "ref/netcore50/fr/System.Linq.Expressions.xml",
3927+ "ref/netcore50/it/System.Linq.Expressions.xml",
3928+ "ref/netcore50/ja/System.Linq.Expressions.xml",
3929+ "ref/netcore50/ko/System.Linq.Expressions.xml",
3930+ "ref/netcore50/ru/System.Linq.Expressions.xml",
3931+ "ref/netcore50/zh-hans/System.Linq.Expressions.xml",
3932+ "ref/netcore50/zh-hant/System.Linq.Expressions.xml",
3933+ "ref/netstandard1.0/System.Linq.Expressions.dll",
3934+ "ref/netstandard1.0/System.Linq.Expressions.xml",
3935+ "ref/netstandard1.0/de/System.Linq.Expressions.xml",
3936+ "ref/netstandard1.0/es/System.Linq.Expressions.xml",
3937+ "ref/netstandard1.0/fr/System.Linq.Expressions.xml",
3938+ "ref/netstandard1.0/it/System.Linq.Expressions.xml",
3939+ "ref/netstandard1.0/ja/System.Linq.Expressions.xml",
3940+ "ref/netstandard1.0/ko/System.Linq.Expressions.xml",
3941+ "ref/netstandard1.0/ru/System.Linq.Expressions.xml",
3942+ "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml",
3943+ "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml",
3944+ "ref/netstandard1.3/System.Linq.Expressions.dll",
3945+ "ref/netstandard1.3/System.Linq.Expressions.xml",
3946+ "ref/netstandard1.3/de/System.Linq.Expressions.xml",
3947+ "ref/netstandard1.3/es/System.Linq.Expressions.xml",
3948+ "ref/netstandard1.3/fr/System.Linq.Expressions.xml",
3949+ "ref/netstandard1.3/it/System.Linq.Expressions.xml",
3950+ "ref/netstandard1.3/ja/System.Linq.Expressions.xml",
3951+ "ref/netstandard1.3/ko/System.Linq.Expressions.xml",
3952+ "ref/netstandard1.3/ru/System.Linq.Expressions.xml",
3953+ "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml",
3954+ "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml",
3955+ "ref/netstandard1.6/System.Linq.Expressions.dll",
3956+ "ref/netstandard1.6/System.Linq.Expressions.xml",
3957+ "ref/netstandard1.6/de/System.Linq.Expressions.xml",
3958+ "ref/netstandard1.6/es/System.Linq.Expressions.xml",
3959+ "ref/netstandard1.6/fr/System.Linq.Expressions.xml",
3960+ "ref/netstandard1.6/it/System.Linq.Expressions.xml",
3961+ "ref/netstandard1.6/ja/System.Linq.Expressions.xml",
3962+ "ref/netstandard1.6/ko/System.Linq.Expressions.xml",
3963+ "ref/netstandard1.6/ru/System.Linq.Expressions.xml",
3964+ "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml",
3965+ "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml",
3966+ "ref/portable-net45+win8+wp8+wpa81/_._",
3967+ "ref/win8/_._",
3968+ "ref/wp80/_._",
3969+ "ref/wpa81/_._",
3970+ "ref/xamarinios10/_._",
3971+ "ref/xamarinmac20/_._",
3972+ "ref/xamarintvos10/_._",
3973+ "ref/xamarinwatchos10/_._",
3974+ "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll"
3975+ ]
3976+ },
3977+ "System.Linq.Parallel/4.0.1": {
3978+ "sha512": "CMzKovrTe0CFg6dBMO6J3tkeEh5Lu51jsammXx/VBZtEwOBMh81vPzaOIsvUeCXjVmDkNeAiGkJhSOFQJ+n9aw==",
3979+ "type": "package",
3980+ "path": "System.Linq.Parallel/4.0.1",
3981+ "files": [
3982+ "System.Linq.Parallel.4.0.1.nupkg.sha512",
3983+ "System.Linq.Parallel.nuspec",
3984+ "ThirdPartyNotices.txt",
3985+ "dotnet_library_license.txt",
3986+ "lib/MonoAndroid10/_._",
3987+ "lib/MonoTouch10/_._",
3988+ "lib/net45/_._",
3989+ "lib/netcore50/System.Linq.Parallel.dll",
3990+ "lib/netstandard1.3/System.Linq.Parallel.dll",
3991+ "lib/portable-net45+win8+wpa81/_._",
3992+ "lib/win8/_._",
3993+ "lib/wpa81/_._",
3994+ "lib/xamarinios10/_._",
3995+ "lib/xamarinmac20/_._",
3996+ "lib/xamarintvos10/_._",
3997+ "lib/xamarinwatchos10/_._",
3998+ "ref/MonoAndroid10/_._",
3999+ "ref/MonoTouch10/_._",
4000+ "ref/net45/_._",
4001+ "ref/netcore50/System.Linq.Parallel.dll",
4002+ "ref/netcore50/System.Linq.Parallel.xml",
4003+ "ref/netcore50/de/System.Linq.Parallel.xml",
4004+ "ref/netcore50/es/System.Linq.Parallel.xml",
4005+ "ref/netcore50/fr/System.Linq.Parallel.xml",
4006+ "ref/netcore50/it/System.Linq.Parallel.xml",
4007+ "ref/netcore50/ja/System.Linq.Parallel.xml",
4008+ "ref/netcore50/ko/System.Linq.Parallel.xml",
4009+ "ref/netcore50/ru/System.Linq.Parallel.xml",
4010+ "ref/netcore50/zh-hans/System.Linq.Parallel.xml",
4011+ "ref/netcore50/zh-hant/System.Linq.Parallel.xml",
4012+ "ref/netstandard1.1/System.Linq.Parallel.dll",
4013+ "ref/netstandard1.1/System.Linq.Parallel.xml",
4014+ "ref/netstandard1.1/de/System.Linq.Parallel.xml",
4015+ "ref/netstandard1.1/es/System.Linq.Parallel.xml",
4016+ "ref/netstandard1.1/fr/System.Linq.Parallel.xml",
4017+ "ref/netstandard1.1/it/System.Linq.Parallel.xml",
4018+ "ref/netstandard1.1/ja/System.Linq.Parallel.xml",
4019+ "ref/netstandard1.1/ko/System.Linq.Parallel.xml",
4020+ "ref/netstandard1.1/ru/System.Linq.Parallel.xml",
4021+ "ref/netstandard1.1/zh-hans/System.Linq.Parallel.xml",
4022+ "ref/netstandard1.1/zh-hant/System.Linq.Parallel.xml",
4023+ "ref/portable-net45+win8+wpa81/_._",
4024+ "ref/win8/_._",
4025+ "ref/wpa81/_._",
4026+ "ref/xamarinios10/_._",
4027+ "ref/xamarinmac20/_._",
4028+ "ref/xamarintvos10/_._",
4029+ "ref/xamarinwatchos10/_._"
4030+ ]
4031+ },
4032+ "System.Linq.Queryable/4.0.1": {
4033+ "sha512": "4Pgfj37LCCuwta+3owsNvL2UyveRUrW1YCthfdlGR27C6wtOwhpUFnOCDIQKbh1Cwl2fOztktRO3NQsRiVRXWQ==",
4034+ "type": "package",
4035+ "path": "System.Linq.Queryable/4.0.1",
4036+ "files": [
4037+ "System.Linq.Queryable.4.0.1.nupkg.sha512",
4038+ "System.Linq.Queryable.nuspec",
4039+ "ThirdPartyNotices.txt",
4040+ "dotnet_library_license.txt",
4041+ "lib/monoandroid10/_._",
4042+ "lib/monotouch10/_._",
4043+ "lib/net45/_._",
4044+ "lib/netcore50/System.Linq.Queryable.dll",
4045+ "lib/netstandard1.3/System.Linq.Queryable.dll",
4046+ "lib/portable-net45+win8+wp8+wpa81/_._",
4047+ "lib/win8/_._",
4048+ "lib/wp80/_._",
4049+ "lib/wpa81/_._",
4050+ "lib/xamarinios10/_._",
4051+ "lib/xamarinmac20/_._",
4052+ "lib/xamarintvos10/_._",
4053+ "lib/xamarinwatchos10/_._",
4054+ "ref/monoandroid10/_._",
4055+ "ref/monotouch10/_._",
4056+ "ref/net45/_._",
4057+ "ref/netcore50/System.Linq.Queryable.dll",
4058+ "ref/netcore50/System.Linq.Queryable.xml",
4059+ "ref/netcore50/de/System.Linq.Queryable.xml",
4060+ "ref/netcore50/es/System.Linq.Queryable.xml",
4061+ "ref/netcore50/fr/System.Linq.Queryable.xml",
4062+ "ref/netcore50/it/System.Linq.Queryable.xml",
4063+ "ref/netcore50/ja/System.Linq.Queryable.xml",
4064+ "ref/netcore50/ko/System.Linq.Queryable.xml",
4065+ "ref/netcore50/ru/System.Linq.Queryable.xml",
4066+ "ref/netcore50/zh-hans/System.Linq.Queryable.xml",
4067+ "ref/netcore50/zh-hant/System.Linq.Queryable.xml",
4068+ "ref/netstandard1.0/System.Linq.Queryable.dll",
4069+ "ref/netstandard1.0/System.Linq.Queryable.xml",
4070+ "ref/netstandard1.0/de/System.Linq.Queryable.xml",
4071+ "ref/netstandard1.0/es/System.Linq.Queryable.xml",
4072+ "ref/netstandard1.0/fr/System.Linq.Queryable.xml",
4073+ "ref/netstandard1.0/it/System.Linq.Queryable.xml",
4074+ "ref/netstandard1.0/ja/System.Linq.Queryable.xml",
4075+ "ref/netstandard1.0/ko/System.Linq.Queryable.xml",
4076+ "ref/netstandard1.0/ru/System.Linq.Queryable.xml",
4077+ "ref/netstandard1.0/zh-hans/System.Linq.Queryable.xml",
4078+ "ref/netstandard1.0/zh-hant/System.Linq.Queryable.xml",
4079+ "ref/portable-net45+win8+wp8+wpa81/_._",
4080+ "ref/win8/_._",
4081+ "ref/wp80/_._",
4082+ "ref/wpa81/_._",
4083+ "ref/xamarinios10/_._",
4084+ "ref/xamarinmac20/_._",
4085+ "ref/xamarintvos10/_._",
4086+ "ref/xamarinwatchos10/_._"
4087+ ]
4088+ },
4089+ "System.Net.Http/4.1.0": {
4090+ "sha512": "hZn7QMba3OTd0fWhtDpk6Ah/+486/XfPgLf40z31VLaHAMUOxmK4cmO/G50hNoViuM4BrSUl5MxfWWl7qrIENw==",
4091+ "type": "package",
4092+ "path": "System.Net.Http/4.1.0",
4093+ "files": [
4094+ "System.Net.Http.4.1.0.nupkg.sha512",
4095+ "System.Net.Http.nuspec",
4096+ "ThirdPartyNotices.txt",
4097+ "dotnet_library_license.txt",
4098+ "lib/Xamarinmac20/_._",
4099+ "lib/monoandroid10/_._",
4100+ "lib/monotouch10/_._",
4101+ "lib/net45/_._",
4102+ "lib/net46/System.Net.Http.dll",
4103+ "lib/portable-net45+win8+wpa81/_._",
4104+ "lib/win8/_._",
4105+ "lib/wpa81/_._",
4106+ "lib/xamarinios10/_._",
4107+ "lib/xamarintvos10/_._",
4108+ "lib/xamarinwatchos10/_._",
4109+ "ref/Xamarinmac20/_._",
4110+ "ref/monoandroid10/_._",
4111+ "ref/monotouch10/_._",
4112+ "ref/net45/_._",
4113+ "ref/net46/System.Net.Http.dll",
4114+ "ref/net46/System.Net.Http.xml",
4115+ "ref/net46/de/System.Net.Http.xml",
4116+ "ref/net46/es/System.Net.Http.xml",
4117+ "ref/net46/fr/System.Net.Http.xml",
4118+ "ref/net46/it/System.Net.Http.xml",
4119+ "ref/net46/ja/System.Net.Http.xml",
4120+ "ref/net46/ko/System.Net.Http.xml",
4121+ "ref/net46/ru/System.Net.Http.xml",
4122+ "ref/net46/zh-hans/System.Net.Http.xml",
4123+ "ref/net46/zh-hant/System.Net.Http.xml",
4124+ "ref/netcore50/System.Net.Http.dll",
4125+ "ref/netcore50/System.Net.Http.xml",
4126+ "ref/netcore50/de/System.Net.Http.xml",
4127+ "ref/netcore50/es/System.Net.Http.xml",
4128+ "ref/netcore50/fr/System.Net.Http.xml",
4129+ "ref/netcore50/it/System.Net.Http.xml",
4130+ "ref/netcore50/ja/System.Net.Http.xml",
4131+ "ref/netcore50/ko/System.Net.Http.xml",
4132+ "ref/netcore50/ru/System.Net.Http.xml",
4133+ "ref/netcore50/zh-hans/System.Net.Http.xml",
4134+ "ref/netcore50/zh-hant/System.Net.Http.xml",
4135+ "ref/netstandard1.1/System.Net.Http.dll",
4136+ "ref/netstandard1.1/System.Net.Http.xml",
4137+ "ref/netstandard1.1/de/System.Net.Http.xml",
4138+ "ref/netstandard1.1/es/System.Net.Http.xml",
4139+ "ref/netstandard1.1/fr/System.Net.Http.xml",
4140+ "ref/netstandard1.1/it/System.Net.Http.xml",
4141+ "ref/netstandard1.1/ja/System.Net.Http.xml",
4142+ "ref/netstandard1.1/ko/System.Net.Http.xml",
4143+ "ref/netstandard1.1/ru/System.Net.Http.xml",
4144+ "ref/netstandard1.1/zh-hans/System.Net.Http.xml",
4145+ "ref/netstandard1.1/zh-hant/System.Net.Http.xml",
4146+ "ref/netstandard1.3/System.Net.Http.dll",
4147+ "ref/netstandard1.3/System.Net.Http.xml",
4148+ "ref/netstandard1.3/de/System.Net.Http.xml",
4149+ "ref/netstandard1.3/es/System.Net.Http.xml",
4150+ "ref/netstandard1.3/fr/System.Net.Http.xml",
4151+ "ref/netstandard1.3/it/System.Net.Http.xml",
4152+ "ref/netstandard1.3/ja/System.Net.Http.xml",
4153+ "ref/netstandard1.3/ko/System.Net.Http.xml",
4154+ "ref/netstandard1.3/ru/System.Net.Http.xml",
4155+ "ref/netstandard1.3/zh-hans/System.Net.Http.xml",
4156+ "ref/netstandard1.3/zh-hant/System.Net.Http.xml",
4157+ "ref/portable-net45+win8+wpa81/_._",
4158+ "ref/win8/_._",
4159+ "ref/wpa81/_._",
4160+ "ref/xamarinios10/_._",
4161+ "ref/xamarintvos10/_._",
4162+ "ref/xamarinwatchos10/_._",
4163+ "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll",
4164+ "runtimes/win/lib/net46/System.Net.Http.dll",
4165+ "runtimes/win/lib/netcore50/System.Net.Http.dll",
4166+ "runtimes/win/lib/netstandard1.3/System.Net.Http.dll"
4167+ ]
4168+ },
4169+ "System.Net.NameResolution/4.0.0": {
4170+ "sha512": "iyHWj7OuudyxU1+Ahv8IoJNI1ZjrAfPmd1MBs16U41ZZqOAM6gRSrbvBadWaPvc7EOG0MfYry/DumOuQrpoLBQ==",
4171+ "type": "package",
4172+ "path": "System.Net.NameResolution/4.0.0",
4173+ "files": [
4174+ "System.Net.NameResolution.4.0.0.nupkg.sha512",
4175+ "System.Net.NameResolution.nuspec",
4176+ "ThirdPartyNotices.txt",
4177+ "dotnet_library_license.txt",
4178+ "lib/MonoAndroid10/_._",
4179+ "lib/MonoTouch10/_._",
4180+ "lib/net46/System.Net.NameResolution.dll",
4181+ "lib/xamarinios10/_._",
4182+ "lib/xamarinmac20/_._",
4183+ "lib/xamarintvos10/_._",
4184+ "lib/xamarinwatchos10/_._",
4185+ "ref/MonoAndroid10/_._",
4186+ "ref/MonoTouch10/_._",
4187+ "ref/net46/System.Net.NameResolution.dll",
4188+ "ref/netstandard1.3/System.Net.NameResolution.dll",
4189+ "ref/netstandard1.3/System.Net.NameResolution.xml",
4190+ "ref/netstandard1.3/de/System.Net.NameResolution.xml",
4191+ "ref/netstandard1.3/es/System.Net.NameResolution.xml",
4192+ "ref/netstandard1.3/fr/System.Net.NameResolution.xml",
4193+ "ref/netstandard1.3/it/System.Net.NameResolution.xml",
4194+ "ref/netstandard1.3/ja/System.Net.NameResolution.xml",
4195+ "ref/netstandard1.3/ko/System.Net.NameResolution.xml",
4196+ "ref/netstandard1.3/ru/System.Net.NameResolution.xml",
4197+ "ref/netstandard1.3/zh-hans/System.Net.NameResolution.xml",
4198+ "ref/netstandard1.3/zh-hant/System.Net.NameResolution.xml",
4199+ "ref/xamarinios10/_._",
4200+ "ref/xamarinmac20/_._",
4201+ "ref/xamarintvos10/_._",
4202+ "ref/xamarinwatchos10/_._",
4203+ "runtimes/unix/lib/netstandard1.3/System.Net.NameResolution.dll",
4204+ "runtimes/win/lib/net46/System.Net.NameResolution.dll",
4205+ "runtimes/win/lib/netcore50/System.Net.NameResolution.dll",
4206+ "runtimes/win/lib/netstandard1.3/System.Net.NameResolution.dll"
4207+ ]
4208+ },
4209+ "System.Net.Primitives/4.0.11": {
4210+ "sha512": "KcZbYrq47rmbU8cHr9HxofO3ls/w0wvZBflGG7IwhVz29YSl1iJRI0SQJ9wkh6cSmpt/7HPKFQIbzjNpwGxUhg==",
4211+ "type": "package",
4212+ "path": "System.Net.Primitives/4.0.11",
4213+ "files": [
4214+ "System.Net.Primitives.4.0.11.nupkg.sha512",
4215+ "System.Net.Primitives.nuspec",
4216+ "ThirdPartyNotices.txt",
4217+ "dotnet_library_license.txt",
4218+ "lib/MonoAndroid10/_._",
4219+ "lib/MonoTouch10/_._",
4220+ "lib/net45/_._",
4221+ "lib/portable-net45+win8+wp8+wpa81/_._",
4222+ "lib/win8/_._",
4223+ "lib/wp80/_._",
4224+ "lib/wpa81/_._",
4225+ "lib/xamarinios10/_._",
4226+ "lib/xamarinmac20/_._",
4227+ "lib/xamarintvos10/_._",
4228+ "lib/xamarinwatchos10/_._",
4229+ "ref/MonoAndroid10/_._",
4230+ "ref/MonoTouch10/_._",
4231+ "ref/net45/_._",
4232+ "ref/netcore50/System.Net.Primitives.dll",
4233+ "ref/netcore50/System.Net.Primitives.xml",
4234+ "ref/netcore50/de/System.Net.Primitives.xml",
4235+ "ref/netcore50/es/System.Net.Primitives.xml",
4236+ "ref/netcore50/fr/System.Net.Primitives.xml",
4237+ "ref/netcore50/it/System.Net.Primitives.xml",
4238+ "ref/netcore50/ja/System.Net.Primitives.xml",
4239+ "ref/netcore50/ko/System.Net.Primitives.xml",
4240+ "ref/netcore50/ru/System.Net.Primitives.xml",
4241+ "ref/netcore50/zh-hans/System.Net.Primitives.xml",
4242+ "ref/netcore50/zh-hant/System.Net.Primitives.xml",
4243+ "ref/netstandard1.0/System.Net.Primitives.dll",
4244+ "ref/netstandard1.0/System.Net.Primitives.xml",
4245+ "ref/netstandard1.0/de/System.Net.Primitives.xml",
4246+ "ref/netstandard1.0/es/System.Net.Primitives.xml",
4247+ "ref/netstandard1.0/fr/System.Net.Primitives.xml",
4248+ "ref/netstandard1.0/it/System.Net.Primitives.xml",
4249+ "ref/netstandard1.0/ja/System.Net.Primitives.xml",
4250+ "ref/netstandard1.0/ko/System.Net.Primitives.xml",
4251+ "ref/netstandard1.0/ru/System.Net.Primitives.xml",
4252+ "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml",
4253+ "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml",
4254+ "ref/netstandard1.1/System.Net.Primitives.dll",
4255+ "ref/netstandard1.1/System.Net.Primitives.xml",
4256+ "ref/netstandard1.1/de/System.Net.Primitives.xml",
4257+ "ref/netstandard1.1/es/System.Net.Primitives.xml",
4258+ "ref/netstandard1.1/fr/System.Net.Primitives.xml",
4259+ "ref/netstandard1.1/it/System.Net.Primitives.xml",
4260+ "ref/netstandard1.1/ja/System.Net.Primitives.xml",
4261+ "ref/netstandard1.1/ko/System.Net.Primitives.xml",
4262+ "ref/netstandard1.1/ru/System.Net.Primitives.xml",
4263+ "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml",
4264+ "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml",
4265+ "ref/netstandard1.3/System.Net.Primitives.dll",
4266+ "ref/netstandard1.3/System.Net.Primitives.xml",
4267+ "ref/netstandard1.3/de/System.Net.Primitives.xml",
4268+ "ref/netstandard1.3/es/System.Net.Primitives.xml",
4269+ "ref/netstandard1.3/fr/System.Net.Primitives.xml",
4270+ "ref/netstandard1.3/it/System.Net.Primitives.xml",
4271+ "ref/netstandard1.3/ja/System.Net.Primitives.xml",
4272+ "ref/netstandard1.3/ko/System.Net.Primitives.xml",
4273+ "ref/netstandard1.3/ru/System.Net.Primitives.xml",
4274+ "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml",
4275+ "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml",
4276+ "ref/portable-net45+win8+wp8+wpa81/_._",
4277+ "ref/win8/_._",
4278+ "ref/wp80/_._",
4279+ "ref/wpa81/_._",
4280+ "ref/xamarinios10/_._",
4281+ "ref/xamarinmac20/_._",
4282+ "ref/xamarintvos10/_._",
4283+ "ref/xamarinwatchos10/_._"
4284+ ]
4285+ },
4286+ "System.Net.Requests/4.0.11": {
4287+ "sha512": "qyURRKYbqPZaqqYn9cmtJn/iByemgah6Y93Vs1+ZX6sOFM7Ttsrc4Fl6SkPGNK+CuulKU4xf1fZW+6YenAUIfw==",
4288+ "type": "package",
4289+ "path": "System.Net.Requests/4.0.11",
4290+ "files": [
4291+ "System.Net.Requests.4.0.11.nupkg.sha512",
4292+ "System.Net.Requests.nuspec",
4293+ "ThirdPartyNotices.txt",
4294+ "dotnet_library_license.txt",
4295+ "lib/MonoAndroid10/_._",
4296+ "lib/MonoTouch10/_._",
4297+ "lib/net45/_._",
4298+ "lib/portable-net45+win8+wp8+wpa81/_._",
4299+ "lib/win8/_._",
4300+ "lib/wp80/_._",
4301+ "lib/wpa81/_._",
4302+ "lib/xamarinios10/_._",
4303+ "lib/xamarinmac20/_._",
4304+ "lib/xamarintvos10/_._",
4305+ "lib/xamarinwatchos10/_._",
4306+ "ref/MonoAndroid10/_._",
4307+ "ref/MonoTouch10/_._",
4308+ "ref/net45/_._",
4309+ "ref/net46/_._",
4310+ "ref/netcore50/System.Net.Requests.dll",
4311+ "ref/netcore50/System.Net.Requests.xml",
4312+ "ref/netcore50/de/System.Net.Requests.xml",
4313+ "ref/netcore50/es/System.Net.Requests.xml",
4314+ "ref/netcore50/fr/System.Net.Requests.xml",
4315+ "ref/netcore50/it/System.Net.Requests.xml",
4316+ "ref/netcore50/ja/System.Net.Requests.xml",
4317+ "ref/netcore50/ko/System.Net.Requests.xml",
4318+ "ref/netcore50/ru/System.Net.Requests.xml",
4319+ "ref/netcore50/zh-hans/System.Net.Requests.xml",
4320+ "ref/netcore50/zh-hant/System.Net.Requests.xml",
4321+ "ref/netstandard1.0/System.Net.Requests.dll",
4322+ "ref/netstandard1.0/System.Net.Requests.xml",
4323+ "ref/netstandard1.0/de/System.Net.Requests.xml",
4324+ "ref/netstandard1.0/es/System.Net.Requests.xml",
4325+ "ref/netstandard1.0/fr/System.Net.Requests.xml",
4326+ "ref/netstandard1.0/it/System.Net.Requests.xml",
4327+ "ref/netstandard1.0/ja/System.Net.Requests.xml",
4328+ "ref/netstandard1.0/ko/System.Net.Requests.xml",
4329+ "ref/netstandard1.0/ru/System.Net.Requests.xml",
4330+ "ref/netstandard1.0/zh-hans/System.Net.Requests.xml",
4331+ "ref/netstandard1.0/zh-hant/System.Net.Requests.xml",
4332+ "ref/netstandard1.1/System.Net.Requests.dll",
4333+ "ref/netstandard1.1/System.Net.Requests.xml",
4334+ "ref/netstandard1.1/de/System.Net.Requests.xml",
4335+ "ref/netstandard1.1/es/System.Net.Requests.xml",
4336+ "ref/netstandard1.1/fr/System.Net.Requests.xml",
4337+ "ref/netstandard1.1/it/System.Net.Requests.xml",
4338+ "ref/netstandard1.1/ja/System.Net.Requests.xml",
4339+ "ref/netstandard1.1/ko/System.Net.Requests.xml",
4340+ "ref/netstandard1.1/ru/System.Net.Requests.xml",
4341+ "ref/netstandard1.1/zh-hans/System.Net.Requests.xml",
4342+ "ref/netstandard1.1/zh-hant/System.Net.Requests.xml",
4343+ "ref/netstandard1.3/System.Net.Requests.dll",
4344+ "ref/netstandard1.3/System.Net.Requests.xml",
4345+ "ref/netstandard1.3/de/System.Net.Requests.xml",
4346+ "ref/netstandard1.3/es/System.Net.Requests.xml",
4347+ "ref/netstandard1.3/fr/System.Net.Requests.xml",
4348+ "ref/netstandard1.3/it/System.Net.Requests.xml",
4349+ "ref/netstandard1.3/ja/System.Net.Requests.xml",
4350+ "ref/netstandard1.3/ko/System.Net.Requests.xml",
4351+ "ref/netstandard1.3/ru/System.Net.Requests.xml",
4352+ "ref/netstandard1.3/zh-hans/System.Net.Requests.xml",
4353+ "ref/netstandard1.3/zh-hant/System.Net.Requests.xml",
4354+ "ref/portable-net45+win8+wp8+wpa81/_._",
4355+ "ref/win8/_._",
4356+ "ref/wp80/_._",
4357+ "ref/wpa81/_._",
4358+ "ref/xamarinios10/_._",
4359+ "ref/xamarinmac20/_._",
4360+ "ref/xamarintvos10/_._",
4361+ "ref/xamarinwatchos10/_._",
4362+ "runtimes/unix/lib/netstandard1.3/System.Net.Requests.dll",
4363+ "runtimes/win/lib/net46/_._",
4364+ "runtimes/win/lib/netstandard1.3/System.Net.Requests.dll"
4365+ ]
4366+ },
4367+ "System.Net.Security/4.0.0": {
4368+ "sha512": "O5pmYZ0bsJzRP3lxvO6HZWjvBBKkhNRUI/UQReeDo9cvvfNuhBamZkAbaQTZRYOk+JsDzfpDrkqfglgeI9VhpQ==",
4369+ "type": "package",
4370+ "path": "System.Net.Security/4.0.0",
4371+ "files": [
4372+ "System.Net.Security.4.0.0.nupkg.sha512",
4373+ "System.Net.Security.nuspec",
4374+ "ThirdPartyNotices.txt",
4375+ "dotnet_library_license.txt",
4376+ "lib/MonoAndroid10/_._",
4377+ "lib/MonoTouch10/_._",
4378+ "lib/net46/System.Net.Security.dll",
4379+ "lib/xamarinios10/_._",
4380+ "lib/xamarinmac20/_._",
4381+ "lib/xamarintvos10/_._",
4382+ "lib/xamarinwatchos10/_._",
4383+ "ref/MonoAndroid10/_._",
4384+ "ref/MonoTouch10/_._",
4385+ "ref/net46/System.Net.Security.dll",
4386+ "ref/netstandard1.3/System.Net.Security.dll",
4387+ "ref/netstandard1.3/System.Net.Security.xml",
4388+ "ref/netstandard1.3/de/System.Net.Security.xml",
4389+ "ref/netstandard1.3/es/System.Net.Security.xml",
4390+ "ref/netstandard1.3/fr/System.Net.Security.xml",
4391+ "ref/netstandard1.3/it/System.Net.Security.xml",
4392+ "ref/netstandard1.3/ja/System.Net.Security.xml",
4393+ "ref/netstandard1.3/ko/System.Net.Security.xml",
4394+ "ref/netstandard1.3/ru/System.Net.Security.xml",
4395+ "ref/netstandard1.3/zh-hans/System.Net.Security.xml",
4396+ "ref/netstandard1.3/zh-hant/System.Net.Security.xml",
4397+ "ref/xamarinios10/_._",
4398+ "ref/xamarinmac20/_._",
4399+ "ref/xamarintvos10/_._",
4400+ "ref/xamarinwatchos10/_._",
4401+ "runtimes/unix/lib/netstandard1.6/System.Net.Security.dll",
4402+ "runtimes/win/lib/net46/System.Net.Security.dll",
4403+ "runtimes/win/lib/netstandard1.3/System.Net.Security.dll",
4404+ "runtimes/win7/lib/netcore50/_._"
4405+ ]
4406+ },
4407+ "System.Net.Sockets/4.1.0": {
4408+ "sha512": "W2aqTjRs5tn3gNPemzojBcRPFBsnOiIABvwo+b7U82sVcW5JVgWOyewHDr7fdK/EEgJ8j+nrX9L/8sDV6vGLiA==",
4409+ "type": "package",
4410+ "path": "System.Net.Sockets/4.1.0",
4411+ "files": [
4412+ "System.Net.Sockets.4.1.0.nupkg.sha512",
4413+ "System.Net.Sockets.nuspec",
4414+ "ThirdPartyNotices.txt",
4415+ "dotnet_library_license.txt",
4416+ "lib/MonoAndroid10/_._",
4417+ "lib/MonoTouch10/_._",
4418+ "lib/net46/System.Net.Sockets.dll",
4419+ "lib/xamarinios10/_._",
4420+ "lib/xamarinmac20/_._",
4421+ "lib/xamarintvos10/_._",
4422+ "lib/xamarinwatchos10/_._",
4423+ "ref/MonoAndroid10/_._",
4424+ "ref/MonoTouch10/_._",
4425+ "ref/net46/System.Net.Sockets.dll",
4426+ "ref/netstandard1.3/System.Net.Sockets.dll",
4427+ "ref/netstandard1.3/System.Net.Sockets.xml",
4428+ "ref/netstandard1.3/de/System.Net.Sockets.xml",
4429+ "ref/netstandard1.3/es/System.Net.Sockets.xml",
4430+ "ref/netstandard1.3/fr/System.Net.Sockets.xml",
4431+ "ref/netstandard1.3/it/System.Net.Sockets.xml",
4432+ "ref/netstandard1.3/ja/System.Net.Sockets.xml",
4433+ "ref/netstandard1.3/ko/System.Net.Sockets.xml",
4434+ "ref/netstandard1.3/ru/System.Net.Sockets.xml",
4435+ "ref/netstandard1.3/zh-hans/System.Net.Sockets.xml",
4436+ "ref/netstandard1.3/zh-hant/System.Net.Sockets.xml",
4437+ "ref/xamarinios10/_._",
4438+ "ref/xamarinmac20/_._",
4439+ "ref/xamarintvos10/_._",
4440+ "ref/xamarinwatchos10/_._"
4441+ ]
4442+ },
4443+ "System.Net.WebHeaderCollection/4.0.1": {
4444+ "sha512": "VWL7cEPrOoR7kfKQqZYpRMllMSdbx7iSCAwODSwRrD3wTC8j4eBp5j7kaxC7D1dg8m9uB/CoF6sAd1UkuSDXFQ==",
4445+ "type": "package",
4446+ "path": "System.Net.WebHeaderCollection/4.0.1",
4447+ "files": [
4448+ "System.Net.WebHeaderCollection.4.0.1.nupkg.sha512",
4449+ "System.Net.WebHeaderCollection.nuspec",
4450+ "ThirdPartyNotices.txt",
4451+ "dotnet_library_license.txt",
4452+ "lib/MonoAndroid10/_._",
4453+ "lib/MonoTouch10/_._",
4454+ "lib/net46/_._",
4455+ "lib/netstandard1.3/System.Net.WebHeaderCollection.dll",
4456+ "lib/xamarinios10/_._",
4457+ "lib/xamarinmac20/_._",
4458+ "lib/xamarintvos10/_._",
4459+ "lib/xamarinwatchos10/_._",
4460+ "ref/MonoAndroid10/_._",
4461+ "ref/MonoTouch10/_._",
4462+ "ref/net46/_._",
4463+ "ref/netstandard1.3/System.Net.WebHeaderCollection.dll",
4464+ "ref/netstandard1.3/System.Net.WebHeaderCollection.xml",
4465+ "ref/netstandard1.3/de/System.Net.WebHeaderCollection.xml",
4466+ "ref/netstandard1.3/es/System.Net.WebHeaderCollection.xml",
4467+ "ref/netstandard1.3/fr/System.Net.WebHeaderCollection.xml",
4468+ "ref/netstandard1.3/it/System.Net.WebHeaderCollection.xml",
4469+ "ref/netstandard1.3/ja/System.Net.WebHeaderCollection.xml",
4470+ "ref/netstandard1.3/ko/System.Net.WebHeaderCollection.xml",
4471+ "ref/netstandard1.3/ru/System.Net.WebHeaderCollection.xml",
4472+ "ref/netstandard1.3/zh-hans/System.Net.WebHeaderCollection.xml",
4473+ "ref/netstandard1.3/zh-hant/System.Net.WebHeaderCollection.xml",
4474+ "ref/xamarinios10/_._",
4475+ "ref/xamarinmac20/_._",
4476+ "ref/xamarintvos10/_._",
4477+ "ref/xamarinwatchos10/_._"
4478+ ]
4479+ },
4480+ "System.Numerics.Vectors/4.1.1": {
4481+ "sha512": "PT1LXaeoOxy6VQi1+lfLpVHlVqSjJsYf2t8iWX49sHUkYUvFwvhIikG02vhbPRyn+oGSxOdR8OjutIO3UzJAhQ==",
4482+ "type": "package",
4483+ "path": "System.Numerics.Vectors/4.1.1",
4484+ "files": [
4485+ "System.Numerics.Vectors.4.1.1.nupkg.sha512",
4486+ "System.Numerics.Vectors.nuspec",
4487+ "ThirdPartyNotices.txt",
4488+ "dotnet_library_license.txt",
4489+ "lib/MonoAndroid10/_._",
4490+ "lib/MonoTouch10/_._",
4491+ "lib/net46/System.Numerics.Vectors.dll",
4492+ "lib/net46/System.Numerics.Vectors.xml",
4493+ "lib/netstandard1.0/System.Numerics.Vectors.dll",
4494+ "lib/netstandard1.0/System.Numerics.Vectors.xml",
4495+ "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll",
4496+ "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml",
4497+ "lib/xamarinios10/_._",
4498+ "lib/xamarinmac20/_._",
4499+ "lib/xamarintvos10/_._",
4500+ "lib/xamarinwatchos10/_._",
4501+ "ref/MonoAndroid10/_._",
4502+ "ref/MonoTouch10/_._",
4503+ "ref/net46/System.Numerics.Vectors.dll",
4504+ "ref/net46/System.Numerics.Vectors.xml",
4505+ "ref/netstandard1.0/System.Numerics.Vectors.dll",
4506+ "ref/netstandard1.0/System.Numerics.Vectors.xml",
4507+ "ref/xamarinios10/_._",
4508+ "ref/xamarinmac20/_._",
4509+ "ref/xamarintvos10/_._",
4510+ "ref/xamarinwatchos10/_._"
4511+ ]
4512+ },
4513+ "System.ObjectModel/4.0.12": {
4514+ "sha512": "KIgxKSkPPA1dvqK2fyO0Pyktc7aYDRdRsVWtkJE9OaHov6hZKq9UaARTmiEJdQxOIb4znG31rYroTIGU/gGHjw==",
4515+ "type": "package",
4516+ "path": "System.ObjectModel/4.0.12",
4517+ "files": [
4518+ "System.ObjectModel.4.0.12.nupkg.sha512",
4519+ "System.ObjectModel.nuspec",
4520+ "ThirdPartyNotices.txt",
4521+ "dotnet_library_license.txt",
4522+ "lib/MonoAndroid10/_._",
4523+ "lib/MonoTouch10/_._",
4524+ "lib/net45/_._",
4525+ "lib/netcore50/System.ObjectModel.dll",
4526+ "lib/netstandard1.3/System.ObjectModel.dll",
4527+ "lib/portable-net45+win8+wp8+wpa81/_._",
4528+ "lib/win8/_._",
4529+ "lib/wp80/_._",
4530+ "lib/wpa81/_._",
4531+ "lib/xamarinios10/_._",
4532+ "lib/xamarinmac20/_._",
4533+ "lib/xamarintvos10/_._",
4534+ "lib/xamarinwatchos10/_._",
4535+ "ref/MonoAndroid10/_._",
4536+ "ref/MonoTouch10/_._",
4537+ "ref/net45/_._",
4538+ "ref/netcore50/System.ObjectModel.dll",
4539+ "ref/netcore50/System.ObjectModel.xml",
4540+ "ref/netcore50/de/System.ObjectModel.xml",
4541+ "ref/netcore50/es/System.ObjectModel.xml",
4542+ "ref/netcore50/fr/System.ObjectModel.xml",
4543+ "ref/netcore50/it/System.ObjectModel.xml",
4544+ "ref/netcore50/ja/System.ObjectModel.xml",
4545+ "ref/netcore50/ko/System.ObjectModel.xml",
4546+ "ref/netcore50/ru/System.ObjectModel.xml",
4547+ "ref/netcore50/zh-hans/System.ObjectModel.xml",
4548+ "ref/netcore50/zh-hant/System.ObjectModel.xml",
4549+ "ref/netstandard1.0/System.ObjectModel.dll",
4550+ "ref/netstandard1.0/System.ObjectModel.xml",
4551+ "ref/netstandard1.0/de/System.ObjectModel.xml",
4552+ "ref/netstandard1.0/es/System.ObjectModel.xml",
4553+ "ref/netstandard1.0/fr/System.ObjectModel.xml",
4554+ "ref/netstandard1.0/it/System.ObjectModel.xml",
4555+ "ref/netstandard1.0/ja/System.ObjectModel.xml",
4556+ "ref/netstandard1.0/ko/System.ObjectModel.xml",
4557+ "ref/netstandard1.0/ru/System.ObjectModel.xml",
4558+ "ref/netstandard1.0/zh-hans/System.ObjectModel.xml",
4559+ "ref/netstandard1.0/zh-hant/System.ObjectModel.xml",
4560+ "ref/netstandard1.3/System.ObjectModel.dll",
4561+ "ref/netstandard1.3/System.ObjectModel.xml",
4562+ "ref/netstandard1.3/de/System.ObjectModel.xml",
4563+ "ref/netstandard1.3/es/System.ObjectModel.xml",
4564+ "ref/netstandard1.3/fr/System.ObjectModel.xml",
4565+ "ref/netstandard1.3/it/System.ObjectModel.xml",
4566+ "ref/netstandard1.3/ja/System.ObjectModel.xml",
4567+ "ref/netstandard1.3/ko/System.ObjectModel.xml",
4568+ "ref/netstandard1.3/ru/System.ObjectModel.xml",
4569+ "ref/netstandard1.3/zh-hans/System.ObjectModel.xml",
4570+ "ref/netstandard1.3/zh-hant/System.ObjectModel.xml",
4571+ "ref/portable-net45+win8+wp8+wpa81/_._",
4572+ "ref/win8/_._",
4573+ "ref/wp80/_._",
4574+ "ref/wpa81/_._",
4575+ "ref/xamarinios10/_._",
4576+ "ref/xamarinmac20/_._",
4577+ "ref/xamarintvos10/_._",
4578+ "ref/xamarinwatchos10/_._"
4579+ ]
4580+ },
4581+ "System.Reflection/4.1.0": {
4582+ "sha512": "FFKGlU3SOEK/iuO6Zx424OPXN+Siu6eDoVhDtAoSEbeglWmpxSykqg24Ul0+aXYT6xZIeZVxmESJwjB9OL9t2g==",
4583+ "type": "package",
4584+ "path": "System.Reflection/4.1.0",
4585+ "files": [
4586+ "System.Reflection.4.1.0.nupkg.sha512",
4587+ "System.Reflection.nuspec",
4588+ "ThirdPartyNotices.txt",
4589+ "dotnet_library_license.txt",
4590+ "lib/MonoAndroid10/_._",
4591+ "lib/MonoTouch10/_._",
4592+ "lib/net45/_._",
4593+ "lib/net462/System.Reflection.dll",
4594+ "lib/portable-net45+win8+wp8+wpa81/_._",
4595+ "lib/win8/_._",
4596+ "lib/wp80/_._",
4597+ "lib/wpa81/_._",
4598+ "lib/xamarinios10/_._",
4599+ "lib/xamarinmac20/_._",
4600+ "lib/xamarintvos10/_._",
4601+ "lib/xamarinwatchos10/_._",
4602+ "ref/MonoAndroid10/_._",
4603+ "ref/MonoTouch10/_._",
4604+ "ref/net45/_._",
4605+ "ref/net462/System.Reflection.dll",
4606+ "ref/netcore50/System.Reflection.dll",
4607+ "ref/netcore50/System.Reflection.xml",
4608+ "ref/netcore50/de/System.Reflection.xml",
4609+ "ref/netcore50/es/System.Reflection.xml",
4610+ "ref/netcore50/fr/System.Reflection.xml",
4611+ "ref/netcore50/it/System.Reflection.xml",
4612+ "ref/netcore50/ja/System.Reflection.xml",
4613+ "ref/netcore50/ko/System.Reflection.xml",
4614+ "ref/netcore50/ru/System.Reflection.xml",
4615+ "ref/netcore50/zh-hans/System.Reflection.xml",
4616+ "ref/netcore50/zh-hant/System.Reflection.xml",
4617+ "ref/netstandard1.0/System.Reflection.dll",
4618+ "ref/netstandard1.0/System.Reflection.xml",
4619+ "ref/netstandard1.0/de/System.Reflection.xml",
4620+ "ref/netstandard1.0/es/System.Reflection.xml",
4621+ "ref/netstandard1.0/fr/System.Reflection.xml",
4622+ "ref/netstandard1.0/it/System.Reflection.xml",
4623+ "ref/netstandard1.0/ja/System.Reflection.xml",
4624+ "ref/netstandard1.0/ko/System.Reflection.xml",
4625+ "ref/netstandard1.0/ru/System.Reflection.xml",
4626+ "ref/netstandard1.0/zh-hans/System.Reflection.xml",
4627+ "ref/netstandard1.0/zh-hant/System.Reflection.xml",
4628+ "ref/netstandard1.3/System.Reflection.dll",
4629+ "ref/netstandard1.3/System.Reflection.xml",
4630+ "ref/netstandard1.3/de/System.Reflection.xml",
4631+ "ref/netstandard1.3/es/System.Reflection.xml",
4632+ "ref/netstandard1.3/fr/System.Reflection.xml",
4633+ "ref/netstandard1.3/it/System.Reflection.xml",
4634+ "ref/netstandard1.3/ja/System.Reflection.xml",
4635+ "ref/netstandard1.3/ko/System.Reflection.xml",
4636+ "ref/netstandard1.3/ru/System.Reflection.xml",
4637+ "ref/netstandard1.3/zh-hans/System.Reflection.xml",
4638+ "ref/netstandard1.3/zh-hant/System.Reflection.xml",
4639+ "ref/netstandard1.5/System.Reflection.dll",
4640+ "ref/netstandard1.5/System.Reflection.xml",
4641+ "ref/netstandard1.5/de/System.Reflection.xml",
4642+ "ref/netstandard1.5/es/System.Reflection.xml",
4643+ "ref/netstandard1.5/fr/System.Reflection.xml",
4644+ "ref/netstandard1.5/it/System.Reflection.xml",
4645+ "ref/netstandard1.5/ja/System.Reflection.xml",
4646+ "ref/netstandard1.5/ko/System.Reflection.xml",
4647+ "ref/netstandard1.5/ru/System.Reflection.xml",
4648+ "ref/netstandard1.5/zh-hans/System.Reflection.xml",
4649+ "ref/netstandard1.5/zh-hant/System.Reflection.xml",
4650+ "ref/portable-net45+win8+wp8+wpa81/_._",
4651+ "ref/win8/_._",
4652+ "ref/wp80/_._",
4653+ "ref/wpa81/_._",
4654+ "ref/xamarinios10/_._",
4655+ "ref/xamarinmac20/_._",
4656+ "ref/xamarintvos10/_._",
4657+ "ref/xamarinwatchos10/_._"
4658+ ]
4659+ },
4660+ "System.Reflection.DispatchProxy/4.0.1": {
4661+ "sha512": "O81cWVlqW0zOMrl/JHcgFWGUCDaOU9NwOIPYqnxL/pd8RjymYpwfYKsg2+SB5g9UdiIZLR3m6FEDya7iYGCdRg==",
4662+ "type": "package",
4663+ "path": "System.Reflection.DispatchProxy/4.0.1",
4664+ "files": [
4665+ "System.Reflection.DispatchProxy.4.0.1.nupkg.sha512",
4666+ "System.Reflection.DispatchProxy.nuspec",
4667+ "ThirdPartyNotices.txt",
4668+ "dotnet_library_license.txt",
4669+ "lib/MonoAndroid10/_._",
4670+ "lib/MonoTouch10/_._",
4671+ "lib/netstandard1.3/System.Reflection.DispatchProxy.dll",
4672+ "lib/xamarinios10/_._",
4673+ "lib/xamarinmac20/_._",
4674+ "lib/xamarintvos10/_._",
4675+ "lib/xamarinwatchos10/_._",
4676+ "ref/MonoAndroid10/_._",
4677+ "ref/MonoTouch10/_._",
4678+ "ref/netstandard1.3/System.Reflection.DispatchProxy.dll",
4679+ "ref/netstandard1.3/System.Reflection.DispatchProxy.xml",
4680+ "ref/netstandard1.3/de/System.Reflection.DispatchProxy.xml",
4681+ "ref/netstandard1.3/es/System.Reflection.DispatchProxy.xml",
4682+ "ref/netstandard1.3/fr/System.Reflection.DispatchProxy.xml",
4683+ "ref/netstandard1.3/it/System.Reflection.DispatchProxy.xml",
4684+ "ref/netstandard1.3/ja/System.Reflection.DispatchProxy.xml",
4685+ "ref/netstandard1.3/ko/System.Reflection.DispatchProxy.xml",
4686+ "ref/netstandard1.3/ru/System.Reflection.DispatchProxy.xml",
4687+ "ref/netstandard1.3/zh-hans/System.Reflection.DispatchProxy.xml",
4688+ "ref/netstandard1.3/zh-hant/System.Reflection.DispatchProxy.xml",
4689+ "ref/xamarinios10/_._",
4690+ "ref/xamarinmac20/_._",
4691+ "ref/xamarintvos10/_._",
4692+ "ref/xamarinwatchos10/_._",
4693+ "runtimes/aot/lib/netcore50/System.Reflection.DispatchProxy.dll"
4694+ ]
4695+ },
4696+ "System.Reflection.Emit/4.0.1": {
4697+ "sha512": "N5sMd/U2YE6RsSDLJyGLwWQfW3dKw6dDA+PpsBuNAK0zfx6HaR6NS2hLVGUDLFPXaJBC/2I2unrSMF5H8OwGZA==",
4698+ "type": "package",
4699+ "path": "System.Reflection.Emit/4.0.1",
4700+ "files": [
4701+ "System.Reflection.Emit.4.0.1.nupkg.sha512",
4702+ "System.Reflection.Emit.nuspec",
4703+ "ThirdPartyNotices.txt",
4704+ "dotnet_library_license.txt",
4705+ "lib/MonoAndroid10/_._",
4706+ "lib/net45/_._",
4707+ "lib/netcore50/System.Reflection.Emit.dll",
4708+ "lib/netstandard1.3/System.Reflection.Emit.dll",
4709+ "lib/xamarinmac20/_._",
4710+ "ref/MonoAndroid10/_._",
4711+ "ref/net45/_._",
4712+ "ref/netstandard1.1/System.Reflection.Emit.dll",
4713+ "ref/netstandard1.1/System.Reflection.Emit.xml",
4714+ "ref/netstandard1.1/de/System.Reflection.Emit.xml",
4715+ "ref/netstandard1.1/es/System.Reflection.Emit.xml",
4716+ "ref/netstandard1.1/fr/System.Reflection.Emit.xml",
4717+ "ref/netstandard1.1/it/System.Reflection.Emit.xml",
4718+ "ref/netstandard1.1/ja/System.Reflection.Emit.xml",
4719+ "ref/netstandard1.1/ko/System.Reflection.Emit.xml",
4720+ "ref/netstandard1.1/ru/System.Reflection.Emit.xml",
4721+ "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml",
4722+ "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml",
4723+ "ref/xamarinmac20/_._"
4724+ ]
4725+ },
4726+ "System.Reflection.Emit.ILGeneration/4.0.1": {
4727+ "sha512": "2lEx073cw4oK6yrgCGzunJLChfv4Up0d7Jf0jYi4801n5Ele0xCBq80BUYnOnanAUesnQ7tr7hOy7Erjodm91w==",
4728+ "type": "package",
4729+ "path": "System.Reflection.Emit.ILGeneration/4.0.1",
4730+ "files": [
4731+ "System.Reflection.Emit.ILGeneration.4.0.1.nupkg.sha512",
4732+ "System.Reflection.Emit.ILGeneration.nuspec",
4733+ "ThirdPartyNotices.txt",
4734+ "dotnet_library_license.txt",
4735+ "lib/net45/_._",
4736+ "lib/netcore50/System.Reflection.Emit.ILGeneration.dll",
4737+ "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll",
4738+ "lib/portable-net45+wp8/_._",
4739+ "lib/wp80/_._",
4740+ "ref/net45/_._",
4741+ "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll",
4742+ "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml",
4743+ "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml",
4744+ "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml",
4745+ "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml",
4746+ "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml",
4747+ "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml",
4748+ "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml",
4749+ "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml",
4750+ "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml",
4751+ "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml",
4752+ "ref/portable-net45+wp8/_._",
4753+ "ref/wp80/_._",
4754+ "runtimes/aot/lib/netcore50/_._"
4755+ ]
4756+ },
4757+ "System.Reflection.Emit.Lightweight/4.0.1": {
4758+ "sha512": "VAzJsSMNm9zzvE9nPI2jYIxME/E7EgTXAebcL61s0l5KSzvjNQLZBx6FDpdzGo0OWYwm95Z7/WUAQc8Fvv9qXw==",
4759+ "type": "package",
4760+ "path": "System.Reflection.Emit.Lightweight/4.0.1",
4761+ "files": [
4762+ "System.Reflection.Emit.Lightweight.4.0.1.nupkg.sha512",
4763+ "System.Reflection.Emit.Lightweight.nuspec",
4764+ "ThirdPartyNotices.txt",
4765+ "dotnet_library_license.txt",
4766+ "lib/net45/_._",
4767+ "lib/netcore50/System.Reflection.Emit.Lightweight.dll",
4768+ "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll",
4769+ "lib/portable-net45+wp8/_._",
4770+ "lib/wp80/_._",
4771+ "ref/net45/_._",
4772+ "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll",
4773+ "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml",
4774+ "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml",
4775+ "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml",
4776+ "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml",
4777+ "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml",
4778+ "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml",
4779+ "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml",
4780+ "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml",
4781+ "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml",
4782+ "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml",
4783+ "ref/portable-net45+wp8/_._",
4784+ "ref/wp80/_._",
4785+ "runtimes/aot/lib/netcore50/_._"
4786+ ]
4787+ },
4788+ "System.Reflection.Extensions/4.0.1": {
4789+ "sha512": "7/jRI76NgXghZ7ECDBAJeEu0vY1SXf3hQv9uJXYWsZIO/4Q+uZ7V4geUXaVhwJBvIKYHddbnaiBan6K+1F2o4g==",
4790+ "type": "package",
4791+ "path": "System.Reflection.Extensions/4.0.1",
4792+ "files": [
4793+ "System.Reflection.Extensions.4.0.1.nupkg.sha512",
4794+ "System.Reflection.Extensions.nuspec",
4795+ "ThirdPartyNotices.txt",
4796+ "dotnet_library_license.txt",
4797+ "lib/MonoAndroid10/_._",
4798+ "lib/MonoTouch10/_._",
4799+ "lib/net45/_._",
4800+ "lib/portable-net45+win8+wp8+wpa81/_._",
4801+ "lib/win8/_._",
4802+ "lib/wp80/_._",
4803+ "lib/wpa81/_._",
4804+ "lib/xamarinios10/_._",
4805+ "lib/xamarinmac20/_._",
4806+ "lib/xamarintvos10/_._",
4807+ "lib/xamarinwatchos10/_._",
4808+ "ref/MonoAndroid10/_._",
4809+ "ref/MonoTouch10/_._",
4810+ "ref/net45/_._",
4811+ "ref/netcore50/System.Reflection.Extensions.dll",
4812+ "ref/netcore50/System.Reflection.Extensions.xml",
4813+ "ref/netcore50/de/System.Reflection.Extensions.xml",
4814+ "ref/netcore50/es/System.Reflection.Extensions.xml",
4815+ "ref/netcore50/fr/System.Reflection.Extensions.xml",
4816+ "ref/netcore50/it/System.Reflection.Extensions.xml",
4817+ "ref/netcore50/ja/System.Reflection.Extensions.xml",
4818+ "ref/netcore50/ko/System.Reflection.Extensions.xml",
4819+ "ref/netcore50/ru/System.Reflection.Extensions.xml",
4820+ "ref/netcore50/zh-hans/System.Reflection.Extensions.xml",
4821+ "ref/netcore50/zh-hant/System.Reflection.Extensions.xml",
4822+ "ref/netstandard1.0/System.Reflection.Extensions.dll",
4823+ "ref/netstandard1.0/System.Reflection.Extensions.xml",
4824+ "ref/netstandard1.0/de/System.Reflection.Extensions.xml",
4825+ "ref/netstandard1.0/es/System.Reflection.Extensions.xml",
4826+ "ref/netstandard1.0/fr/System.Reflection.Extensions.xml",
4827+ "ref/netstandard1.0/it/System.Reflection.Extensions.xml",
4828+ "ref/netstandard1.0/ja/System.Reflection.Extensions.xml",
4829+ "ref/netstandard1.0/ko/System.Reflection.Extensions.xml",
4830+ "ref/netstandard1.0/ru/System.Reflection.Extensions.xml",
4831+ "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml",
4832+ "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml",
4833+ "ref/portable-net45+win8+wp8+wpa81/_._",
4834+ "ref/win8/_._",
4835+ "ref/wp80/_._",
4836+ "ref/wpa81/_._",
4837+ "ref/xamarinios10/_._",
4838+ "ref/xamarinmac20/_._",
4839+ "ref/xamarintvos10/_._",
4840+ "ref/xamarinwatchos10/_._"
4841+ ]
4842+ },
4843+ "System.Reflection.Metadata/1.3.0": {
4844+ "sha512": "S8fpHDmJ2hcKQ/3K4KUyAmviLsFKAK8iEERQVYP7KJw5p9c945nxe5p+qePjvKEye0eZX1jcWRaMArpP8qLoTg==",
4845+ "type": "package",
4846+ "path": "System.Reflection.Metadata/1.3.0",
4847+ "files": [
4848+ "System.Reflection.Metadata.1.3.0.nupkg.sha512",
4849+ "System.Reflection.Metadata.nuspec",
4850+ "ThirdPartyNotices.txt",
4851+ "dotnet_library_license.txt",
4852+ "lib/netstandard1.1/System.Reflection.Metadata.dll",
4853+ "lib/netstandard1.1/System.Reflection.Metadata.xml",
4854+ "lib/portable-net45+win8/System.Reflection.Metadata.dll",
4855+ "lib/portable-net45+win8/System.Reflection.Metadata.xml"
4856+ ]
4857+ },
4858+ "System.Reflection.Primitives/4.0.1": {
4859+ "sha512": "RHbqVEi34/PglMEDY6K5G2CAiH+yqbDsIylzXbXLVJAklQ33CMb51Ip7grLfntTnhjg9zep3YeylTrGYxZDPfQ==",
4860+ "type": "package",
4861+ "path": "System.Reflection.Primitives/4.0.1",
4862+ "files": [
4863+ "System.Reflection.Primitives.4.0.1.nupkg.sha512",
4864+ "System.Reflection.Primitives.nuspec",
4865+ "ThirdPartyNotices.txt",
4866+ "dotnet_library_license.txt",
4867+ "lib/MonoAndroid10/_._",
4868+ "lib/MonoTouch10/_._",
4869+ "lib/net45/_._",
4870+ "lib/portable-net45+win8+wp8+wpa81/_._",
4871+ "lib/win8/_._",
4872+ "lib/wp80/_._",
4873+ "lib/wpa81/_._",
4874+ "lib/xamarinios10/_._",
4875+ "lib/xamarinmac20/_._",
4876+ "lib/xamarintvos10/_._",
4877+ "lib/xamarinwatchos10/_._",
4878+ "ref/MonoAndroid10/_._",
4879+ "ref/MonoTouch10/_._",
4880+ "ref/net45/_._",
4881+ "ref/netcore50/System.Reflection.Primitives.dll",
4882+ "ref/netcore50/System.Reflection.Primitives.xml",
4883+ "ref/netcore50/de/System.Reflection.Primitives.xml",
4884+ "ref/netcore50/es/System.Reflection.Primitives.xml",
4885+ "ref/netcore50/fr/System.Reflection.Primitives.xml",
4886+ "ref/netcore50/it/System.Reflection.Primitives.xml",
4887+ "ref/netcore50/ja/System.Reflection.Primitives.xml",
4888+ "ref/netcore50/ko/System.Reflection.Primitives.xml",
4889+ "ref/netcore50/ru/System.Reflection.Primitives.xml",
4890+ "ref/netcore50/zh-hans/System.Reflection.Primitives.xml",
4891+ "ref/netcore50/zh-hant/System.Reflection.Primitives.xml",
4892+ "ref/netstandard1.0/System.Reflection.Primitives.dll",
4893+ "ref/netstandard1.0/System.Reflection.Primitives.xml",
4894+ "ref/netstandard1.0/de/System.Reflection.Primitives.xml",
4895+ "ref/netstandard1.0/es/System.Reflection.Primitives.xml",
4896+ "ref/netstandard1.0/fr/System.Reflection.Primitives.xml",
4897+ "ref/netstandard1.0/it/System.Reflection.Primitives.xml",
4898+ "ref/netstandard1.0/ja/System.Reflection.Primitives.xml",
4899+ "ref/netstandard1.0/ko/System.Reflection.Primitives.xml",
4900+ "ref/netstandard1.0/ru/System.Reflection.Primitives.xml",
4901+ "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml",
4902+ "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml",
4903+ "ref/portable-net45+win8+wp8+wpa81/_._",
4904+ "ref/win8/_._",
4905+ "ref/wp80/_._",
4906+ "ref/wpa81/_._",
4907+ "ref/xamarinios10/_._",
4908+ "ref/xamarinmac20/_._",
4909+ "ref/xamarintvos10/_._",
4910+ "ref/xamarinwatchos10/_._"
4911+ ]
4912+ },
4913+ "System.Reflection.TypeExtensions/4.1.0": {
4914+ "sha512": "xcxE/0GefeVYwji0R3kKeJa4NoSPQ/nehbsE95FIfsBo7REzTf5F7Qe64wzjGQ1ynITB/aq+A3wNGk0COmNwhg==",
4915+ "type": "package",
4916+ "path": "System.Reflection.TypeExtensions/4.1.0",
4917+ "files": [
4918+ "System.Reflection.TypeExtensions.4.1.0.nupkg.sha512",
4919+ "System.Reflection.TypeExtensions.nuspec",
4920+ "ThirdPartyNotices.txt",
4921+ "dotnet_library_license.txt",
4922+ "lib/MonoAndroid10/_._",
4923+ "lib/MonoTouch10/_._",
4924+ "lib/net46/System.Reflection.TypeExtensions.dll",
4925+ "lib/net462/System.Reflection.TypeExtensions.dll",
4926+ "lib/netcore50/System.Reflection.TypeExtensions.dll",
4927+ "lib/netstandard1.5/System.Reflection.TypeExtensions.dll",
4928+ "lib/xamarinios10/_._",
4929+ "lib/xamarinmac20/_._",
4930+ "lib/xamarintvos10/_._",
4931+ "lib/xamarinwatchos10/_._",
4932+ "ref/MonoAndroid10/_._",
4933+ "ref/MonoTouch10/_._",
4934+ "ref/net46/System.Reflection.TypeExtensions.dll",
4935+ "ref/net462/System.Reflection.TypeExtensions.dll",
4936+ "ref/netstandard1.3/System.Reflection.TypeExtensions.dll",
4937+ "ref/netstandard1.3/System.Reflection.TypeExtensions.xml",
4938+ "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml",
4939+ "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml",
4940+ "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml",
4941+ "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml",
4942+ "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml",
4943+ "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml",
4944+ "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml",
4945+ "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml",
4946+ "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml",
4947+ "ref/netstandard1.5/System.Reflection.TypeExtensions.dll",
4948+ "ref/netstandard1.5/System.Reflection.TypeExtensions.xml",
4949+ "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml",
4950+ "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml",
4951+ "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml",
4952+ "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml",
4953+ "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml",
4954+ "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml",
4955+ "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml",
4956+ "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml",
4957+ "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml",
4958+ "ref/xamarinios10/_._",
4959+ "ref/xamarinmac20/_._",
4960+ "ref/xamarintvos10/_._",
4961+ "ref/xamarinwatchos10/_._",
4962+ "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll"
4963+ ]
4964+ },
4965+ "System.Resources.Reader/4.0.0": {
4966+ "sha512": "wEcXzSRd9Up0I0g8bFnq9ujB9RBi8ChqbUCwfpkWoNCE87ykVKgQ3UgFoow0DRR1qs3JoMDNcwFCZk/2j9GweA==",
4967+ "type": "package",
4968+ "path": "System.Resources.Reader/4.0.0",
4969+ "files": [
4970+ "System.Resources.Reader.4.0.0.nupkg.sha512",
4971+ "System.Resources.Reader.nuspec",
4972+ "ThirdPartyNotices.txt",
4973+ "dotnet_library_license.txt",
4974+ "lib/netstandard1.0/System.Resources.Reader.dll"
4975+ ]
4976+ },
4977+ "System.Resources.ResourceManager/4.0.1": {
4978+ "sha512": "bt5OMnI0dENfXTKpRxGoJiINymmIz77xDlsZvj/Wqe1GcjmtoArvXd/nazztiqXm3J7Gx5RMo0m51I3TLtQENQ==",
4979+ "type": "package",
4980+ "path": "System.Resources.ResourceManager/4.0.1",
4981+ "files": [
4982+ "System.Resources.ResourceManager.4.0.1.nupkg.sha512",
4983+ "System.Resources.ResourceManager.nuspec",
4984+ "ThirdPartyNotices.txt",
4985+ "dotnet_library_license.txt",
4986+ "lib/MonoAndroid10/_._",
4987+ "lib/MonoTouch10/_._",
4988+ "lib/net45/_._",
4989+ "lib/portable-net45+win8+wp8+wpa81/_._",
4990+ "lib/win8/_._",
4991+ "lib/wp80/_._",
4992+ "lib/wpa81/_._",
4993+ "lib/xamarinios10/_._",
4994+ "lib/xamarinmac20/_._",
4995+ "lib/xamarintvos10/_._",
4996+ "lib/xamarinwatchos10/_._",
4997+ "ref/MonoAndroid10/_._",
4998+ "ref/MonoTouch10/_._",
4999+ "ref/net45/_._",
5000+ "ref/netcore50/System.Resources.ResourceManager.dll",
5001+ "ref/netcore50/System.Resources.ResourceManager.xml",
5002+ "ref/netcore50/de/System.Resources.ResourceManager.xml",
5003+ "ref/netcore50/es/System.Resources.ResourceManager.xml",
5004+ "ref/netcore50/fr/System.Resources.ResourceManager.xml",
5005+ "ref/netcore50/it/System.Resources.ResourceManager.xml",
5006+ "ref/netcore50/ja/System.Resources.ResourceManager.xml",
5007+ "ref/netcore50/ko/System.Resources.ResourceManager.xml",
5008+ "ref/netcore50/ru/System.Resources.ResourceManager.xml",
5009+ "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml",
5010+ "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml",
5011+ "ref/netstandard1.0/System.Resources.ResourceManager.dll",
5012+ "ref/netstandard1.0/System.Resources.ResourceManager.xml",
5013+ "ref/netstandard1.0/de/System.Resources.ResourceManager.xml",
5014+ "ref/netstandard1.0/es/System.Resources.ResourceManager.xml",
5015+ "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml",
5016+ "ref/netstandard1.0/it/System.Resources.ResourceManager.xml",
5017+ "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml",
5018+ "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml",
5019+ "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml",
5020+ "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml",
5021+ "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml",
5022+ "ref/portable-net45+win8+wp8+wpa81/_._",
5023+ "ref/win8/_._",
5024+ "ref/wp80/_._",
5025+ "ref/wpa81/_._",
5026+ "ref/xamarinios10/_._",
5027+ "ref/xamarinmac20/_._",
5028+ "ref/xamarintvos10/_._",
5029+ "ref/xamarinwatchos10/_._"
5030+ ]
5031+ },
5032+ "System.Runtime/4.1.0": {
5033+ "sha512": "AOI1YSwpYf4M2z/sZl/26HdH5KpygjfR0vRvTJZjgHTjRxucG7Cr8b3Ili69j0s2XUf2OnZitbIGNJUMyFVpqQ==",
5034+ "type": "package",
5035+ "path": "System.Runtime/4.1.0",
5036+ "files": [
5037+ "System.Runtime.4.1.0.nupkg.sha512",
5038+ "System.Runtime.nuspec",
5039+ "ThirdPartyNotices.txt",
5040+ "dotnet_library_license.txt",
5041+ "lib/MonoAndroid10/_._",
5042+ "lib/MonoTouch10/_._",
5043+ "lib/net45/_._",
5044+ "lib/net462/System.Runtime.dll",
5045+ "lib/portable-net45+win8+wp80+wpa81/_._",
5046+ "lib/win8/_._",
5047+ "lib/wp80/_._",
5048+ "lib/wpa81/_._",
5049+ "lib/xamarinios10/_._",
5050+ "lib/xamarinmac20/_._",
5051+ "lib/xamarintvos10/_._",
5052+ "lib/xamarinwatchos10/_._",
5053+ "ref/MonoAndroid10/_._",
5054+ "ref/MonoTouch10/_._",
5055+ "ref/net45/_._",
5056+ "ref/net462/System.Runtime.dll",
5057+ "ref/netcore50/System.Runtime.dll",
5058+ "ref/netcore50/System.Runtime.xml",
5059+ "ref/netcore50/de/System.Runtime.xml",
5060+ "ref/netcore50/es/System.Runtime.xml",
5061+ "ref/netcore50/fr/System.Runtime.xml",
5062+ "ref/netcore50/it/System.Runtime.xml",
5063+ "ref/netcore50/ja/System.Runtime.xml",
5064+ "ref/netcore50/ko/System.Runtime.xml",
5065+ "ref/netcore50/ru/System.Runtime.xml",
5066+ "ref/netcore50/zh-hans/System.Runtime.xml",
5067+ "ref/netcore50/zh-hant/System.Runtime.xml",
5068+ "ref/netstandard1.0/System.Runtime.dll",
5069+ "ref/netstandard1.0/System.Runtime.xml",
5070+ "ref/netstandard1.0/de/System.Runtime.xml",
5071+ "ref/netstandard1.0/es/System.Runtime.xml",
5072+ "ref/netstandard1.0/fr/System.Runtime.xml",
5073+ "ref/netstandard1.0/it/System.Runtime.xml",
5074+ "ref/netstandard1.0/ja/System.Runtime.xml",
5075+ "ref/netstandard1.0/ko/System.Runtime.xml",
5076+ "ref/netstandard1.0/ru/System.Runtime.xml",
5077+ "ref/netstandard1.0/zh-hans/System.Runtime.xml",
5078+ "ref/netstandard1.0/zh-hant/System.Runtime.xml",
5079+ "ref/netstandard1.2/System.Runtime.dll",
5080+ "ref/netstandard1.2/System.Runtime.xml",
5081+ "ref/netstandard1.2/de/System.Runtime.xml",
5082+ "ref/netstandard1.2/es/System.Runtime.xml",
5083+ "ref/netstandard1.2/fr/System.Runtime.xml",
5084+ "ref/netstandard1.2/it/System.Runtime.xml",
5085+ "ref/netstandard1.2/ja/System.Runtime.xml",
5086+ "ref/netstandard1.2/ko/System.Runtime.xml",
5087+ "ref/netstandard1.2/ru/System.Runtime.xml",
5088+ "ref/netstandard1.2/zh-hans/System.Runtime.xml",
5089+ "ref/netstandard1.2/zh-hant/System.Runtime.xml",
5090+ "ref/netstandard1.3/System.Runtime.dll",
5091+ "ref/netstandard1.3/System.Runtime.xml",
5092+ "ref/netstandard1.3/de/System.Runtime.xml",
5093+ "ref/netstandard1.3/es/System.Runtime.xml",
5094+ "ref/netstandard1.3/fr/System.Runtime.xml",
5095+ "ref/netstandard1.3/it/System.Runtime.xml",
5096+ "ref/netstandard1.3/ja/System.Runtime.xml",
5097+ "ref/netstandard1.3/ko/System.Runtime.xml",
5098+ "ref/netstandard1.3/ru/System.Runtime.xml",
5099+ "ref/netstandard1.3/zh-hans/System.Runtime.xml",
5100+ "ref/netstandard1.3/zh-hant/System.Runtime.xml",
5101+ "ref/netstandard1.5/System.Runtime.dll",
5102+ "ref/netstandard1.5/System.Runtime.xml",
5103+ "ref/netstandard1.5/de/System.Runtime.xml",
5104+ "ref/netstandard1.5/es/System.Runtime.xml",
5105+ "ref/netstandard1.5/fr/System.Runtime.xml",
5106+ "ref/netstandard1.5/it/System.Runtime.xml",
5107+ "ref/netstandard1.5/ja/System.Runtime.xml",
5108+ "ref/netstandard1.5/ko/System.Runtime.xml",
5109+ "ref/netstandard1.5/ru/System.Runtime.xml",
5110+ "ref/netstandard1.5/zh-hans/System.Runtime.xml",
5111+ "ref/netstandard1.5/zh-hant/System.Runtime.xml",
5112+ "ref/portable-net45+win8+wp80+wpa81/_._",
5113+ "ref/win8/_._",
5114+ "ref/wp80/_._",
5115+ "ref/wpa81/_._",
5116+ "ref/xamarinios10/_._",
5117+ "ref/xamarinmac20/_._",
5118+ "ref/xamarintvos10/_._",
5119+ "ref/xamarinwatchos10/_._"
5120+ ]
5121+ },
5122+ "System.Runtime.Extensions/4.1.0": {
5123+ "sha512": "543BhQMyqyp353EiDkb7abmeme8H40shEjVdmbRz16WznSWHpzQVAWhIr/c327XwtoedYqgHJiLEtqc5RRyE7w==",
5124+ "type": "package",
5125+ "path": "System.Runtime.Extensions/4.1.0",
5126+ "files": [
5127+ "System.Runtime.Extensions.4.1.0.nupkg.sha512",
5128+ "System.Runtime.Extensions.nuspec",
5129+ "ThirdPartyNotices.txt",
5130+ "dotnet_library_license.txt",
5131+ "lib/MonoAndroid10/_._",
5132+ "lib/MonoTouch10/_._",
5133+ "lib/net45/_._",
5134+ "lib/net462/System.Runtime.Extensions.dll",
5135+ "lib/portable-net45+win8+wp8+wpa81/_._",
5136+ "lib/win8/_._",
5137+ "lib/wp80/_._",
5138+ "lib/wpa81/_._",
5139+ "lib/xamarinios10/_._",
5140+ "lib/xamarinmac20/_._",
5141+ "lib/xamarintvos10/_._",
5142+ "lib/xamarinwatchos10/_._",
5143+ "ref/MonoAndroid10/_._",
5144+ "ref/MonoTouch10/_._",
5145+ "ref/net45/_._",
5146+ "ref/net462/System.Runtime.Extensions.dll",
5147+ "ref/netcore50/System.Runtime.Extensions.dll",
5148+ "ref/netcore50/System.Runtime.Extensions.xml",
5149+ "ref/netcore50/de/System.Runtime.Extensions.xml",
5150+ "ref/netcore50/es/System.Runtime.Extensions.xml",
5151+ "ref/netcore50/fr/System.Runtime.Extensions.xml",
5152+ "ref/netcore50/it/System.Runtime.Extensions.xml",
5153+ "ref/netcore50/ja/System.Runtime.Extensions.xml",
5154+ "ref/netcore50/ko/System.Runtime.Extensions.xml",
5155+ "ref/netcore50/ru/System.Runtime.Extensions.xml",
5156+ "ref/netcore50/zh-hans/System.Runtime.Extensions.xml",
5157+ "ref/netcore50/zh-hant/System.Runtime.Extensions.xml",
5158+ "ref/netstandard1.0/System.Runtime.Extensions.dll",
5159+ "ref/netstandard1.0/System.Runtime.Extensions.xml",
5160+ "ref/netstandard1.0/de/System.Runtime.Extensions.xml",
5161+ "ref/netstandard1.0/es/System.Runtime.Extensions.xml",
5162+ "ref/netstandard1.0/fr/System.Runtime.Extensions.xml",
5163+ "ref/netstandard1.0/it/System.Runtime.Extensions.xml",
5164+ "ref/netstandard1.0/ja/System.Runtime.Extensions.xml",
5165+ "ref/netstandard1.0/ko/System.Runtime.Extensions.xml",
5166+ "ref/netstandard1.0/ru/System.Runtime.Extensions.xml",
5167+ "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml",
5168+ "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml",
5169+ "ref/netstandard1.3/System.Runtime.Extensions.dll",
5170+ "ref/netstandard1.3/System.Runtime.Extensions.xml",
5171+ "ref/netstandard1.3/de/System.Runtime.Extensions.xml",
5172+ "ref/netstandard1.3/es/System.Runtime.Extensions.xml",
5173+ "ref/netstandard1.3/fr/System.Runtime.Extensions.xml",
5174+ "ref/netstandard1.3/it/System.Runtime.Extensions.xml",
5175+ "ref/netstandard1.3/ja/System.Runtime.Extensions.xml",
5176+ "ref/netstandard1.3/ko/System.Runtime.Extensions.xml",
5177+ "ref/netstandard1.3/ru/System.Runtime.Extensions.xml",
5178+ "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml",
5179+ "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml",
5180+ "ref/netstandard1.5/System.Runtime.Extensions.dll",
5181+ "ref/netstandard1.5/System.Runtime.Extensions.xml",
5182+ "ref/netstandard1.5/de/System.Runtime.Extensions.xml",
5183+ "ref/netstandard1.5/es/System.Runtime.Extensions.xml",
5184+ "ref/netstandard1.5/fr/System.Runtime.Extensions.xml",
5185+ "ref/netstandard1.5/it/System.Runtime.Extensions.xml",
5186+ "ref/netstandard1.5/ja/System.Runtime.Extensions.xml",
5187+ "ref/netstandard1.5/ko/System.Runtime.Extensions.xml",
5188+ "ref/netstandard1.5/ru/System.Runtime.Extensions.xml",
5189+ "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml",
5190+ "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml",
5191+ "ref/portable-net45+win8+wp8+wpa81/_._",
5192+ "ref/win8/_._",
5193+ "ref/wp80/_._",
5194+ "ref/wpa81/_._",
5195+ "ref/xamarinios10/_._",
5196+ "ref/xamarinmac20/_._",
5197+ "ref/xamarintvos10/_._",
5198+ "ref/xamarinwatchos10/_._"
5199+ ]
5200+ },
5201+ "System.Runtime.Handles/4.0.1": {
5202+ "sha512": "RlFrTFpi/wWFUkiO+GAG8vaIes08tUzl8iU5Kok8/PQQtLEHn9+nF24xqClb6WM8HA4LulKVjAleu5qfk0GkjQ==",
5203+ "type": "package",
5204+ "path": "System.Runtime.Handles/4.0.1",
5205+ "files": [
5206+ "System.Runtime.Handles.4.0.1.nupkg.sha512",
5207+ "System.Runtime.Handles.nuspec",
5208+ "ThirdPartyNotices.txt",
5209+ "dotnet_library_license.txt",
5210+ "lib/MonoAndroid10/_._",
5211+ "lib/MonoTouch10/_._",
5212+ "lib/net46/_._",
5213+ "lib/xamarinios10/_._",
5214+ "lib/xamarinmac20/_._",
5215+ "lib/xamarintvos10/_._",
5216+ "lib/xamarinwatchos10/_._",
5217+ "ref/MonoAndroid10/_._",
5218+ "ref/MonoTouch10/_._",
5219+ "ref/net46/_._",
5220+ "ref/netstandard1.3/System.Runtime.Handles.dll",
5221+ "ref/netstandard1.3/System.Runtime.Handles.xml",
5222+ "ref/netstandard1.3/de/System.Runtime.Handles.xml",
5223+ "ref/netstandard1.3/es/System.Runtime.Handles.xml",
5224+ "ref/netstandard1.3/fr/System.Runtime.Handles.xml",
5225+ "ref/netstandard1.3/it/System.Runtime.Handles.xml",
5226+ "ref/netstandard1.3/ja/System.Runtime.Handles.xml",
5227+ "ref/netstandard1.3/ko/System.Runtime.Handles.xml",
5228+ "ref/netstandard1.3/ru/System.Runtime.Handles.xml",
5229+ "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml",
5230+ "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml",
5231+ "ref/xamarinios10/_._",
5232+ "ref/xamarinmac20/_._",
5233+ "ref/xamarintvos10/_._",
5234+ "ref/xamarinwatchos10/_._"
5235+ ]
5236+ },
5237+ "System.Runtime.InteropServices/4.1.0": {
5238+ "sha512": "66DSgKoK3eBQVu/RWw691cWYGR85bB4+Pad+pRnPMkL82X/chYUhM+sr+MddZhma51NmrBa8XYqTUTNO0m1GpQ==",
5239+ "type": "package",
5240+ "path": "System.Runtime.InteropServices/4.1.0",
5241+ "files": [
5242+ "System.Runtime.InteropServices.4.1.0.nupkg.sha512",
5243+ "System.Runtime.InteropServices.nuspec",
5244+ "ThirdPartyNotices.txt",
5245+ "dotnet_library_license.txt",
5246+ "lib/MonoAndroid10/_._",
5247+ "lib/MonoTouch10/_._",
5248+ "lib/net45/_._",
5249+ "lib/net462/System.Runtime.InteropServices.dll",
5250+ "lib/portable-net45+win8+wpa81/_._",
5251+ "lib/win8/_._",
5252+ "lib/wpa81/_._",
5253+ "lib/xamarinios10/_._",
5254+ "lib/xamarinmac20/_._",
5255+ "lib/xamarintvos10/_._",
5256+ "lib/xamarinwatchos10/_._",
5257+ "ref/MonoAndroid10/_._",
5258+ "ref/MonoTouch10/_._",
5259+ "ref/net45/_._",
5260+ "ref/net462/System.Runtime.InteropServices.dll",
5261+ "ref/netcore50/System.Runtime.InteropServices.dll",
5262+ "ref/netcore50/System.Runtime.InteropServices.xml",
5263+ "ref/netcore50/de/System.Runtime.InteropServices.xml",
5264+ "ref/netcore50/es/System.Runtime.InteropServices.xml",
5265+ "ref/netcore50/fr/System.Runtime.InteropServices.xml",
5266+ "ref/netcore50/it/System.Runtime.InteropServices.xml",
5267+ "ref/netcore50/ja/System.Runtime.InteropServices.xml",
5268+ "ref/netcore50/ko/System.Runtime.InteropServices.xml",
5269+ "ref/netcore50/ru/System.Runtime.InteropServices.xml",
5270+ "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml",
5271+ "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml",
5272+ "ref/netstandard1.1/System.Runtime.InteropServices.dll",
5273+ "ref/netstandard1.1/System.Runtime.InteropServices.xml",
5274+ "ref/netstandard1.1/de/System.Runtime.InteropServices.xml",
5275+ "ref/netstandard1.1/es/System.Runtime.InteropServices.xml",
5276+ "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml",
5277+ "ref/netstandard1.1/it/System.Runtime.InteropServices.xml",
5278+ "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml",
5279+ "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml",
5280+ "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml",
5281+ "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml",
5282+ "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml",
5283+ "ref/netstandard1.2/System.Runtime.InteropServices.dll",
5284+ "ref/netstandard1.2/System.Runtime.InteropServices.xml",
5285+ "ref/netstandard1.2/de/System.Runtime.InteropServices.xml",
5286+ "ref/netstandard1.2/es/System.Runtime.InteropServices.xml",
5287+ "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml",
5288+ "ref/netstandard1.2/it/System.Runtime.InteropServices.xml",
5289+ "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml",
5290+ "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml",
5291+ "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml",
5292+ "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml",
5293+ "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml",
5294+ "ref/netstandard1.3/System.Runtime.InteropServices.dll",
5295+ "ref/netstandard1.3/System.Runtime.InteropServices.xml",
5296+ "ref/netstandard1.3/de/System.Runtime.InteropServices.xml",
5297+ "ref/netstandard1.3/es/System.Runtime.InteropServices.xml",
5298+ "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml",
5299+ "ref/netstandard1.3/it/System.Runtime.InteropServices.xml",
5300+ "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml",
5301+ "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml",
5302+ "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml",
5303+ "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml",
5304+ "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml",
5305+ "ref/netstandard1.5/System.Runtime.InteropServices.dll",
5306+ "ref/netstandard1.5/System.Runtime.InteropServices.xml",
5307+ "ref/netstandard1.5/de/System.Runtime.InteropServices.xml",
5308+ "ref/netstandard1.5/es/System.Runtime.InteropServices.xml",
5309+ "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml",
5310+ "ref/netstandard1.5/it/System.Runtime.InteropServices.xml",
5311+ "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml",
5312+ "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml",
5313+ "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml",
5314+ "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml",
5315+ "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml",
5316+ "ref/portable-net45+win8+wpa81/_._",
5317+ "ref/win8/_._",
5318+ "ref/wpa81/_._",
5319+ "ref/xamarinios10/_._",
5320+ "ref/xamarinmac20/_._",
5321+ "ref/xamarintvos10/_._",
5322+ "ref/xamarinwatchos10/_._"
5323+ ]
5324+ },
5325+ "System.Runtime.InteropServices.RuntimeInformation/4.0.0": {
5326+ "sha512": "q/OiUBYq+ef78e5tAnLdJfLyuQIgNMA3TfvLrI+GLat17fIHstj4LSpAEAHuW5bCL0b4DIfw6I/u9JmdnetZSA==",
5327+ "type": "package",
5328+ "path": "System.Runtime.InteropServices.RuntimeInformation/4.0.0",
5329+ "files": [
5330+ "System.Runtime.InteropServices.RuntimeInformation.4.0.0.nupkg.sha512",
5331+ "System.Runtime.InteropServices.RuntimeInformation.nuspec",
5332+ "ThirdPartyNotices.txt",
5333+ "dotnet_library_license.txt",
5334+ "lib/MonoAndroid10/_._",
5335+ "lib/MonoTouch10/_._",
5336+ "lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
5337+ "lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll",
5338+ "lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll",
5339+ "lib/xamarinios10/_._",
5340+ "lib/xamarinmac20/_._",
5341+ "lib/xamarintvos10/_._",
5342+ "lib/xamarinwatchos10/_._",
5343+ "ref/MonoAndroid10/_._",
5344+ "ref/MonoTouch10/_._",
5345+ "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
5346+ "ref/xamarinios10/_._",
5347+ "ref/xamarinmac20/_._",
5348+ "ref/xamarintvos10/_._",
5349+ "ref/xamarinwatchos10/_._",
5350+ "runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
5351+ "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll",
5352+ "runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll",
5353+ "runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll",
5354+ "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll"
5355+ ]
5356+ },
5357+ "System.Runtime.Loader/4.0.0": {
5358+ "sha512": "GVDPw97lKyJrAsvej1IORrFlN6RsHsII0OzoZvUpWkF6AknRI9a1cLUAlzxp/d4rUHhGgK7Wapp7TbIy7Rp8TA==",
5359+ "type": "package",
5360+ "path": "System.Runtime.Loader/4.0.0",
5361+ "files": [
5362+ "System.Runtime.Loader.4.0.0.nupkg.sha512",
5363+ "System.Runtime.Loader.nuspec",
5364+ "ThirdPartyNotices.txt",
5365+ "dotnet_library_license.txt",
5366+ "lib/net462/_._",
5367+ "lib/netstandard1.5/System.Runtime.Loader.dll",
5368+ "ref/netstandard1.5/System.Runtime.Loader.dll",
5369+ "ref/netstandard1.5/System.Runtime.Loader.xml",
5370+ "ref/netstandard1.5/de/System.Runtime.Loader.xml",
5371+ "ref/netstandard1.5/es/System.Runtime.Loader.xml",
5372+ "ref/netstandard1.5/fr/System.Runtime.Loader.xml",
5373+ "ref/netstandard1.5/it/System.Runtime.Loader.xml",
5374+ "ref/netstandard1.5/ja/System.Runtime.Loader.xml",
5375+ "ref/netstandard1.5/ko/System.Runtime.Loader.xml",
5376+ "ref/netstandard1.5/ru/System.Runtime.Loader.xml",
5377+ "ref/netstandard1.5/zh-hans/System.Runtime.Loader.xml",
5378+ "ref/netstandard1.5/zh-hant/System.Runtime.Loader.xml"
5379+ ]
5380+ },
5381+ "System.Runtime.Numerics/4.0.1": {
5382+ "sha512": "laG2qiVk8jeL4KUuYhSBnm32EqEWDnzSfxe1QjhJD7c6DDwsqLjiIv3ck4gs5PGSYYCH5hSb5x32+5VxD/IiBw==",
5383+ "type": "package",
5384+ "path": "System.Runtime.Numerics/4.0.1",
5385+ "files": [
5386+ "System.Runtime.Numerics.4.0.1.nupkg.sha512",
5387+ "System.Runtime.Numerics.nuspec",
5388+ "ThirdPartyNotices.txt",
5389+ "dotnet_library_license.txt",
5390+ "lib/MonoAndroid10/_._",
5391+ "lib/MonoTouch10/_._",
5392+ "lib/net45/_._",
5393+ "lib/netcore50/System.Runtime.Numerics.dll",
5394+ "lib/netstandard1.3/System.Runtime.Numerics.dll",
5395+ "lib/portable-net45+win8+wpa81/_._",
5396+ "lib/win8/_._",
5397+ "lib/wpa81/_._",
5398+ "lib/xamarinios10/_._",
5399+ "lib/xamarinmac20/_._",
5400+ "lib/xamarintvos10/_._",
5401+ "lib/xamarinwatchos10/_._",
5402+ "ref/MonoAndroid10/_._",
5403+ "ref/MonoTouch10/_._",
5404+ "ref/net45/_._",
5405+ "ref/netcore50/System.Runtime.Numerics.dll",
5406+ "ref/netcore50/System.Runtime.Numerics.xml",
5407+ "ref/netcore50/de/System.Runtime.Numerics.xml",
5408+ "ref/netcore50/es/System.Runtime.Numerics.xml",
5409+ "ref/netcore50/fr/System.Runtime.Numerics.xml",
5410+ "ref/netcore50/it/System.Runtime.Numerics.xml",
5411+ "ref/netcore50/ja/System.Runtime.Numerics.xml",
5412+ "ref/netcore50/ko/System.Runtime.Numerics.xml",
5413+ "ref/netcore50/ru/System.Runtime.Numerics.xml",
5414+ "ref/netcore50/zh-hans/System.Runtime.Numerics.xml",
5415+ "ref/netcore50/zh-hant/System.Runtime.Numerics.xml",
5416+ "ref/netstandard1.1/System.Runtime.Numerics.dll",
5417+ "ref/netstandard1.1/System.Runtime.Numerics.xml",
5418+ "ref/netstandard1.1/de/System.Runtime.Numerics.xml",
5419+ "ref/netstandard1.1/es/System.Runtime.Numerics.xml",
5420+ "ref/netstandard1.1/fr/System.Runtime.Numerics.xml",
5421+ "ref/netstandard1.1/it/System.Runtime.Numerics.xml",
5422+ "ref/netstandard1.1/ja/System.Runtime.Numerics.xml",
5423+ "ref/netstandard1.1/ko/System.Runtime.Numerics.xml",
5424+ "ref/netstandard1.1/ru/System.Runtime.Numerics.xml",
5425+ "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml",
5426+ "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml",
5427+ "ref/portable-net45+win8+wpa81/_._",
5428+ "ref/win8/_._",
5429+ "ref/wpa81/_._",
5430+ "ref/xamarinios10/_._",
5431+ "ref/xamarinmac20/_._",
5432+ "ref/xamarintvos10/_._",
5433+ "ref/xamarinwatchos10/_._"
5434+ ]
5435+ },
5436+ "System.Runtime.Serialization.Primitives/4.1.1": {
5437+ "sha512": "HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==",
5438+ "type": "package",
5439+ "path": "System.Runtime.Serialization.Primitives/4.1.1",
5440+ "files": [
5441+ "System.Runtime.Serialization.Primitives.4.1.1.nupkg.sha512",
5442+ "System.Runtime.Serialization.Primitives.nuspec",
5443+ "ThirdPartyNotices.txt",
5444+ "dotnet_library_license.txt",
5445+ "lib/MonoAndroid10/_._",
5446+ "lib/MonoTouch10/_._",
5447+ "lib/net45/_._",
5448+ "lib/net46/System.Runtime.Serialization.Primitives.dll",
5449+ "lib/netcore50/System.Runtime.Serialization.Primitives.dll",
5450+ "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll",
5451+ "lib/portable-net45+win8+wp8+wpa81/_._",
5452+ "lib/win8/_._",
5453+ "lib/wp80/_._",
5454+ "lib/wpa81/_._",
5455+ "lib/xamarinios10/_._",
5456+ "lib/xamarinmac20/_._",
5457+ "lib/xamarintvos10/_._",
5458+ "lib/xamarinwatchos10/_._",
5459+ "ref/MonoAndroid10/_._",
5460+ "ref/MonoTouch10/_._",
5461+ "ref/net45/_._",
5462+ "ref/net46/System.Runtime.Serialization.Primitives.dll",
5463+ "ref/netcore50/System.Runtime.Serialization.Primitives.dll",
5464+ "ref/netcore50/System.Runtime.Serialization.Primitives.xml",
5465+ "ref/netcore50/de/System.Runtime.Serialization.Primitives.xml",
5466+ "ref/netcore50/es/System.Runtime.Serialization.Primitives.xml",
5467+ "ref/netcore50/fr/System.Runtime.Serialization.Primitives.xml",
5468+ "ref/netcore50/it/System.Runtime.Serialization.Primitives.xml",
5469+ "ref/netcore50/ja/System.Runtime.Serialization.Primitives.xml",
5470+ "ref/netcore50/ko/System.Runtime.Serialization.Primitives.xml",
5471+ "ref/netcore50/ru/System.Runtime.Serialization.Primitives.xml",
5472+ "ref/netcore50/zh-hans/System.Runtime.Serialization.Primitives.xml",
5473+ "ref/netcore50/zh-hant/System.Runtime.Serialization.Primitives.xml",
5474+ "ref/netstandard1.0/System.Runtime.Serialization.Primitives.dll",
5475+ "ref/netstandard1.0/System.Runtime.Serialization.Primitives.xml",
5476+ "ref/netstandard1.0/de/System.Runtime.Serialization.Primitives.xml",
5477+ "ref/netstandard1.0/es/System.Runtime.Serialization.Primitives.xml",
5478+ "ref/netstandard1.0/fr/System.Runtime.Serialization.Primitives.xml",
5479+ "ref/netstandard1.0/it/System.Runtime.Serialization.Primitives.xml",
5480+ "ref/netstandard1.0/ja/System.Runtime.Serialization.Primitives.xml",
5481+ "ref/netstandard1.0/ko/System.Runtime.Serialization.Primitives.xml",
5482+ "ref/netstandard1.0/ru/System.Runtime.Serialization.Primitives.xml",
5483+ "ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Primitives.xml",
5484+ "ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Primitives.xml",
5485+ "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll",
5486+ "ref/netstandard1.3/System.Runtime.Serialization.Primitives.xml",
5487+ "ref/netstandard1.3/de/System.Runtime.Serialization.Primitives.xml",
5488+ "ref/netstandard1.3/es/System.Runtime.Serialization.Primitives.xml",
5489+ "ref/netstandard1.3/fr/System.Runtime.Serialization.Primitives.xml",
5490+ "ref/netstandard1.3/it/System.Runtime.Serialization.Primitives.xml",
5491+ "ref/netstandard1.3/ja/System.Runtime.Serialization.Primitives.xml",
5492+ "ref/netstandard1.3/ko/System.Runtime.Serialization.Primitives.xml",
5493+ "ref/netstandard1.3/ru/System.Runtime.Serialization.Primitives.xml",
5494+ "ref/netstandard1.3/zh-hans/System.Runtime.Serialization.Primitives.xml",
5495+ "ref/netstandard1.3/zh-hant/System.Runtime.Serialization.Primitives.xml",
5496+ "ref/portable-net45+win8+wp8+wpa81/_._",
5497+ "ref/win8/_._",
5498+ "ref/wp80/_._",
5499+ "ref/wpa81/_._",
5500+ "ref/xamarinios10/_._",
5501+ "ref/xamarinmac20/_._",
5502+ "ref/xamarintvos10/_._",
5503+ "ref/xamarinwatchos10/_._",
5504+ "runtimes/aot/lib/netcore50/System.Runtime.Serialization.Primitives.dll"
5505+ ]
5506+ },
5507+ "System.Security.Claims/4.0.1": {
5508+ "sha512": "TdJNr7fWHYV0BxUCN3p9ihfTH94sLvBieTMI3SRmdzW5AEWwZ3kYrhQFUtlYcCxJIaLGAe7Bkxbhe2tYKTJtcg==",
5509+ "type": "package",
5510+ "path": "System.Security.Claims/4.0.1",
5511+ "files": [
5512+ "System.Security.Claims.4.0.1.nupkg.sha512",
5513+ "System.Security.Claims.nuspec",
5514+ "ThirdPartyNotices.txt",
5515+ "dotnet_library_license.txt",
5516+ "lib/MonoAndroid10/_._",
5517+ "lib/MonoTouch10/_._",
5518+ "lib/net46/System.Security.Claims.dll",
5519+ "lib/netstandard1.3/System.Security.Claims.dll",
5520+ "lib/xamarinios10/_._",
5521+ "lib/xamarinmac20/_._",
5522+ "lib/xamarintvos10/_._",
5523+ "lib/xamarinwatchos10/_._",
5524+ "ref/MonoAndroid10/_._",
5525+ "ref/MonoTouch10/_._",
5526+ "ref/net46/System.Security.Claims.dll",
5527+ "ref/netstandard1.3/System.Security.Claims.dll",
5528+ "ref/netstandard1.3/System.Security.Claims.xml",
5529+ "ref/netstandard1.3/de/System.Security.Claims.xml",
5530+ "ref/netstandard1.3/es/System.Security.Claims.xml",
5531+ "ref/netstandard1.3/fr/System.Security.Claims.xml",
5532+ "ref/netstandard1.3/it/System.Security.Claims.xml",
5533+ "ref/netstandard1.3/ja/System.Security.Claims.xml",
5534+ "ref/netstandard1.3/ko/System.Security.Claims.xml",
5535+ "ref/netstandard1.3/ru/System.Security.Claims.xml",
5536+ "ref/netstandard1.3/zh-hans/System.Security.Claims.xml",
5537+ "ref/netstandard1.3/zh-hant/System.Security.Claims.xml",
5538+ "ref/xamarinios10/_._",
5539+ "ref/xamarinmac20/_._",
5540+ "ref/xamarintvos10/_._",
5541+ "ref/xamarinwatchos10/_._"
5542+ ]
5543+ },
5544+ "System.Security.Cryptography.Algorithms/4.2.0": {
5545+ "sha512": "VISLYkxSKh2Hx2FRpmuv1Hltyls8nWxqLLFiWUT2VUxbKXVco7zXpUDHIhSKtT7gKaM2BotwIRjF0UrfCawT2Q==",
5546+ "type": "package",
5547+ "path": "System.Security.Cryptography.Algorithms/4.2.0",
5548+ "files": [
5549+ "System.Security.Cryptography.Algorithms.4.2.0.nupkg.sha512",
5550+ "System.Security.Cryptography.Algorithms.nuspec",
5551+ "ThirdPartyNotices.txt",
5552+ "dotnet_library_license.txt",
5553+ "lib/MonoAndroid10/_._",
5554+ "lib/MonoTouch10/_._",
5555+ "lib/net46/System.Security.Cryptography.Algorithms.dll",
5556+ "lib/net461/System.Security.Cryptography.Algorithms.dll",
5557+ "lib/net463/System.Security.Cryptography.Algorithms.dll",
5558+ "lib/xamarinios10/_._",
5559+ "lib/xamarinmac20/_._",
5560+ "lib/xamarintvos10/_._",
5561+ "lib/xamarinwatchos10/_._",
5562+ "ref/MonoAndroid10/_._",
5563+ "ref/MonoTouch10/_._",
5564+ "ref/net46/System.Security.Cryptography.Algorithms.dll",
5565+ "ref/net461/System.Security.Cryptography.Algorithms.dll",
5566+ "ref/net463/System.Security.Cryptography.Algorithms.dll",
5567+ "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll",
5568+ "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll",
5569+ "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
5570+ "ref/xamarinios10/_._",
5571+ "ref/xamarinmac20/_._",
5572+ "ref/xamarintvos10/_._",
5573+ "ref/xamarinwatchos10/_._",
5574+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll",
5575+ "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll",
5576+ "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll",
5577+ "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll",
5578+ "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll",
5579+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll"
5580+ ]
5581+ },
5582+ "System.Security.Cryptography.Cng/4.2.0": {
5583+ "sha512": "YVJ609JunCq++x47/5FsAzFS/0oRz/tYOcpxY4qVfWW0PSQ4CaTOvpG+nFxLv+uDAiKW5h8++eUSTgPsM+Df9g==",
5584+ "type": "package",
5585+ "path": "System.Security.Cryptography.Cng/4.2.0",
5586+ "files": [
5587+ "System.Security.Cryptography.Cng.4.2.0.nupkg.sha512",
5588+ "System.Security.Cryptography.Cng.nuspec",
5589+ "ThirdPartyNotices.txt",
5590+ "dotnet_library_license.txt",
5591+ "lib/net46/System.Security.Cryptography.Cng.dll",
5592+ "lib/net461/System.Security.Cryptography.Cng.dll",
5593+ "lib/net463/System.Security.Cryptography.Cng.dll",
5594+ "ref/net46/System.Security.Cryptography.Cng.dll",
5595+ "ref/net461/System.Security.Cryptography.Cng.dll",
5596+ "ref/net463/System.Security.Cryptography.Cng.dll",
5597+ "ref/netstandard1.3/System.Security.Cryptography.Cng.dll",
5598+ "ref/netstandard1.4/System.Security.Cryptography.Cng.dll",
5599+ "ref/netstandard1.6/System.Security.Cryptography.Cng.dll",
5600+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll",
5601+ "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll",
5602+ "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll",
5603+ "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll",
5604+ "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll",
5605+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll"
5606+ ]
5607+ },
5608+ "System.Security.Cryptography.Csp/4.0.0": {
5609+ "sha512": "+79Zn4o7wmmjImypvxcpYZRkUIE0HpYGQqP/frDouaV5W2clx8CNWmI47fv6EFuPJr+S98YykBoDlwGMapIrnQ==",
5610+ "type": "package",
5611+ "path": "System.Security.Cryptography.Csp/4.0.0",
5612+ "files": [
5613+ "System.Security.Cryptography.Csp.4.0.0.nupkg.sha512",
5614+ "System.Security.Cryptography.Csp.nuspec",
5615+ "ThirdPartyNotices.txt",
5616+ "dotnet_library_license.txt",
5617+ "lib/MonoAndroid10/_._",
5618+ "lib/MonoTouch10/_._",
5619+ "lib/net46/System.Security.Cryptography.Csp.dll",
5620+ "lib/xamarinios10/_._",
5621+ "lib/xamarinmac20/_._",
5622+ "lib/xamarintvos10/_._",
5623+ "lib/xamarinwatchos10/_._",
5624+ "ref/MonoAndroid10/_._",
5625+ "ref/MonoTouch10/_._",
5626+ "ref/net46/System.Security.Cryptography.Csp.dll",
5627+ "ref/netstandard1.3/System.Security.Cryptography.Csp.dll",
5628+ "ref/xamarinios10/_._",
5629+ "ref/xamarinmac20/_._",
5630+ "ref/xamarintvos10/_._",
5631+ "ref/xamarinwatchos10/_._",
5632+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll",
5633+ "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll",
5634+ "runtimes/win/lib/netcore50/_._",
5635+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll"
5636+ ]
5637+ },
5638+ "System.Security.Cryptography.Encoding/4.0.0": {
5639+ "sha512": "NViKmTxMps6OtW1a3U/pdt2OAqQxmgjO0NZs0A88iPqauL4FnZo9bo53G+ASfqfDIclTkofgaH1xBtO6pE3s+g==",
5640+ "type": "package",
5641+ "path": "System.Security.Cryptography.Encoding/4.0.0",
5642+ "files": [
5643+ "System.Security.Cryptography.Encoding.4.0.0.nupkg.sha512",
5644+ "System.Security.Cryptography.Encoding.nuspec",
5645+ "ThirdPartyNotices.txt",
5646+ "dotnet_library_license.txt",
5647+ "lib/MonoAndroid10/_._",
5648+ "lib/MonoTouch10/_._",
5649+ "lib/net46/System.Security.Cryptography.Encoding.dll",
5650+ "lib/xamarinios10/_._",
5651+ "lib/xamarinmac20/_._",
5652+ "lib/xamarintvos10/_._",
5653+ "lib/xamarinwatchos10/_._",
5654+ "ref/MonoAndroid10/_._",
5655+ "ref/MonoTouch10/_._",
5656+ "ref/net46/System.Security.Cryptography.Encoding.dll",
5657+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll",
5658+ "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml",
5659+ "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml",
5660+ "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml",
5661+ "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml",
5662+ "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml",
5663+ "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml",
5664+ "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml",
5665+ "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml",
5666+ "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml",
5667+ "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml",
5668+ "ref/xamarinios10/_._",
5669+ "ref/xamarinmac20/_._",
5670+ "ref/xamarintvos10/_._",
5671+ "ref/xamarinwatchos10/_._",
5672+ "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll",
5673+ "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll",
5674+ "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll"
5675+ ]
5676+ },
5677+ "System.Security.Cryptography.OpenSsl/4.0.0": {
5678+ "sha512": "XLf1DoeZp6gAee2hqO14Nzgty5dWNlwdx/D77pc29rp6okb9FEkeWLfqWnHeV4ImoRNxiLi/JU09sPJcMBru5A==",
5679+ "type": "package",
5680+ "path": "System.Security.Cryptography.OpenSsl/4.0.0",
5681+ "files": [
5682+ "System.Security.Cryptography.OpenSsl.4.0.0.nupkg.sha512",
5683+ "System.Security.Cryptography.OpenSsl.nuspec",
5684+ "ThirdPartyNotices.txt",
5685+ "dotnet_library_license.txt",
5686+ "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll",
5687+ "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll",
5688+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll"
5689+ ]
5690+ },
5691+ "System.Security.Cryptography.Primitives/4.0.0": {
5692+ "sha512": "oXU/KGnf3TT2ykVPC/Arbo45a2OatGvw+Ko3KpdbIGuqRzN22YB34K39QpNviz6oE5v0VBLj4PWd+JLvNKdy0w==",
5693+ "type": "package",
5694+ "path": "System.Security.Cryptography.Primitives/4.0.0",
5695+ "files": [
5696+ "System.Security.Cryptography.Primitives.4.0.0.nupkg.sha512",
5697+ "System.Security.Cryptography.Primitives.nuspec",
5698+ "ThirdPartyNotices.txt",
5699+ "dotnet_library_license.txt",
5700+ "lib/MonoAndroid10/_._",
5701+ "lib/MonoTouch10/_._",
5702+ "lib/net46/System.Security.Cryptography.Primitives.dll",
5703+ "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll",
5704+ "lib/xamarinios10/_._",
5705+ "lib/xamarinmac20/_._",
5706+ "lib/xamarintvos10/_._",
5707+ "lib/xamarinwatchos10/_._",
5708+ "ref/MonoAndroid10/_._",
5709+ "ref/MonoTouch10/_._",
5710+ "ref/net46/System.Security.Cryptography.Primitives.dll",
5711+ "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll",
5712+ "ref/xamarinios10/_._",
5713+ "ref/xamarinmac20/_._",
5714+ "ref/xamarintvos10/_._",
5715+ "ref/xamarinwatchos10/_._"
5716+ ]
5717+ },
5718+ "System.Security.Cryptography.X509Certificates/4.1.0": {
5719+ "sha512": "w2uEJo9ShGvwpRlF9wFpfESMl0tyKCeLMQ9+LF6c7vCn6KR66XHoC+kBK3+7uBsRdWNDhUCowslZH4wZHWfs9A==",
5720+ "type": "package",
5721+ "path": "System.Security.Cryptography.X509Certificates/4.1.0",
5722+ "files": [
5723+ "System.Security.Cryptography.X509Certificates.4.1.0.nupkg.sha512",
5724+ "System.Security.Cryptography.X509Certificates.nuspec",
5725+ "ThirdPartyNotices.txt",
5726+ "dotnet_library_license.txt",
5727+ "lib/MonoAndroid10/_._",
5728+ "lib/MonoTouch10/_._",
5729+ "lib/net46/System.Security.Cryptography.X509Certificates.dll",
5730+ "lib/net461/System.Security.Cryptography.X509Certificates.dll",
5731+ "lib/xamarinios10/_._",
5732+ "lib/xamarinmac20/_._",
5733+ "lib/xamarintvos10/_._",
5734+ "lib/xamarinwatchos10/_._",
5735+ "ref/MonoAndroid10/_._",
5736+ "ref/MonoTouch10/_._",
5737+ "ref/net46/System.Security.Cryptography.X509Certificates.dll",
5738+ "ref/net461/System.Security.Cryptography.X509Certificates.dll",
5739+ "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll",
5740+ "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml",
5741+ "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml",
5742+ "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml",
5743+ "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml",
5744+ "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml",
5745+ "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml",
5746+ "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml",
5747+ "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml",
5748+ "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml",
5749+ "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml",
5750+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll",
5751+ "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml",
5752+ "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml",
5753+ "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml",
5754+ "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml",
5755+ "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml",
5756+ "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml",
5757+ "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml",
5758+ "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml",
5759+ "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml",
5760+ "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml",
5761+ "ref/xamarinios10/_._",
5762+ "ref/xamarinmac20/_._",
5763+ "ref/xamarintvos10/_._",
5764+ "ref/xamarinwatchos10/_._",
5765+ "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll",
5766+ "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll",
5767+ "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll",
5768+ "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll",
5769+ "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll"
5770+ ]
5771+ },
5772+ "System.Security.Principal/4.0.1": {
5773+ "sha512": "2YVhlpjs7+fOcWRfPZ7HKZTVlahADbExA0WvHWS9OM7SkBY4SS+OeuYn2oIPuCTaezKY/OMBjPbpsW/bQh5wRA==",
5774+ "type": "package",
5775+ "path": "System.Security.Principal/4.0.1",
5776+ "files": [
5777+ "System.Security.Principal.4.0.1.nupkg.sha512",
5778+ "System.Security.Principal.nuspec",
5779+ "ThirdPartyNotices.txt",
5780+ "dotnet_library_license.txt",
5781+ "lib/MonoAndroid10/_._",
5782+ "lib/MonoTouch10/_._",
5783+ "lib/net45/_._",
5784+ "lib/netcore50/System.Security.Principal.dll",
5785+ "lib/netstandard1.0/System.Security.Principal.dll",
5786+ "lib/portable-net45+win8+wp8+wpa81/_._",
5787+ "lib/win8/_._",
5788+ "lib/wp80/_._",
5789+ "lib/wpa81/_._",
5790+ "lib/xamarinios10/_._",
5791+ "lib/xamarinmac20/_._",
5792+ "lib/xamarintvos10/_._",
5793+ "lib/xamarinwatchos10/_._",
5794+ "ref/MonoAndroid10/_._",
5795+ "ref/MonoTouch10/_._",
5796+ "ref/net45/_._",
5797+ "ref/netcore50/System.Security.Principal.dll",
5798+ "ref/netcore50/System.Security.Principal.xml",
5799+ "ref/netcore50/de/System.Security.Principal.xml",
5800+ "ref/netcore50/es/System.Security.Principal.xml",
5801+ "ref/netcore50/fr/System.Security.Principal.xml",
5802+ "ref/netcore50/it/System.Security.Principal.xml",
5803+ "ref/netcore50/ja/System.Security.Principal.xml",
5804+ "ref/netcore50/ko/System.Security.Principal.xml",
5805+ "ref/netcore50/ru/System.Security.Principal.xml",
5806+ "ref/netcore50/zh-hans/System.Security.Principal.xml",
5807+ "ref/netcore50/zh-hant/System.Security.Principal.xml",
5808+ "ref/netstandard1.0/System.Security.Principal.dll",
5809+ "ref/netstandard1.0/System.Security.Principal.xml",
5810+ "ref/netstandard1.0/de/System.Security.Principal.xml",
5811+ "ref/netstandard1.0/es/System.Security.Principal.xml",
5812+ "ref/netstandard1.0/fr/System.Security.Principal.xml",
5813+ "ref/netstandard1.0/it/System.Security.Principal.xml",
5814+ "ref/netstandard1.0/ja/System.Security.Principal.xml",
5815+ "ref/netstandard1.0/ko/System.Security.Principal.xml",
5816+ "ref/netstandard1.0/ru/System.Security.Principal.xml",
5817+ "ref/netstandard1.0/zh-hans/System.Security.Principal.xml",
5818+ "ref/netstandard1.0/zh-hant/System.Security.Principal.xml",
5819+ "ref/portable-net45+win8+wp8+wpa81/_._",
5820+ "ref/win8/_._",
5821+ "ref/wp80/_._",
5822+ "ref/wpa81/_._",
5823+ "ref/xamarinios10/_._",
5824+ "ref/xamarinmac20/_._",
5825+ "ref/xamarintvos10/_._",
5826+ "ref/xamarinwatchos10/_._"
5827+ ]
5828+ },
5829+ "System.Security.Principal.Windows/4.0.0": {
5830+ "sha512": "0fkMXcsodkuQp6KaCiiutGfBFB5AqqWJF9fQB05wDJYJi8Ceerx+Mp3NVofA/HeZ4ngY+gFg0t6P3OAkpSCTYQ==",
5831+ "type": "package",
5832+ "path": "System.Security.Principal.Windows/4.0.0",
5833+ "files": [
5834+ "System.Security.Principal.Windows.4.0.0.nupkg.sha512",
5835+ "System.Security.Principal.Windows.nuspec",
5836+ "ThirdPartyNotices.txt",
5837+ "dotnet_library_license.txt",
5838+ "lib/net46/System.Security.Principal.Windows.dll",
5839+ "ref/net46/System.Security.Principal.Windows.dll",
5840+ "ref/netstandard1.3/System.Security.Principal.Windows.dll",
5841+ "ref/netstandard1.3/System.Security.Principal.Windows.xml",
5842+ "ref/netstandard1.3/de/System.Security.Principal.Windows.xml",
5843+ "ref/netstandard1.3/es/System.Security.Principal.Windows.xml",
5844+ "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml",
5845+ "ref/netstandard1.3/it/System.Security.Principal.Windows.xml",
5846+ "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml",
5847+ "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml",
5848+ "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml",
5849+ "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml",
5850+ "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml",
5851+ "runtimes/unix/lib/netstandard1.3/System.Security.Principal.Windows.dll",
5852+ "runtimes/win/lib/net46/System.Security.Principal.Windows.dll",
5853+ "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll"
5854+ ]
5855+ },
5856+ "System.Text.Encoding/4.0.11": {
5857+ "sha512": "VmNf3C4yhkGkFEahnzG4ANqjyzgXC82XvG0434o8XRGRBC7x/2C/GuDGIe95a/SjA9bJjho4JxP0xVuyZm2vVw==",
5858+ "type": "package",
5859+ "path": "System.Text.Encoding/4.0.11",
5860+ "files": [
5861+ "System.Text.Encoding.4.0.11.nupkg.sha512",
5862+ "System.Text.Encoding.nuspec",
5863+ "ThirdPartyNotices.txt",
5864+ "dotnet_library_license.txt",
5865+ "lib/MonoAndroid10/_._",
5866+ "lib/MonoTouch10/_._",
5867+ "lib/net45/_._",
5868+ "lib/portable-net45+win8+wp8+wpa81/_._",
5869+ "lib/win8/_._",
5870+ "lib/wp80/_._",
5871+ "lib/wpa81/_._",
5872+ "lib/xamarinios10/_._",
5873+ "lib/xamarinmac20/_._",
5874+ "lib/xamarintvos10/_._",
5875+ "lib/xamarinwatchos10/_._",
5876+ "ref/MonoAndroid10/_._",
5877+ "ref/MonoTouch10/_._",
5878+ "ref/net45/_._",
5879+ "ref/netcore50/System.Text.Encoding.dll",
5880+ "ref/netcore50/System.Text.Encoding.xml",
5881+ "ref/netcore50/de/System.Text.Encoding.xml",
5882+ "ref/netcore50/es/System.Text.Encoding.xml",
5883+ "ref/netcore50/fr/System.Text.Encoding.xml",
5884+ "ref/netcore50/it/System.Text.Encoding.xml",
5885+ "ref/netcore50/ja/System.Text.Encoding.xml",
5886+ "ref/netcore50/ko/System.Text.Encoding.xml",
5887+ "ref/netcore50/ru/System.Text.Encoding.xml",
5888+ "ref/netcore50/zh-hans/System.Text.Encoding.xml",
5889+ "ref/netcore50/zh-hant/System.Text.Encoding.xml",
5890+ "ref/netstandard1.0/System.Text.Encoding.dll",
5891+ "ref/netstandard1.0/System.Text.Encoding.xml",
5892+ "ref/netstandard1.0/de/System.Text.Encoding.xml",
5893+ "ref/netstandard1.0/es/System.Text.Encoding.xml",
5894+ "ref/netstandard1.0/fr/System.Text.Encoding.xml",
5895+ "ref/netstandard1.0/it/System.Text.Encoding.xml",
5896+ "ref/netstandard1.0/ja/System.Text.Encoding.xml",
5897+ "ref/netstandard1.0/ko/System.Text.Encoding.xml",
5898+ "ref/netstandard1.0/ru/System.Text.Encoding.xml",
5899+ "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml",
5900+ "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml",
5901+ "ref/netstandard1.3/System.Text.Encoding.dll",
5902+ "ref/netstandard1.3/System.Text.Encoding.xml",
5903+ "ref/netstandard1.3/de/System.Text.Encoding.xml",
5904+ "ref/netstandard1.3/es/System.Text.Encoding.xml",
5905+ "ref/netstandard1.3/fr/System.Text.Encoding.xml",
5906+ "ref/netstandard1.3/it/System.Text.Encoding.xml",
5907+ "ref/netstandard1.3/ja/System.Text.Encoding.xml",
5908+ "ref/netstandard1.3/ko/System.Text.Encoding.xml",
5909+ "ref/netstandard1.3/ru/System.Text.Encoding.xml",
5910+ "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml",
5911+ "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml",
5912+ "ref/portable-net45+win8+wp8+wpa81/_._",
5913+ "ref/win8/_._",
5914+ "ref/wp80/_._",
5915+ "ref/wpa81/_._",
5916+ "ref/xamarinios10/_._",
5917+ "ref/xamarinmac20/_._",
5918+ "ref/xamarintvos10/_._",
5919+ "ref/xamarinwatchos10/_._"
5920+ ]
5921+ },
5922+ "System.Text.Encoding.CodePages/4.0.1": {
5923+ "sha512": "9Ovjc/+OFvoxe77pOHRiwu0mph0MNmXa2qOKq2XS672f0CPZ3Z4X5/wpqBVYfuaut72OSLrBb1MvIm8MhEtgvA==",
5924+ "type": "package",
5925+ "path": "System.Text.Encoding.CodePages/4.0.1",
5926+ "files": [
5927+ "System.Text.Encoding.CodePages.4.0.1.nupkg.sha512",
5928+ "System.Text.Encoding.CodePages.nuspec",
5929+ "ThirdPartyNotices.txt",
5930+ "dotnet_library_license.txt",
5931+ "lib/MonoAndroid10/_._",
5932+ "lib/MonoTouch10/_._",
5933+ "lib/net46/System.Text.Encoding.CodePages.dll",
5934+ "lib/xamarinios10/_._",
5935+ "lib/xamarinmac20/_._",
5936+ "lib/xamarintvos10/_._",
5937+ "lib/xamarinwatchos10/_._",
5938+ "ref/MonoAndroid10/_._",
5939+ "ref/MonoTouch10/_._",
5940+ "ref/netstandard1.3/System.Text.Encoding.CodePages.dll",
5941+ "ref/netstandard1.3/System.Text.Encoding.CodePages.xml",
5942+ "ref/netstandard1.3/de/System.Text.Encoding.CodePages.xml",
5943+ "ref/netstandard1.3/es/System.Text.Encoding.CodePages.xml",
5944+ "ref/netstandard1.3/fr/System.Text.Encoding.CodePages.xml",
5945+ "ref/netstandard1.3/it/System.Text.Encoding.CodePages.xml",
5946+ "ref/netstandard1.3/ja/System.Text.Encoding.CodePages.xml",
5947+ "ref/netstandard1.3/ko/System.Text.Encoding.CodePages.xml",
5948+ "ref/netstandard1.3/ru/System.Text.Encoding.CodePages.xml",
5949+ "ref/netstandard1.3/zh-hans/System.Text.Encoding.CodePages.xml",
5950+ "ref/netstandard1.3/zh-hant/System.Text.Encoding.CodePages.xml",
5951+ "ref/xamarinios10/_._",
5952+ "ref/xamarinmac20/_._",
5953+ "ref/xamarintvos10/_._",
5954+ "ref/xamarinwatchos10/_._",
5955+ "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll",
5956+ "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll"
5957+ ]
5958+ },
5959+ "System.Text.Encoding.Extensions/4.0.11": {
5960+ "sha512": "2bid7vf9JAPdw4zYnPtRXTJGWr1XR372EwzSNFJIT8ctmsZSHqGxcjVx/xUYfHtG8QN/mILpLSM3BUMCfEST4Q==",
5961+ "type": "package",
5962+ "path": "System.Text.Encoding.Extensions/4.0.11",
5963+ "files": [
5964+ "System.Text.Encoding.Extensions.4.0.11.nupkg.sha512",
5965+ "System.Text.Encoding.Extensions.nuspec",
5966+ "ThirdPartyNotices.txt",
5967+ "dotnet_library_license.txt",
5968+ "lib/MonoAndroid10/_._",
5969+ "lib/MonoTouch10/_._",
5970+ "lib/net45/_._",
5971+ "lib/portable-net45+win8+wp8+wpa81/_._",
5972+ "lib/win8/_._",
5973+ "lib/wp80/_._",
5974+ "lib/wpa81/_._",
5975+ "lib/xamarinios10/_._",
5976+ "lib/xamarinmac20/_._",
5977+ "lib/xamarintvos10/_._",
5978+ "lib/xamarinwatchos10/_._",
5979+ "ref/MonoAndroid10/_._",
5980+ "ref/MonoTouch10/_._",
5981+ "ref/net45/_._",
5982+ "ref/netcore50/System.Text.Encoding.Extensions.dll",
5983+ "ref/netcore50/System.Text.Encoding.Extensions.xml",
5984+ "ref/netcore50/de/System.Text.Encoding.Extensions.xml",
5985+ "ref/netcore50/es/System.Text.Encoding.Extensions.xml",
5986+ "ref/netcore50/fr/System.Text.Encoding.Extensions.xml",
5987+ "ref/netcore50/it/System.Text.Encoding.Extensions.xml",
5988+ "ref/netcore50/ja/System.Text.Encoding.Extensions.xml",
5989+ "ref/netcore50/ko/System.Text.Encoding.Extensions.xml",
5990+ "ref/netcore50/ru/System.Text.Encoding.Extensions.xml",
5991+ "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml",
5992+ "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml",
5993+ "ref/netstandard1.0/System.Text.Encoding.Extensions.dll",
5994+ "ref/netstandard1.0/System.Text.Encoding.Extensions.xml",
5995+ "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml",
5996+ "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml",
5997+ "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml",
5998+ "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml",
5999+ "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml",
6000+ "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml",
6001+ "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml",
6002+ "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml",
6003+ "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml",
6004+ "ref/netstandard1.3/System.Text.Encoding.Extensions.dll",
6005+ "ref/netstandard1.3/System.Text.Encoding.Extensions.xml",
6006+ "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml",
6007+ "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml",
6008+ "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml",
6009+ "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml",
6010+ "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml",
6011+ "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml",
6012+ "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml",
6013+ "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml",
6014+ "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml",
6015+ "ref/portable-net45+win8+wp8+wpa81/_._",
6016+ "ref/win8/_._",
6017+ "ref/wp80/_._",
6018+ "ref/wpa81/_._",
6019+ "ref/xamarinios10/_._",
6020+ "ref/xamarinmac20/_._",
6021+ "ref/xamarintvos10/_._",
6022+ "ref/xamarinwatchos10/_._"
6023+ ]
6024+ },
6025+ "System.Text.RegularExpressions/4.1.0": {
6026+ "sha512": "RpuCs3WWe11xaEivjjft+sxZ8w92OXpOzCkAS96Uvgs9XYWtGMfPhPuBPUgaCNYEtSOkwXDiSYxwQy/UtK0FVw==",
6027+ "type": "package",
6028+ "path": "System.Text.RegularExpressions/4.1.0",
6029+ "files": [
6030+ "System.Text.RegularExpressions.4.1.0.nupkg.sha512",
6031+ "System.Text.RegularExpressions.nuspec",
6032+ "ThirdPartyNotices.txt",
6033+ "dotnet_library_license.txt",
6034+ "lib/MonoAndroid10/_._",
6035+ "lib/MonoTouch10/_._",
6036+ "lib/net45/_._",
6037+ "lib/net463/System.Text.RegularExpressions.dll",
6038+ "lib/netcore50/System.Text.RegularExpressions.dll",
6039+ "lib/netstandard1.6/System.Text.RegularExpressions.dll",
6040+ "lib/portable-net45+win8+wp8+wpa81/_._",
6041+ "lib/win8/_._",
6042+ "lib/wp80/_._",
6043+ "lib/wpa81/_._",
6044+ "lib/xamarinios10/_._",
6045+ "lib/xamarinmac20/_._",
6046+ "lib/xamarintvos10/_._",
6047+ "lib/xamarinwatchos10/_._",
6048+ "ref/MonoAndroid10/_._",
6049+ "ref/MonoTouch10/_._",
6050+ "ref/net45/_._",
6051+ "ref/net463/System.Text.RegularExpressions.dll",
6052+ "ref/netcore50/System.Text.RegularExpressions.dll",
6053+ "ref/netcore50/System.Text.RegularExpressions.xml",
6054+ "ref/netcore50/de/System.Text.RegularExpressions.xml",
6055+ "ref/netcore50/es/System.Text.RegularExpressions.xml",
6056+ "ref/netcore50/fr/System.Text.RegularExpressions.xml",
6057+ "ref/netcore50/it/System.Text.RegularExpressions.xml",
6058+ "ref/netcore50/ja/System.Text.RegularExpressions.xml",
6059+ "ref/netcore50/ko/System.Text.RegularExpressions.xml",
6060+ "ref/netcore50/ru/System.Text.RegularExpressions.xml",
6061+ "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml",
6062+ "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml",
6063+ "ref/netstandard1.0/System.Text.RegularExpressions.dll",
6064+ "ref/netstandard1.0/System.Text.RegularExpressions.xml",
6065+ "ref/netstandard1.0/de/System.Text.RegularExpressions.xml",
6066+ "ref/netstandard1.0/es/System.Text.RegularExpressions.xml",
6067+ "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml",
6068+ "ref/netstandard1.0/it/System.Text.RegularExpressions.xml",
6069+ "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml",
6070+ "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml",
6071+ "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml",
6072+ "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml",
6073+ "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml",
6074+ "ref/netstandard1.3/System.Text.RegularExpressions.dll",
6075+ "ref/netstandard1.3/System.Text.RegularExpressions.xml",
6076+ "ref/netstandard1.3/de/System.Text.RegularExpressions.xml",
6077+ "ref/netstandard1.3/es/System.Text.RegularExpressions.xml",
6078+ "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml",
6079+ "ref/netstandard1.3/it/System.Text.RegularExpressions.xml",
6080+ "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml",
6081+ "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml",
6082+ "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml",
6083+ "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml",
6084+ "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml",
6085+ "ref/netstandard1.6/System.Text.RegularExpressions.dll",
6086+ "ref/netstandard1.6/System.Text.RegularExpressions.xml",
6087+ "ref/netstandard1.6/de/System.Text.RegularExpressions.xml",
6088+ "ref/netstandard1.6/es/System.Text.RegularExpressions.xml",
6089+ "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml",
6090+ "ref/netstandard1.6/it/System.Text.RegularExpressions.xml",
6091+ "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml",
6092+ "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml",
6093+ "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml",
6094+ "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml",
6095+ "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml",
6096+ "ref/portable-net45+win8+wp8+wpa81/_._",
6097+ "ref/win8/_._",
6098+ "ref/wp80/_._",
6099+ "ref/wpa81/_._",
6100+ "ref/xamarinios10/_._",
6101+ "ref/xamarinmac20/_._",
6102+ "ref/xamarintvos10/_._",
6103+ "ref/xamarinwatchos10/_._"
6104+ ]
6105+ },
6106+ "System.Threading/4.0.11": {
6107+ "sha512": "RKqouvORktflN2qrqXkwlA2jzKlv2re7S2tXD7ccg706T87CCWP6d34oFX8o4m7aOKcAtETwbDM6q6pp06goAQ==",
6108+ "type": "package",
6109+ "path": "System.Threading/4.0.11",
6110+ "files": [
6111+ "System.Threading.4.0.11.nupkg.sha512",
6112+ "System.Threading.nuspec",
6113+ "ThirdPartyNotices.txt",
6114+ "dotnet_library_license.txt",
6115+ "lib/MonoAndroid10/_._",
6116+ "lib/MonoTouch10/_._",
6117+ "lib/net45/_._",
6118+ "lib/netcore50/System.Threading.dll",
6119+ "lib/netstandard1.3/System.Threading.dll",
6120+ "lib/portable-net45+win8+wp8+wpa81/_._",
6121+ "lib/win8/_._",
6122+ "lib/wp80/_._",
6123+ "lib/wpa81/_._",
6124+ "lib/xamarinios10/_._",
6125+ "lib/xamarinmac20/_._",
6126+ "lib/xamarintvos10/_._",
6127+ "lib/xamarinwatchos10/_._",
6128+ "ref/MonoAndroid10/_._",
6129+ "ref/MonoTouch10/_._",
6130+ "ref/net45/_._",
6131+ "ref/netcore50/System.Threading.dll",
6132+ "ref/netcore50/System.Threading.xml",
6133+ "ref/netcore50/de/System.Threading.xml",
6134+ "ref/netcore50/es/System.Threading.xml",
6135+ "ref/netcore50/fr/System.Threading.xml",
6136+ "ref/netcore50/it/System.Threading.xml",
6137+ "ref/netcore50/ja/System.Threading.xml",
6138+ "ref/netcore50/ko/System.Threading.xml",
6139+ "ref/netcore50/ru/System.Threading.xml",
6140+ "ref/netcore50/zh-hans/System.Threading.xml",
6141+ "ref/netcore50/zh-hant/System.Threading.xml",
6142+ "ref/netstandard1.0/System.Threading.dll",
6143+ "ref/netstandard1.0/System.Threading.xml",
6144+ "ref/netstandard1.0/de/System.Threading.xml",
6145+ "ref/netstandard1.0/es/System.Threading.xml",
6146+ "ref/netstandard1.0/fr/System.Threading.xml",
6147+ "ref/netstandard1.0/it/System.Threading.xml",
6148+ "ref/netstandard1.0/ja/System.Threading.xml",
6149+ "ref/netstandard1.0/ko/System.Threading.xml",
6150+ "ref/netstandard1.0/ru/System.Threading.xml",
6151+ "ref/netstandard1.0/zh-hans/System.Threading.xml",
6152+ "ref/netstandard1.0/zh-hant/System.Threading.xml",
6153+ "ref/netstandard1.3/System.Threading.dll",
6154+ "ref/netstandard1.3/System.Threading.xml",
6155+ "ref/netstandard1.3/de/System.Threading.xml",
6156+ "ref/netstandard1.3/es/System.Threading.xml",
6157+ "ref/netstandard1.3/fr/System.Threading.xml",
6158+ "ref/netstandard1.3/it/System.Threading.xml",
6159+ "ref/netstandard1.3/ja/System.Threading.xml",
6160+ "ref/netstandard1.3/ko/System.Threading.xml",
6161+ "ref/netstandard1.3/ru/System.Threading.xml",
6162+ "ref/netstandard1.3/zh-hans/System.Threading.xml",
6163+ "ref/netstandard1.3/zh-hant/System.Threading.xml",
6164+ "ref/portable-net45+win8+wp8+wpa81/_._",
6165+ "ref/win8/_._",
6166+ "ref/wp80/_._",
6167+ "ref/wpa81/_._",
6168+ "ref/xamarinios10/_._",
6169+ "ref/xamarinmac20/_._",
6170+ "ref/xamarintvos10/_._",
6171+ "ref/xamarinwatchos10/_._",
6172+ "runtimes/aot/lib/netcore50/System.Threading.dll"
6173+ ]
6174+ },
6175+ "System.Threading.Overlapped/4.0.1": {
6176+ "sha512": "i4TFJn9x/ItIURnFrCtt38dGEcRadrvtJZ0f1ooNpywjWQCFPu6rm1AnQ0Kx+7kMgwkx1P/VLrDCiFx1GMh94w==",
6177+ "type": "package",
6178+ "path": "System.Threading.Overlapped/4.0.1",
6179+ "files": [
6180+ "System.Threading.Overlapped.4.0.1.nupkg.sha512",
6181+ "System.Threading.Overlapped.nuspec",
6182+ "ThirdPartyNotices.txt",
6183+ "dotnet_library_license.txt",
6184+ "lib/net46/System.Threading.Overlapped.dll",
6185+ "ref/net46/System.Threading.Overlapped.dll",
6186+ "ref/netstandard1.3/System.Threading.Overlapped.dll",
6187+ "ref/netstandard1.3/System.Threading.Overlapped.xml",
6188+ "ref/netstandard1.3/de/System.Threading.Overlapped.xml",
6189+ "ref/netstandard1.3/es/System.Threading.Overlapped.xml",
6190+ "ref/netstandard1.3/fr/System.Threading.Overlapped.xml",
6191+ "ref/netstandard1.3/it/System.Threading.Overlapped.xml",
6192+ "ref/netstandard1.3/ja/System.Threading.Overlapped.xml",
6193+ "ref/netstandard1.3/ko/System.Threading.Overlapped.xml",
6194+ "ref/netstandard1.3/ru/System.Threading.Overlapped.xml",
6195+ "ref/netstandard1.3/zh-hans/System.Threading.Overlapped.xml",
6196+ "ref/netstandard1.3/zh-hant/System.Threading.Overlapped.xml",
6197+ "runtimes/unix/lib/netstandard1.3/System.Threading.Overlapped.dll",
6198+ "runtimes/win/lib/net46/System.Threading.Overlapped.dll",
6199+ "runtimes/win/lib/netcore50/System.Threading.Overlapped.dll",
6200+ "runtimes/win/lib/netstandard1.3/System.Threading.Overlapped.dll"
6201+ ]
6202+ },
6203+ "System.Threading.Tasks/4.0.11": {
6204+ "sha512": "8dx7BKkXtbEuLYR+D99ZBz6xoEvmAyK+uk4j3kIbSC730jeIfh2KFECHztuHI/9jMHGWCXZlVpw4XJevgpAweQ==",
6205+ "type": "package",
6206+ "path": "System.Threading.Tasks/4.0.11",
6207+ "files": [
6208+ "System.Threading.Tasks.4.0.11.nupkg.sha512",
6209+ "System.Threading.Tasks.nuspec",
6210+ "ThirdPartyNotices.txt",
6211+ "dotnet_library_license.txt",
6212+ "lib/MonoAndroid10/_._",
6213+ "lib/MonoTouch10/_._",
6214+ "lib/net45/_._",
6215+ "lib/portable-net45+win8+wp8+wpa81/_._",
6216+ "lib/win8/_._",
6217+ "lib/wp80/_._",
6218+ "lib/wpa81/_._",
6219+ "lib/xamarinios10/_._",
6220+ "lib/xamarinmac20/_._",
6221+ "lib/xamarintvos10/_._",
6222+ "lib/xamarinwatchos10/_._",
6223+ "ref/MonoAndroid10/_._",
6224+ "ref/MonoTouch10/_._",
6225+ "ref/net45/_._",
6226+ "ref/netcore50/System.Threading.Tasks.dll",
6227+ "ref/netcore50/System.Threading.Tasks.xml",
6228+ "ref/netcore50/de/System.Threading.Tasks.xml",
6229+ "ref/netcore50/es/System.Threading.Tasks.xml",
6230+ "ref/netcore50/fr/System.Threading.Tasks.xml",
6231+ "ref/netcore50/it/System.Threading.Tasks.xml",
6232+ "ref/netcore50/ja/System.Threading.Tasks.xml",
6233+ "ref/netcore50/ko/System.Threading.Tasks.xml",
6234+ "ref/netcore50/ru/System.Threading.Tasks.xml",
6235+ "ref/netcore50/zh-hans/System.Threading.Tasks.xml",
6236+ "ref/netcore50/zh-hant/System.Threading.Tasks.xml",
6237+ "ref/netstandard1.0/System.Threading.Tasks.dll",
6238+ "ref/netstandard1.0/System.Threading.Tasks.xml",
6239+ "ref/netstandard1.0/de/System.Threading.Tasks.xml",
6240+ "ref/netstandard1.0/es/System.Threading.Tasks.xml",
6241+ "ref/netstandard1.0/fr/System.Threading.Tasks.xml",
6242+ "ref/netstandard1.0/it/System.Threading.Tasks.xml",
6243+ "ref/netstandard1.0/ja/System.Threading.Tasks.xml",
6244+ "ref/netstandard1.0/ko/System.Threading.Tasks.xml",
6245+ "ref/netstandard1.0/ru/System.Threading.Tasks.xml",
6246+ "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml",
6247+ "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml",
6248+ "ref/netstandard1.3/System.Threading.Tasks.dll",
6249+ "ref/netstandard1.3/System.Threading.Tasks.xml",
6250+ "ref/netstandard1.3/de/System.Threading.Tasks.xml",
6251+ "ref/netstandard1.3/es/System.Threading.Tasks.xml",
6252+ "ref/netstandard1.3/fr/System.Threading.Tasks.xml",
6253+ "ref/netstandard1.3/it/System.Threading.Tasks.xml",
6254+ "ref/netstandard1.3/ja/System.Threading.Tasks.xml",
6255+ "ref/netstandard1.3/ko/System.Threading.Tasks.xml",
6256+ "ref/netstandard1.3/ru/System.Threading.Tasks.xml",
6257+ "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml",
6258+ "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml",
6259+ "ref/portable-net45+win8+wp8+wpa81/_._",
6260+ "ref/win8/_._",
6261+ "ref/wp80/_._",
6262+ "ref/wpa81/_._",
6263+ "ref/xamarinios10/_._",
6264+ "ref/xamarinmac20/_._",
6265+ "ref/xamarintvos10/_._",
6266+ "ref/xamarinwatchos10/_._"
6267+ ]
6268+ },
6269+ "System.Threading.Tasks.Dataflow/4.6.0": {
6270+ "sha512": "MyOVg+TfJE75GjXQwOYMJF/VLuVvLgRPKCG9e2Rci5PBk+lmFyvMUsqwsZIPiVd17fVkrYQ4PG9pe3PTRifYmQ==",
6271+ "type": "package",
6272+ "path": "System.Threading.Tasks.Dataflow/4.6.0",
6273+ "files": [
6274+ "System.Threading.Tasks.Dataflow.4.6.0.nupkg.sha512",
6275+ "System.Threading.Tasks.Dataflow.nuspec",
6276+ "ThirdPartyNotices.txt",
6277+ "dotnet_library_license.txt",
6278+ "lib/netstandard1.0/System.Threading.Tasks.Dataflow.XML",
6279+ "lib/netstandard1.0/System.Threading.Tasks.Dataflow.dll",
6280+ "lib/netstandard1.1/System.Threading.Tasks.Dataflow.XML",
6281+ "lib/netstandard1.1/System.Threading.Tasks.Dataflow.dll"
6282+ ]
6283+ },
6284+ "System.Threading.Tasks.Extensions/4.0.0": {
6285+ "sha512": "CEb+Dxk1mpyLjMSdShNL/36ZxzbSiW7ti8GOs8xVEui5gv3xHqPDOHNfY/MCnyne4x/gYEkds0ai/X9KCgUoyw==",
6286+ "type": "package",
6287+ "path": "System.Threading.Tasks.Extensions/4.0.0",
6288+ "files": [
6289+ "System.Threading.Tasks.Extensions.4.0.0.nupkg.sha512",
6290+ "System.Threading.Tasks.Extensions.nuspec",
6291+ "ThirdPartyNotices.txt",
6292+ "dotnet_library_license.txt",
6293+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll",
6294+ "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml",
6295+ "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll",
6296+ "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml"
6297+ ]
6298+ },
6299+ "System.Threading.Tasks.Parallel/4.0.1": {
6300+ "sha512": "Y0MBvfr+Z6ojLsIsTmjZ37EB2cGg7nUV8y1uyKIDk0CUg3njckhIfpoWL599Jf15EUO2m1tkCcehcRQrEQX4XQ==",
6301+ "type": "package",
6302+ "path": "System.Threading.Tasks.Parallel/4.0.1",
6303+ "files": [
6304+ "System.Threading.Tasks.Parallel.4.0.1.nupkg.sha512",
6305+ "System.Threading.Tasks.Parallel.nuspec",
6306+ "ThirdPartyNotices.txt",
6307+ "dotnet_library_license.txt",
6308+ "lib/MonoAndroid10/_._",
6309+ "lib/MonoTouch10/_._",
6310+ "lib/net45/_._",
6311+ "lib/netcore50/System.Threading.Tasks.Parallel.dll",
6312+ "lib/netstandard1.3/System.Threading.Tasks.Parallel.dll",
6313+ "lib/portable-net45+win8+wpa81/_._",
6314+ "lib/win8/_._",
6315+ "lib/wpa81/_._",
6316+ "lib/xamarinios10/_._",
6317+ "lib/xamarinmac20/_._",
6318+ "lib/xamarintvos10/_._",
6319+ "lib/xamarinwatchos10/_._",
6320+ "ref/MonoAndroid10/_._",
6321+ "ref/MonoTouch10/_._",
6322+ "ref/net45/_._",
6323+ "ref/netcore50/System.Threading.Tasks.Parallel.dll",
6324+ "ref/netcore50/System.Threading.Tasks.Parallel.xml",
6325+ "ref/netcore50/de/System.Threading.Tasks.Parallel.xml",
6326+ "ref/netcore50/es/System.Threading.Tasks.Parallel.xml",
6327+ "ref/netcore50/fr/System.Threading.Tasks.Parallel.xml",
6328+ "ref/netcore50/it/System.Threading.Tasks.Parallel.xml",
6329+ "ref/netcore50/ja/System.Threading.Tasks.Parallel.xml",
6330+ "ref/netcore50/ko/System.Threading.Tasks.Parallel.xml",
6331+ "ref/netcore50/ru/System.Threading.Tasks.Parallel.xml",
6332+ "ref/netcore50/zh-hans/System.Threading.Tasks.Parallel.xml",
6333+ "ref/netcore50/zh-hant/System.Threading.Tasks.Parallel.xml",
6334+ "ref/netstandard1.1/System.Threading.Tasks.Parallel.dll",
6335+ "ref/netstandard1.1/System.Threading.Tasks.Parallel.xml",
6336+ "ref/netstandard1.1/de/System.Threading.Tasks.Parallel.xml",
6337+ "ref/netstandard1.1/es/System.Threading.Tasks.Parallel.xml",
6338+ "ref/netstandard1.1/fr/System.Threading.Tasks.Parallel.xml",
6339+ "ref/netstandard1.1/it/System.Threading.Tasks.Parallel.xml",
6340+ "ref/netstandard1.1/ja/System.Threading.Tasks.Parallel.xml",
6341+ "ref/netstandard1.1/ko/System.Threading.Tasks.Parallel.xml",
6342+ "ref/netstandard1.1/ru/System.Threading.Tasks.Parallel.xml",
6343+ "ref/netstandard1.1/zh-hans/System.Threading.Tasks.Parallel.xml",
6344+ "ref/netstandard1.1/zh-hant/System.Threading.Tasks.Parallel.xml",
6345+ "ref/portable-net45+win8+wpa81/_._",
6346+ "ref/win8/_._",
6347+ "ref/wpa81/_._",
6348+ "ref/xamarinios10/_._",
6349+ "ref/xamarinmac20/_._",
6350+ "ref/xamarintvos10/_._",
6351+ "ref/xamarinwatchos10/_._"
6352+ ]
6353+ },
6354+ "System.Threading.Thread/4.0.0": {
6355+ "sha512": "NRqCZ+KcpDqPa8pgFLiUAdE1xEh4iI01lIwLxEjImlzPveSo3EuS0xJgLZHT5eOg7BZ4yfTuuT/3JmXi0aJ0IA==",
6356+ "type": "package",
6357+ "path": "System.Threading.Thread/4.0.0",
6358+ "files": [
6359+ "System.Threading.Thread.4.0.0.nupkg.sha512",
6360+ "System.Threading.Thread.nuspec",
6361+ "ThirdPartyNotices.txt",
6362+ "dotnet_library_license.txt",
6363+ "lib/MonoAndroid10/_._",
6364+ "lib/MonoTouch10/_._",
6365+ "lib/net46/System.Threading.Thread.dll",
6366+ "lib/netcore50/_._",
6367+ "lib/netstandard1.3/System.Threading.Thread.dll",
6368+ "lib/xamarinios10/_._",
6369+ "lib/xamarinmac20/_._",
6370+ "lib/xamarintvos10/_._",
6371+ "lib/xamarinwatchos10/_._",
6372+ "ref/MonoAndroid10/_._",
6373+ "ref/MonoTouch10/_._",
6374+ "ref/net46/System.Threading.Thread.dll",
6375+ "ref/netstandard1.3/System.Threading.Thread.dll",
6376+ "ref/netstandard1.3/System.Threading.Thread.xml",
6377+ "ref/netstandard1.3/de/System.Threading.Thread.xml",
6378+ "ref/netstandard1.3/es/System.Threading.Thread.xml",
6379+ "ref/netstandard1.3/fr/System.Threading.Thread.xml",
6380+ "ref/netstandard1.3/it/System.Threading.Thread.xml",
6381+ "ref/netstandard1.3/ja/System.Threading.Thread.xml",
6382+ "ref/netstandard1.3/ko/System.Threading.Thread.xml",
6383+ "ref/netstandard1.3/ru/System.Threading.Thread.xml",
6384+ "ref/netstandard1.3/zh-hans/System.Threading.Thread.xml",
6385+ "ref/netstandard1.3/zh-hant/System.Threading.Thread.xml",
6386+ "ref/xamarinios10/_._",
6387+ "ref/xamarinmac20/_._",
6388+ "ref/xamarintvos10/_._",
6389+ "ref/xamarinwatchos10/_._"
6390+ ]
6391+ },
6392+ "System.Threading.ThreadPool/4.0.10": {
6393+ "sha512": "PqObppfzXpCiZ4oVYhvDQCeqgcb3jMYCdAzZcBmu2e4toUKxauZccbgV0LAqGpoHNbPuMzQYvcSFsidjHM/b6w==",
6394+ "type": "package",
6395+ "path": "System.Threading.ThreadPool/4.0.10",
6396+ "files": [
6397+ "System.Threading.ThreadPool.4.0.10.nupkg.sha512",
6398+ "System.Threading.ThreadPool.nuspec",
6399+ "ThirdPartyNotices.txt",
6400+ "dotnet_library_license.txt",
6401+ "lib/MonoAndroid10/_._",
6402+ "lib/MonoTouch10/_._",
6403+ "lib/net46/System.Threading.ThreadPool.dll",
6404+ "lib/netcore50/_._",
6405+ "lib/netstandard1.3/System.Threading.ThreadPool.dll",
6406+ "lib/xamarinios10/_._",
6407+ "lib/xamarinmac20/_._",
6408+ "lib/xamarintvos10/_._",
6409+ "lib/xamarinwatchos10/_._",
6410+ "ref/MonoAndroid10/_._",
6411+ "ref/MonoTouch10/_._",
6412+ "ref/net46/System.Threading.ThreadPool.dll",
6413+ "ref/netstandard1.3/System.Threading.ThreadPool.dll",
6414+ "ref/netstandard1.3/System.Threading.ThreadPool.xml",
6415+ "ref/netstandard1.3/de/System.Threading.ThreadPool.xml",
6416+ "ref/netstandard1.3/es/System.Threading.ThreadPool.xml",
6417+ "ref/netstandard1.3/fr/System.Threading.ThreadPool.xml",
6418+ "ref/netstandard1.3/it/System.Threading.ThreadPool.xml",
6419+ "ref/netstandard1.3/ja/System.Threading.ThreadPool.xml",
6420+ "ref/netstandard1.3/ko/System.Threading.ThreadPool.xml",
6421+ "ref/netstandard1.3/ru/System.Threading.ThreadPool.xml",
6422+ "ref/netstandard1.3/zh-hans/System.Threading.ThreadPool.xml",
6423+ "ref/netstandard1.3/zh-hant/System.Threading.ThreadPool.xml",
6424+ "ref/xamarinios10/_._",
6425+ "ref/xamarinmac20/_._",
6426+ "ref/xamarintvos10/_._",
6427+ "ref/xamarinwatchos10/_._"
6428+ ]
6429+ },
6430+ "System.Threading.Timer/4.0.1": {
6431+ "sha512": "XqyRQNBWn8ufOUunRZSOb3pvCw8yFYNEcdsFv7Fweln9kM3tewTPdQYqFWM8dSF7l0xvE6IVc6plNkPVq+JSKQ==",
6432+ "type": "package",
6433+ "path": "System.Threading.Timer/4.0.1",
6434+ "files": [
6435+ "System.Threading.Timer.4.0.1.nupkg.sha512",
6436+ "System.Threading.Timer.nuspec",
6437+ "ThirdPartyNotices.txt",
6438+ "dotnet_library_license.txt",
6439+ "lib/MonoAndroid10/_._",
6440+ "lib/MonoTouch10/_._",
6441+ "lib/net451/_._",
6442+ "lib/portable-net451+win81+wpa81/_._",
6443+ "lib/win81/_._",
6444+ "lib/wpa81/_._",
6445+ "lib/xamarinios10/_._",
6446+ "lib/xamarinmac20/_._",
6447+ "lib/xamarintvos10/_._",
6448+ "lib/xamarinwatchos10/_._",
6449+ "ref/MonoAndroid10/_._",
6450+ "ref/MonoTouch10/_._",
6451+ "ref/net451/_._",
6452+ "ref/netcore50/System.Threading.Timer.dll",
6453+ "ref/netcore50/System.Threading.Timer.xml",
6454+ "ref/netcore50/de/System.Threading.Timer.xml",
6455+ "ref/netcore50/es/System.Threading.Timer.xml",
6456+ "ref/netcore50/fr/System.Threading.Timer.xml",
6457+ "ref/netcore50/it/System.Threading.Timer.xml",
6458+ "ref/netcore50/ja/System.Threading.Timer.xml",
6459+ "ref/netcore50/ko/System.Threading.Timer.xml",
6460+ "ref/netcore50/ru/System.Threading.Timer.xml",
6461+ "ref/netcore50/zh-hans/System.Threading.Timer.xml",
6462+ "ref/netcore50/zh-hant/System.Threading.Timer.xml",
6463+ "ref/netstandard1.2/System.Threading.Timer.dll",
6464+ "ref/netstandard1.2/System.Threading.Timer.xml",
6465+ "ref/netstandard1.2/de/System.Threading.Timer.xml",
6466+ "ref/netstandard1.2/es/System.Threading.Timer.xml",
6467+ "ref/netstandard1.2/fr/System.Threading.Timer.xml",
6468+ "ref/netstandard1.2/it/System.Threading.Timer.xml",
6469+ "ref/netstandard1.2/ja/System.Threading.Timer.xml",
6470+ "ref/netstandard1.2/ko/System.Threading.Timer.xml",
6471+ "ref/netstandard1.2/ru/System.Threading.Timer.xml",
6472+ "ref/netstandard1.2/zh-hans/System.Threading.Timer.xml",
6473+ "ref/netstandard1.2/zh-hant/System.Threading.Timer.xml",
6474+ "ref/portable-net451+win81+wpa81/_._",
6475+ "ref/win81/_._",
6476+ "ref/wpa81/_._",
6477+ "ref/xamarinios10/_._",
6478+ "ref/xamarinmac20/_._",
6479+ "ref/xamarintvos10/_._",
6480+ "ref/xamarinwatchos10/_._"
6481+ ]
6482+ },
6483+ "System.Xml.ReaderWriter/4.0.11": {
6484+ "sha512": "dHSnMBUB+j+IaErbR/agsq+dhUq7LOK4YD6Hi9oT1lqcTCJlVNUafBu6UYIRJl/uyHBZDztSvJn0AsUjJsCUNQ==",
6485+ "type": "package",
6486+ "path": "System.Xml.ReaderWriter/4.0.11",
6487+ "files": [
6488+ "System.Xml.ReaderWriter.4.0.11.nupkg.sha512",
6489+ "System.Xml.ReaderWriter.nuspec",
6490+ "ThirdPartyNotices.txt",
6491+ "dotnet_library_license.txt",
6492+ "lib/MonoAndroid10/_._",
6493+ "lib/MonoTouch10/_._",
6494+ "lib/net45/_._",
6495+ "lib/netcore50/System.Xml.ReaderWriter.dll",
6496+ "lib/netstandard1.3/System.Xml.ReaderWriter.dll",
6497+ "lib/portable-net45+win8+wp8+wpa81/_._",
6498+ "lib/win8/_._",
6499+ "lib/wp80/_._",
6500+ "lib/wpa81/_._",
6501+ "lib/xamarinios10/_._",
6502+ "lib/xamarinmac20/_._",
6503+ "lib/xamarintvos10/_._",
6504+ "lib/xamarinwatchos10/_._",
6505+ "ref/MonoAndroid10/_._",
6506+ "ref/MonoTouch10/_._",
6507+ "ref/net45/_._",
6508+ "ref/netcore50/System.Xml.ReaderWriter.dll",
6509+ "ref/netcore50/System.Xml.ReaderWriter.xml",
6510+ "ref/netcore50/de/System.Xml.ReaderWriter.xml",
6511+ "ref/netcore50/es/System.Xml.ReaderWriter.xml",
6512+ "ref/netcore50/fr/System.Xml.ReaderWriter.xml",
6513+ "ref/netcore50/it/System.Xml.ReaderWriter.xml",
6514+ "ref/netcore50/ja/System.Xml.ReaderWriter.xml",
6515+ "ref/netcore50/ko/System.Xml.ReaderWriter.xml",
6516+ "ref/netcore50/ru/System.Xml.ReaderWriter.xml",
6517+ "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml",
6518+ "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml",
6519+ "ref/netstandard1.0/System.Xml.ReaderWriter.dll",
6520+ "ref/netstandard1.0/System.Xml.ReaderWriter.xml",
6521+ "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml",
6522+ "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml",
6523+ "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml",
6524+ "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml",
6525+ "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml",
6526+ "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml",
6527+ "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml",
6528+ "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml",
6529+ "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml",
6530+ "ref/netstandard1.3/System.Xml.ReaderWriter.dll",
6531+ "ref/netstandard1.3/System.Xml.ReaderWriter.xml",
6532+ "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml",
6533+ "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml",
6534+ "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml",
6535+ "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml",
6536+ "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml",
6537+ "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml",
6538+ "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml",
6539+ "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml",
6540+ "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml",
6541+ "ref/portable-net45+win8+wp8+wpa81/_._",
6542+ "ref/win8/_._",
6543+ "ref/wp80/_._",
6544+ "ref/wpa81/_._",
6545+ "ref/xamarinios10/_._",
6546+ "ref/xamarinmac20/_._",
6547+ "ref/xamarintvos10/_._",
6548+ "ref/xamarinwatchos10/_._"
6549+ ]
6550+ },
6551+ "System.Xml.XDocument/4.0.11": {
6552+ "sha512": "XLHQfydc7p2RbCzj5ihEHGdqBWoxvcvEJqHp6Ai3GSfI0V8AaDf3EiJGz7OxUmsJ9Ul+Y3BqptgdaJJ+xwEbhQ==",
6553+ "type": "package",
6554+ "path": "System.Xml.XDocument/4.0.11",
6555+ "files": [
6556+ "System.Xml.XDocument.4.0.11.nupkg.sha512",
6557+ "System.Xml.XDocument.nuspec",
6558+ "ThirdPartyNotices.txt",
6559+ "dotnet_library_license.txt",
6560+ "lib/MonoAndroid10/_._",
6561+ "lib/MonoTouch10/_._",
6562+ "lib/net45/_._",
6563+ "lib/netcore50/System.Xml.XDocument.dll",
6564+ "lib/netstandard1.3/System.Xml.XDocument.dll",
6565+ "lib/portable-net45+win8+wp8+wpa81/_._",
6566+ "lib/win8/_._",
6567+ "lib/wp80/_._",
6568+ "lib/wpa81/_._",
6569+ "lib/xamarinios10/_._",
6570+ "lib/xamarinmac20/_._",
6571+ "lib/xamarintvos10/_._",
6572+ "lib/xamarinwatchos10/_._",
6573+ "ref/MonoAndroid10/_._",
6574+ "ref/MonoTouch10/_._",
6575+ "ref/net45/_._",
6576+ "ref/netcore50/System.Xml.XDocument.dll",
6577+ "ref/netcore50/System.Xml.XDocument.xml",
6578+ "ref/netcore50/de/System.Xml.XDocument.xml",
6579+ "ref/netcore50/es/System.Xml.XDocument.xml",
6580+ "ref/netcore50/fr/System.Xml.XDocument.xml",
6581+ "ref/netcore50/it/System.Xml.XDocument.xml",
6582+ "ref/netcore50/ja/System.Xml.XDocument.xml",
6583+ "ref/netcore50/ko/System.Xml.XDocument.xml",
6584+ "ref/netcore50/ru/System.Xml.XDocument.xml",
6585+ "ref/netcore50/zh-hans/System.Xml.XDocument.xml",
6586+ "ref/netcore50/zh-hant/System.Xml.XDocument.xml",
6587+ "ref/netstandard1.0/System.Xml.XDocument.dll",
6588+ "ref/netstandard1.0/System.Xml.XDocument.xml",
6589+ "ref/netstandard1.0/de/System.Xml.XDocument.xml",
6590+ "ref/netstandard1.0/es/System.Xml.XDocument.xml",
6591+ "ref/netstandard1.0/fr/System.Xml.XDocument.xml",
6592+ "ref/netstandard1.0/it/System.Xml.XDocument.xml",
6593+ "ref/netstandard1.0/ja/System.Xml.XDocument.xml",
6594+ "ref/netstandard1.0/ko/System.Xml.XDocument.xml",
6595+ "ref/netstandard1.0/ru/System.Xml.XDocument.xml",
6596+ "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml",
6597+ "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml",
6598+ "ref/netstandard1.3/System.Xml.XDocument.dll",
6599+ "ref/netstandard1.3/System.Xml.XDocument.xml",
6600+ "ref/netstandard1.3/de/System.Xml.XDocument.xml",
6601+ "ref/netstandard1.3/es/System.Xml.XDocument.xml",
6602+ "ref/netstandard1.3/fr/System.Xml.XDocument.xml",
6603+ "ref/netstandard1.3/it/System.Xml.XDocument.xml",
6604+ "ref/netstandard1.3/ja/System.Xml.XDocument.xml",
6605+ "ref/netstandard1.3/ko/System.Xml.XDocument.xml",
6606+ "ref/netstandard1.3/ru/System.Xml.XDocument.xml",
6607+ "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml",
6608+ "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml",
6609+ "ref/portable-net45+win8+wp8+wpa81/_._",
6610+ "ref/win8/_._",
6611+ "ref/wp80/_._",
6612+ "ref/wpa81/_._",
6613+ "ref/xamarinios10/_._",
6614+ "ref/xamarinmac20/_._",
6615+ "ref/xamarintvos10/_._",
6616+ "ref/xamarinwatchos10/_._"
6617+ ]
6618+ },
6619+ "System.Xml.XmlDocument/4.0.1": {
6620+ "sha512": "N+iCqYdwMsMbCJwmq0GLQ3LcqbNHAykiDiOAxPMAvtbUjQCkJ6rnmA1056PcHCn2+mYQMNYvSNkeuB2MkMlXhg==",
6621+ "type": "package",
6622+ "path": "System.Xml.XmlDocument/4.0.1",
6623+ "files": [
6624+ "System.Xml.XmlDocument.4.0.1.nupkg.sha512",
6625+ "System.Xml.XmlDocument.nuspec",
6626+ "ThirdPartyNotices.txt",
6627+ "dotnet_library_license.txt",
6628+ "lib/MonoAndroid10/_._",
6629+ "lib/MonoTouch10/_._",
6630+ "lib/net46/System.Xml.XmlDocument.dll",
6631+ "lib/netstandard1.3/System.Xml.XmlDocument.dll",
6632+ "lib/xamarinios10/_._",
6633+ "lib/xamarinmac20/_._",
6634+ "lib/xamarintvos10/_._",
6635+ "lib/xamarinwatchos10/_._",
6636+ "ref/MonoAndroid10/_._",
6637+ "ref/MonoTouch10/_._",
6638+ "ref/net46/System.Xml.XmlDocument.dll",
6639+ "ref/netstandard1.3/System.Xml.XmlDocument.dll",
6640+ "ref/netstandard1.3/System.Xml.XmlDocument.xml",
6641+ "ref/netstandard1.3/de/System.Xml.XmlDocument.xml",
6642+ "ref/netstandard1.3/es/System.Xml.XmlDocument.xml",
6643+ "ref/netstandard1.3/fr/System.Xml.XmlDocument.xml",
6644+ "ref/netstandard1.3/it/System.Xml.XmlDocument.xml",
6645+ "ref/netstandard1.3/ja/System.Xml.XmlDocument.xml",
6646+ "ref/netstandard1.3/ko/System.Xml.XmlDocument.xml",
6647+ "ref/netstandard1.3/ru/System.Xml.XmlDocument.xml",
6648+ "ref/netstandard1.3/zh-hans/System.Xml.XmlDocument.xml",
6649+ "ref/netstandard1.3/zh-hant/System.Xml.XmlDocument.xml",
6650+ "ref/xamarinios10/_._",
6651+ "ref/xamarinmac20/_._",
6652+ "ref/xamarintvos10/_._",
6653+ "ref/xamarinwatchos10/_._"
6654+ ]
6655+ },
6656+ "System.Xml.XPath/4.0.1": {
6657+ "sha512": "IEz24tPX9CmGFq3/ml1FrqFfZhIWUdWGcCcYb8o8C5c49QxE8oddNicB7+s7leqkoc9y+iwX+ROV4czAry5MxA==",
6658+ "type": "package",
6659+ "path": "System.Xml.XPath/4.0.1",
6660+ "files": [
6661+ "System.Xml.XPath.4.0.1.nupkg.sha512",
6662+ "System.Xml.XPath.nuspec",
6663+ "ThirdPartyNotices.txt",
6664+ "dotnet_library_license.txt",
6665+ "lib/MonoAndroid10/_._",
6666+ "lib/MonoTouch10/_._",
6667+ "lib/net46/System.Xml.XPath.dll",
6668+ "lib/netstandard1.3/System.Xml.XPath.dll",
6669+ "lib/xamarinios10/_._",
6670+ "lib/xamarinmac20/_._",
6671+ "lib/xamarintvos10/_._",
6672+ "lib/xamarinwatchos10/_._",
6673+ "ref/MonoAndroid10/_._",
6674+ "ref/MonoTouch10/_._",
6675+ "ref/net46/System.Xml.XPath.dll",
6676+ "ref/netstandard1.3/System.Xml.XPath.dll",
6677+ "ref/netstandard1.3/System.Xml.XPath.xml",
6678+ "ref/netstandard1.3/de/System.Xml.XPath.xml",
6679+ "ref/netstandard1.3/es/System.Xml.XPath.xml",
6680+ "ref/netstandard1.3/fr/System.Xml.XPath.xml",
6681+ "ref/netstandard1.3/it/System.Xml.XPath.xml",
6682+ "ref/netstandard1.3/ja/System.Xml.XPath.xml",
6683+ "ref/netstandard1.3/ko/System.Xml.XPath.xml",
6684+ "ref/netstandard1.3/ru/System.Xml.XPath.xml",
6685+ "ref/netstandard1.3/zh-hans/System.Xml.XPath.xml",
6686+ "ref/netstandard1.3/zh-hant/System.Xml.XPath.xml",
6687+ "ref/xamarinios10/_._",
6688+ "ref/xamarinmac20/_._",
6689+ "ref/xamarintvos10/_._",
6690+ "ref/xamarinwatchos10/_._"
6691+ ]
6692+ },
6693+ "System.Xml.XPath.XDocument/4.0.1": {
6694+ "sha512": "Ss+3IwdbmGeUvnRogYM6WhQjP7uxp/wlXMa/GlZLv4HR+xlazQxxJkDA55IhLePeuSC/fkNiIY1W1QvfYnVf/g==",
6695+ "type": "package",
6696+ "path": "System.Xml.XPath.XDocument/4.0.1",
6697+ "files": [
6698+ "System.Xml.XPath.XDocument.4.0.1.nupkg.sha512",
6699+ "System.Xml.XPath.XDocument.nuspec",
6700+ "ThirdPartyNotices.txt",
6701+ "dotnet_library_license.txt",
6702+ "lib/MonoAndroid10/_._",
6703+ "lib/MonoTouch10/_._",
6704+ "lib/net46/System.Xml.XPath.XDocument.dll",
6705+ "lib/netstandard1.3/System.Xml.XPath.XDocument.dll",
6706+ "lib/xamarinios10/_._",
6707+ "lib/xamarinmac20/_._",
6708+ "lib/xamarintvos10/_._",
6709+ "lib/xamarinwatchos10/_._",
6710+ "ref/MonoAndroid10/_._",
6711+ "ref/MonoTouch10/_._",
6712+ "ref/net46/System.Xml.XPath.XDocument.dll",
6713+ "ref/netstandard1.3/System.Xml.XPath.XDocument.dll",
6714+ "ref/netstandard1.3/System.Xml.XPath.XDocument.xml",
6715+ "ref/netstandard1.3/de/System.Xml.XPath.XDocument.xml",
6716+ "ref/netstandard1.3/es/System.Xml.XPath.XDocument.xml",
6717+ "ref/netstandard1.3/fr/System.Xml.XPath.XDocument.xml",
6718+ "ref/netstandard1.3/it/System.Xml.XPath.XDocument.xml",
6719+ "ref/netstandard1.3/ja/System.Xml.XPath.XDocument.xml",
6720+ "ref/netstandard1.3/ko/System.Xml.XPath.XDocument.xml",
6721+ "ref/netstandard1.3/ru/System.Xml.XPath.XDocument.xml",
6722+ "ref/netstandard1.3/zh-hans/System.Xml.XPath.XDocument.xml",
6723+ "ref/netstandard1.3/zh-hant/System.Xml.XPath.XDocument.xml",
6724+ "ref/xamarinios10/_._",
6725+ "ref/xamarinmac20/_._",
6726+ "ref/xamarintvos10/_._",
6727+ "ref/xamarinwatchos10/_._"
6728+ ]
6729+ }
6730+ },
6731+ "projectFileDependencyGroups": {
6732+ "": [
6733+ "Newtonsoft.Json >= 9.0.1"
6734+ ],
6735+ ".NETCoreApp,Version=v1.0": [
6736+ "Microsoft.NETCore.App >= 1.0.1"
6737+ ]
6738+ },
6739+ "tools": {},
6740+ "projectFileToolGroups": {}
6741+}
tests/JSONTestSuite/parsers/test_Lua_JSON/JSON.luanew file+1451

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_Lua_JSON/test_JSON.luanew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/bin/test_ObjCNSJSONSerializernew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.pbxprojnew file+246

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_ObjCNSJSONSerializer.xcschemenew file+97

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.outnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.out.dSYM/Contents/Info.plistnew file+20

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/a.out.dSYM/Contents/Resources/DWARF/a.outnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/findings_dir/plot_datanew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ObjCNSJSONSerializer/test_ObjCNSJSONSerializer/main.mnew file+32

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Accessors.swiftnew file+255

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/DecimalNumber.swiftnew file+236

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Decoder.swiftnew file+294

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Encoder.swiftnew file+167

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSON.swiftnew file+170

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSONError.swiftnew file+1619

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/JSONObject.swiftnew file+215

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/ObjectiveC.swiftnew file+233

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/Parser.swiftnew file+674

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/bin/test_PMJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.pbxprojnew file+296

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_PMJSON.xcschemenew file+97

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_1_0/test_PMJSON/main.swiftnew file+46

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Accessors.swiftnew file+255

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/DecimalNumber.swiftnew file+236

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Decoder.swiftnew file+502

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Encoder.swiftnew file+215

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSON.swiftnew file+170

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSONError.swiftnew file+1619

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/JSONObject.swiftnew file+215

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/ObjectiveC.swiftnew file+331

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/Parser.swiftnew file+745

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/bin/test_PMJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.pbxprojnew file+296

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_PMJSON.xcschemenew file+97

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_PMJSON_1_2_0/test_PMJSON/main.swiftnew file+46

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4.hnew file+35

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Parser.hnew file+248

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Parser.mnew file+287

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParser.hnew file+131

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParser.mnew file+317

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParserState.hnew file+82

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamParserState.mnew file+355

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamTokeniser.hnew file+40

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamTokeniser.mnew file+395

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriter.hnew file+210

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriter.mnew file+358

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriterState.hnew file+69

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4StreamWriterState.mnew file+147

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Writer.hnew file+103

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/SBJson4Writer.mnew file+102

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/bin/test_SBJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.pbxprojnew file+290

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlistnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_SBJSON.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_SBJSON/test_SBJSON/main.mnew file+38

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.pbxprojnew file+361

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/xcshareddata/STJSON.xcscmblueprintnew file+30

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/STJSON.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/STJSONTests.xcschemenew file+56

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+32

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON/STJSONParser.swiftnew file+663

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSON/main.swiftnew file+47

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSONTests/Info.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/STJSONTests/STJSONTests.swiftnew file+92

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_STJSON/bin/STJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Info.plistnew file+563

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/MacOS/Squeaknew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/English.lproj/Localizable.stringsnew file+9

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/English.lproj/MainMenu.nibnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/Squeak.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakChanges.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakGeneric.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakImage.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakPlugin.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakProject.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakScript.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak.app/Contents/Resources/SqueakSources.icnsnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/Squeak5.1-16549-32bit.imagenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_Squeak_JSON_tonyg/test_JSON.stnew file+9

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/bin/test_TouchJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.pbxprojnew file+262

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_TouchJSON.xcschemenew file+97

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/CJSONDeserializer.hnew file+96

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/CJSONDeserializer.mnew file+1240

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_TouchJSON/test_TouchJSON/main.mnew file+25

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/bin/test-cJSONnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_cJSON/cJSON.cnew file+754

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/cJSON.hnew file+153

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.pbxprojnew file+257

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlistnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test-cJSON.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_cJSON/test-cJSON/main.cnew file+69

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/bin/test_ccannew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/common.hnew file+18

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_10.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_101.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_11.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_12.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_125.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_127.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_13.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_136.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_137.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_139.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_14.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_140.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_145.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_147.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_149.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_15.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_150.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_151.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_153.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_154.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_155.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_156.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_157.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_158.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_159.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_16.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_160.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_161.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_162.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_163.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_164.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_165.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_169.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_17.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_171.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_172.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_173.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_175.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_176.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_177.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_178.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_179.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_18.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_180.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_181.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_183.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_184.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_185.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_186.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_187.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_188.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_189.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_19.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_190.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_191.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_192.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_193.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_194.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_195.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_197.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_198.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_199.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_2.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_20.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_200.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_201.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_202.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_203.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_204.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_205.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_206.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_207.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_208.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_209.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_21.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_210.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_211.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_212.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_213.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_214.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_216.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_217.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_218.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_219.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_22.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_220.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_221.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_222.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_223.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_23.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_24.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_25.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_26.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_27.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_28.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_29.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_3.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_30.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_31.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_32.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_33.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_34.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_35.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_36.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_37.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_4.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_40.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_44.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_46.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_5.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_54.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_55.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_59.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_6.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_63.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_64.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_66.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_69.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_7.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_77.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_78.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_79.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_80.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_81.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_82.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_83.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_85.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_86.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_87.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_9.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/n_91.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_100.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_102.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_103.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_104.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_105.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_106.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_107.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_108.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_109.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_110.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_111.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_112.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_113.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_114.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_115.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_116.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_117.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_118.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_119.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_120.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_121.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_122.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_123.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_124.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_126.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_128.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_129.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_130.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_131.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_132.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_133.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_134.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_135.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_138.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_141.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_142.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_143.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_144.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_146.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_148.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_152.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_166.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_167.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_168.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_170.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_174.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_182.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_196.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_215.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_38.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_39.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_41.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_42.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_43.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_45.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_47.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_48.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_49.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_50.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_51.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_52.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_53.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_56.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_57.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_58.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_60.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_61.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_62.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_65.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_67.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_68.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_70.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_71.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_72.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_73.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_74.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_75.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_76.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_84.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_88.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_89.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_90.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_92.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_93.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_94.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_95.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_96.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_97.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_98.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/nst_files/y_99.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-construction.cnew file+191

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-decode-encode.cnew file+77

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-stringify.cnew file+108

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/run-validate.cnew file+49

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/test-stringsnew file+224

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/test-strings-reencodednew file+90

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/_test/x.pynew file+21

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/json.cnew file+1381

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/json/json.hnew file+117

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.pbxprojnew file+262

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_ccan.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_ccan_json/test_ccan/test_ccan/main.cnew file+44

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_dkjson.luanew file+25

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_go/test_jsonnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_go/test_json.gonew file+30

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/.gitignorenew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/package.yamlnew file+12

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/src/Main.hsnew file+29

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/stack.yamlnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/testaesonnew file+8

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_haskell-aeson/testaeson.cabalnew file+19

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/bin/test_janssonnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jansson/dump.cnew file+467

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/error.cnew file+63

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/hashtable.cnew file+356

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/hashtable.hnew file+184

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/hashtable_seed.cnew file+277

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/jansson.hnew file+298

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/jansson_config.hnew file+43

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/jansson_private.hnew file+109

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/load.cnew file+1110

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/lookup3.hnew file+381

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/memory.cnew file+69

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/pack_unpack.cnew file+871

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/strbuffer.cnew file+111

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/strbuffer.hnew file+34

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/strconv.cnew file+145

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.pbxprojnew file+309

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlistnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_jansson.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/test_jansson/main.cnew file+208

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/utf.cnew file+187

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/utf.hnew file+27

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jansson/value.cnew file+1048

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/META-INF/MANIFEST.MFnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/README.txtnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.classnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/TestJSONParsing.javanew file+40

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_com_leastfixedpoint_json_1_0/com.leastfixedpoint.json-1.0.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_gson_2_7/META-INF/MANIFEST.MFnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_gson_2_7/README.txtnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.classnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_gson_2_7/TestJSONParsing.javanew file+51

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_gson_2_7/gson-2.7.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/META-INF/MANIFEST.MFnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/README.txtnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.classnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/TestJSONParsing.javanew file+48

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-annotations-2.2.3.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-core-2.8.4.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_jackson_2_8_4/jackson-databind-2.3.1.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/META-INF/MANIFEST.MFnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/README.txtnew file+5

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.classnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/TestJSONParsing.javanew file+45

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_nanojson_1_0/nanojson-1.0.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/META-INF/MANIFEST.MFnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/README.txtnew file+3

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.classnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/TestJSONParsing.javanew file+43

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_java_simple_json_1_1_1/json-simple-1.1.1.jarnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsmn/bin/test_jsmnnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsmn/jsmn.cnew file+311

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/jsmn.hnew file+76

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.pbxprojnew file+253

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlistnew file+23

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_jsmn.xcschemenew file+101

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsmn/test_jsmn/test_jsmn/main.cnew file+50

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-jq.pynew file+34

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/bin/test_json-parsernew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.pbxprojnew file+258

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/test_json-parser.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/json.cnew file+1011

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/json.hnew file+283

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-parser/test_json-parser/main.cnew file+66

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/.gitignorenew file+2

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/Cargo.tomlnew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/READMEnew file+2

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust-serde_json/rj/src/main.rsnew file+30

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/Cargo.locknew file+14

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/Cargo.tomlnew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/READMEnew file+2

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/src/main.rsnew file+42

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.cargo-locknew file

No changes to the content.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/dep-lib-jsonnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/lib-jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/json-74a82b4ec4439e90/lib-json.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/bin-tjnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/bin-tj.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-b5d63a9d8da2968e/dep-bin-tjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/bin-tjnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/bin-tj.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bb890ae6f101bb25/dep-bin-tjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/bin-tjnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/bin-tj.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/.fingerprint/tj-bf24d0bdc8d0f4d6/dep-bin-tjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/deps/libjson-6bbf4c11dd6d7c25.rlibnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/tjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/tj.dSYM/Contents/Info.plistnew file+20

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rust/target/debug/tj.dSYM/Contents/Resources/DWARF/tjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/Cargo.locknew file+14

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/Cargo.tomlnew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/READMEnew file+2

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/src/main.rsnew file+32

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.cargo-locknew file

No changes to the content.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/bin-rjnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/bin-rj.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-8f8b750d20f3bf10/dep-bin-rjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/bin-rjnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/bin-rj.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rj-da0f8f63b87cf531/dep-bin-rjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/dep-lib-rustc-serializenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/lib-rustc-serializenew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/.fingerprint/rustc-serialize-80c565222c5ccdbb/lib-rustc-serialize.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/deps/librustc_serialize-3561541d79c18212.rlibnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rj.dSYM/Contents/Info.plistnew file+20

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json-rustc_serialize/rj/target/debug/rj.dSYM/Contents/Resources/DWARF/rjnew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_json.crnew file+19

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json.jsnew file+13

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json.phpnew file+21

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json.plnew file+32

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json.pynew file+39

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json.rbnew file+23

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/bin/jsonCheckernew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/JSON_checker.cnew file+400

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/JSON_checker.hnew file+13

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.pbxprojnew file+253

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/jsonChecker.xcschemenew file+91

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker/jsonChecker/jsonChecker/main.cnew file+53

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/FSM.rtfnew file+103

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/bin/jsonChecker2new file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/JSON_checker.cnew file+402

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/JSON_checker.hnew file+13

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker/main.cnew file+53

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.pbxprojnew file+253

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.xcworkspace/contents.xcworkspacedatanew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/project.xcworkspace/xcuserdata/nst.xcuserdatad/UserInterfaceState.xcuserstatenew file

Binary file not shown.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/jsonChecker.xcschemenew file+97

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonChecker2/jsonChecker2/jsonChecker2.xcodeproj/xcuserdata/nst.xcuserdatad/xcschemes/xcschememanagement.plistnew file+22

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json_re.rbnew file+33

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_json_xs.plnew file+28

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_jsonlite.rnew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_oj_compat.rbnew file+25

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_oj_strict.rbnew file+25

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_qt/build.shnew file+4

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_qt/main.cppnew file+25

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_qt/test_qt.pronew file+12

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_rjson.rnew file+7

This diff is too big to show here.

tests/JSONTestSuite/parsers/test_yajl.rbnew file+24

This diff is too big to show here.

tests/JSONTestSuite/results/logs.txtnew file+2048

This diff is too big to show here.

tests/JSONTestSuite/results/parsing.htmlnew file+2816

This diff is too big to show here.

tests/JSONTestSuite/results/parsing_pruned.htmlnew file+2661

This diff is too big to show here.

tests/JSONTestSuite/results/pruned_results.pngnew file

Binary file not shown.

tests/JSONTestSuite/results/style.cssnew file+89

This diff is too big to show here.

tests/JSONTestSuite/results/transform.htmlnew file+1492

This diff is too big to show here.

tests/JSONTestSuite/run_tests.pynew file+673

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_object_key_lone_2nd_surrogate.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_UTF-16LE_with_BOM.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/i_string_UTF-8_invalid_sequence.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogate_pair.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_incomplete_surrogates_escape_valid.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_invalid_lonely_surrogate.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_invalid_surrogate.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_inverted_surrogates_U+1D11E.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_lone_second_surrogate.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_not_in_unicode_range.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_truncated-utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_unicode_U+FDD0_nonchar.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_string_unicode_U+FFFE_nonchar.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_structure_500_nested_arrays.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/i_structure_UTF-8_BOM_empty_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_1_true_without_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_a_invalid_utf8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_colon_instead_of_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_comma_after_close.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_comma_and_number.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_double_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_double_extra_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_extra_close.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_extra_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_incomplete.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_incomplete_invalid_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_inner_array_no_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_invalid_utf8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_items_separated_by_semicolon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_just_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_just_minus.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_missing_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_newlines_unclosed.jsonnew file+3

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_number_and_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_number_and_several_commas.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_spaces_vertical_tab_formfeed.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_star_inside.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_unclosed.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_unclosed_trailing_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_unclosed_with_new_lines.jsonnew file+3

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_array_unclosed_with_object_inside.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_incomplete_false.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_incomplete_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_incomplete_true.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_++.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_+1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_+Inf.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_-01.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_-1.0..jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_-2..jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_-NaN.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_.-1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_.2e-3.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0.1.2.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0.3e+.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0.3e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0.e1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0_capital_E+.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0_capital_E.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0e+.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_0e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_1.0e+.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_1.0e-.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_1.0e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_1_000.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_1eE2.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_2.e+3.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_2.e-3.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_2.e3.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_9.e+.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_Inf.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_NaN.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_U+FF11_fullwidth_digit_one.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_expression.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_hex_1_digit.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_hex_2_digits.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_infinity.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_invalid+-.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_invalid-negative-real.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-bigger-int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-exponent.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_invalid-utf-8-in-int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_minus_infinity.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_minus_sign_with_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_minus_space_1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_neg_int_starting_with_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_neg_real_without_int_part.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_neg_with_garbage_at_end.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_real_garbage_after_e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_real_with_invalid_utf8_after_e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_real_without_fractional_part.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_starting_with_dot.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_then_00.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/n_number_with_alpha.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_with_alpha_char.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_number_with_leading_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_bad_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_bracket_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_comma_instead_of_colon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_double_colon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_emoji.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_garbage_at_end.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_key_with_single_quotes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_missing_colon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_missing_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_missing_semicolon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_missing_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_no-colon.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_non_string_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_non_string_key_but_huge_number_instead.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_pi_in_key_and_trailing_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_repeated_null_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_several_trailing_commas.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_single_quote.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_trailing_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_trailing_comment.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_trailing_comment_open.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_trailing_comment_slash_open.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_two_commas_in_a_row.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_unquoted_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_unterminated-value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_with_single_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_object_with_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_single_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape u1x.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_1_surrogate_then_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_UTF8_surrogate_U+D800.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_accentuated_char_no_quotes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_backslash_00.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/n_string_escape_x.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_escaped_backslash_bad.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_escaped_ctrl_char_tab.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_escaped_emoji.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_incomplete_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_incomplete_escaped_character.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_incomplete_surrogate.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_incomplete_surrogate_escape_invalid.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_invalid-utf-8-in-escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_invalid_backslash_esc.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_invalid_unicode_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_invalid_utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_invalid_utf8_after_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_iso_latin_1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_leading_uescaped_thinspace.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_lone_utf8_continuation_byte.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_no_quotes_with_bad_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_2_bytes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_6_bytes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_overlong_sequence_6_bytes_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_single_doublequote.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_single_quote.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_single_string_no_double_quotes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_start_escape_unclosed.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_unescaped_crtl_char.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/n_string_unescaped_newline.jsonnew file+2

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_unescaped_tab.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_unicode_CapitalU.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_string_with_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_100000_opening_arrays.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_<.>.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_<null>.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_U+2060_word_joined.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_UTF8_BOM_no_data.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_array_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_array_with_extra_array_close.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_array_with_unclosed_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_ascii-unicode-identifier.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_capitalized_True.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_close_unopened_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_comma_instead_of_closing_brace.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_double_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_end_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_incomplete_UTF8_BOM.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_lone-invalid-utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_lone-open-bracket.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_no_data.jsonnew file

No changes to the content.

tests/JSONTestSuite/test_parsing/n_structure_null-byte-outside-string.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/n_structure_number_with_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_object_followed_by_closing_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_object_unclosed_no_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_object_with_comment.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_object_with_trailing_garbage.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_apostrophe.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_open_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_open_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_array_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object_close_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object_comma.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object_open_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object_open_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_object_string_with_apostrophes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_open_open.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_single_point.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_single_star.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_trailing_#.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_uescaped_LF_before_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unclosed_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_partial_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_unfinished_false.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unclosed_array_unfinished_true.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unclosed_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_unicode-identifier.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_whitespace_U+2060_word_joiner.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/n_structure_whitespace_formfeed.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_arraysWithSpaces.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_empty-string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_empty.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_ending_with_newline.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_false.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_heterogeneous.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_with_1_and_newline.jsonnew file+2

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_with_leading_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_with_several_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_array_with_trailing_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_0e+1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_0e1.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_after_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_double_close_to_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_double_huge_neg_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_huge_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_int_with_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_minus_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_neg_int_huge_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_negative_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_negative_one.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_negative_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_pos_double_huge_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_capital_e.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_capital_e_neg_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_capital_e_pos_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_exponent.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_fraction_exponent.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_neg_exp.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_neg_overflow.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_pos_exponent.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_pos_overflow.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_real_underflow.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_simple_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_simple_real.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_too_big_neg_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_too_big_pos_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_number_very_big_negative_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_basic.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_duplicated_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_duplicated_key_and_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_empty.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_empty_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_escaped_null_in_key.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_extreme_numbers.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_long_strings.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_simple.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_string_unicode.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_object_with_newlines.jsonnew file+3

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_accepted_surrogate_pair.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_accepted_surrogate_pairs.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_allowed_escapes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_backslash_and_u_escaped_zero.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_backslash_doublequotes.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_comments.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_double_escape_a.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_double_escape_n.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_escaped_control_character.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_escaped_noncharacter.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_in_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_in_array_with_leading_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_last_surrogates_1_and_2.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_newline_uescaped.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_null_escape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_one-byte-utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_pi.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_simple_ascii.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_space.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_three-byte-utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_two-byte-utf-8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_u+2028_line_sep.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_u+2029_par_sep.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_uEscape.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unescaped_char_delete.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicode.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicodeEscapedBackslash.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicode_2.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicode_U+2064_invisible_plus.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_unicode_escaped_double_quote.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_utf16BE_no_BOM.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/y_string_utf16LE_no_BOM.jsonnew file

Binary file not shown.

tests/JSONTestSuite/test_parsing/y_string_utf8.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_string_with_del_character.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_false.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_int.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_negative_real.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_null.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_string.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_lonely_true.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_string_empty.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_trailing_newline.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_true_in_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_parsing/y_structure_whitespace_array.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_1.0.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_1.000000000000000005.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_1000000000000000.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_10000000000000000999.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_1e-999.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/number_1e6.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/object_key_nfc_nfd.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/object_key_nfd_nfc.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/object_same_key_different_values.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/object_same_key_same_value.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/object_same_key_unclear_values.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_1_escaped_invalid_codepoint.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_1_invalid_codepoint.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_2_escaped_invalid_codepoints.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_2_invalid_codepoints.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_3_escaped_invalid_codepoints.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_3_invalid_codepoints.jsonnew file+1

This diff is too big to show here.

tests/JSONTestSuite/test_transform/string_with_escaped_NULL.jsonnew file+1

This diff is too big to show here.