diff --git a/Build.ahk b/Build.ahk index 75d7d47..9043555 100644 --- a/Build.ahk +++ b/Build.ahk @@ -9,7 +9,7 @@ SetWorkingDir, %A_LineFile%\..\Src c := "#include ""dumps.c""`n#include ""loads.c""" ; Pull in the AHK file -ahk := FileOpen(A_LineFile "\..\Src\cJson.ahk", "r").Read() +ahk := FileOpen(A_LineFile "\..\Src\JSON.ahk", "r").Read() ; Compile the C code and generate a standalone loader MCL.CompilerSuffix += " -O3" @@ -51,7 +51,7 @@ ahk := RegExReplace(ahk, "`a)\R", "`r`n") ; Save to the Dist folder FileCreateDir, %A_LineFile%\..\Dist -FileOpen(A_LineFile "\..\Dist\cJson.ahk", "w").Write(ahk) +FileOpen(A_LineFile "\..\Dist\JSON.ahk", "w").Write(ahk) ; Test the build Run, %A_AhkPath%\..\AutoHotkeyU64.exe %A_LineFile%\..\Tests\!TestDist.ahk diff --git a/Dist/JSON.ahk b/Dist/JSON.ahk new file mode 100644 index 0000000..6d331b2 --- /dev/null +++ b/Dist/JSON.ahk @@ -0,0 +1,289 @@ +; +; cJson.ahk 0.4.0-git-built +; Copyright (c) 2021 Philip Taylor (known also as GeekDude, G33kDude) +; https://github.com/G33kDude/cJson.ahk +; +; MIT License +; +; Permission is hereby granted, free of charge, to any person obtaining a copy +; of this software and associated documentation files (the "Software"), to deal +; in the Software without restriction, including without limitation the rights +; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +; copies of the Software, and to permit persons to whom the Software is +; furnished to do so, subject to the following conditions: +; +; The above copyright notice and this permission notice shall be included in all +; copies or substantial portions of the Software. +; +; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +; SOFTWARE. +; + +class JSON +{ + static version := "0.4.0-git-built" + + BoolsAsInts[] + { + get + { + this._init() + return NumGet(this.lib.bBoolsAsInts, "Int") + } + + set + { + this._init() + NumPut(value, this.lib.bBoolsAsInts, "Int") + return value + } + } + + _init() + { + if (this.lib) + return + this.lib := this._LoadLib() + + ; Populate globals + NumPut(&this.True, this.lib.objTrue, "UPtr") + NumPut(&this.False, this.lib.objFalse, "UPtr") + NumPut(&this.Null, this.lib.objNull, "UPtr") + + this.fnGetObj := Func("Object") + NumPut(&this.fnGetObj, this.lib.fnGetObj, "UPtr") + + this.fnCastString := Func("Format").Bind("{}") + NumPut(&this.fnCastString, this.lib.fnCastString, "UPtr") + } + + _LoadLib32Bit() { + static CodeBase64 := "" + . "FrYAAQAAAFWJ5VMIgey0AJCLRRSIAIV0////i0UIIIsQodwWAJAAORDCD4SkAHDHRfQBABQA6ziDfQwAgHQhi0X0BeQAgAAPthiLRQyLAACNSAKL" + . "VQyJCgBmD77TZokQ65ANi0UQACpQAQAOYIkQg0X0ABAFYgAQhMB1uQDGmYlFEKCJVaQBIUQkCBMARgAGBI0AEwQk6FAmHAAAAmkUC17HKAAiAAxc" + . "uAGX6a1ABwAAxkXzAMQIBItQAJMIi0AQOQjCdUcAEwHHRewFArspAhwMi0XswQDgBAHQiUWwiwEAAUAIi1Xsg8IAATnQD5TAiEUA84NF7AGAffMI" + . "AHQLhCJF7HzGRYJFJAILB7tbASYFTLt7gpmJTokYjE2AAr2BpwB0UMdF6NELn+gF9Sif6AAEhRiRAp/HReQCe6kFgUEFg2rkhGqsg33kANgPjqmA" + . "DxOhLA2hhSlQUsdF4Isp4Kop4KcAAkUMginrJ1MgIFUgEGXHRdxCIFTHRaLYiyLYBfioItgAAiNFDIIig0XcgAQYO0BF3H2kD7aAefDAAYTAD4Sf" + . "wMDCeUAYOUXkfXzknIsMRazAjQCwmIlVnKUNsJgBsGUZRF8XDxNm6YE4yhPpykIEgCEcUYAhD42fQtzUC0DU9AX6KEDUAAJFDETcxCxQkIlVlM0s" + . "kGEWsUoYmG4r6gvrHMMJizBVEIlU4AjgBFQk0gSBCGAalQg6rSh/Q4GHLQyD+AF1HkEByS4O+hcAYZwCASgDBVAGD4VewjqswJjgQyAgAIFVx0XQ" + . "yynQ3AUDAAffKcMp0AABJQaJwinpKiQOEKHYRgxizEsMzAUIXwxGDMx3AAElBkMMx6YYgbFDDMixSwzIBQ5fDEYMyAABCyUGQwxkQgwYjUgBCA+2" + . "lYO/rIsAiRRMJKEsDI8tzfn/GP/pL+QSgS0FdSBLQgZPBVbASekESAUCRHVpQAGNVYAlBNQqFMFcxCIaNyIaIIsAVYiLRcQBwI1EHAIqGg+3ExEa" + . "xAIBBQYB0A+3AGZAhcB1t+mQomfAsQslwAUTHyXmCsAAAWclBqZnLhyAFb/URgrkAwAB48nkD4xI+v+i/2SeD4S14hW86xX2vD+viAu8AAElBgTE" + . "4uK34ahh+wgLtP+oiAW0gAALFQN0VLggAbg7RRjUfKRacV1TcX1fcV1xAZIJi138ycOQkGexGgIAcIhXVpCIs1EMRTAUFHEAx0AI0QHHbEAMUgyA" + . "BAiBBMAhCAeRQcAAYR+D+CB05RHYAAp019gADXTJEdgACXS72AB7D4VGcoI8aAXHRaAyB0UrgY9gAKhjAKxhAKGIQ/AI0C5AGIsVoQDHSEQkIOIB" + . "RCQgiwAQAI1NkMAzGI1N6qBgABRQARBBlnAA8gsPcADjDEBXcQCJFCT/INCD7CSLQGNFsB/fDd8N3w3fDdcAfQ+EVlQEbhIBhRBvQwkBgyD4InQK" + . "uGAo/+nivxAKjUWA8WDhB+AtAGn+//+FwHQX/fMBn/AB/wn/Cf8J/wnVADo6xQdCzwWSaZQI3/2rkgjEAhXCAoiDOAhjAv6wsmeAAU8UTwpPCk8K" + . "1wBILHUSKgXpVHARkLNZFoUJfAtfDIAsCQIxoFWwiVAIw6pUdQJh8wNbD4XwRRk2KIVecMFBsSIyuZMAeJYAfGeUAP8o/CiNYJACIimNTxEFXylf" + . "KVYphWgRA0X+tNCm8QKvFa8VrxWvFdcAsF0PhLaUj/YppQNAydgf4fvZHxcK9QHgi+rkYwK0YQK6UBUvCi8KNy8KLwrZHxYqBYFc6QHLgAgZIF3F" + . "CXoJHyAXIBq0FiBSdQJEOA+FY6YD7zWAeEXgkgPgkAPhowQIAOnvBUsUb7QHhv6RIDcFXA+Fqp1NiykHcXvggAGJVeACa107Los5BsAE2wJc3AJd" + . "VdsCL9sCL9wCL9sCYlXbAgjcAgHbAmbbAgxV3ALT201u2wIK3AKlVdsCctsCDdwCd9sCdBfbAjEe2QJJ2wJ1D4W+EU0+4AOAA7FlQs/pwddnMAEA" + . "A6DcicLhATobL8R+MNgAOX8iwwKRAkFTAQHQg+gwhQPpgoCpNYP4QH4t2AAARn8fi8a3AEXgD7cAicKLEEUIiwAAkAHQgwToNwFw4GaJEOsCRQWw" + . "ZoP4YH4tsQg0Zn8fAIwO6FcGdAgKuP8AAOltBgAiAAJAjVACAA6JEACDRdwBg33cAwgPjhYAPoNF4AIU6yYDKkIEKhCNSgUCKggASY1IAolNDQBm" + . "EgBSCH0iD4X/APz//4tFDItICQEmKcgBdwyLQAgIg+gEASngZscAhQx4uAAQAOndBQQWEQNILXQkiAYvD46EsQOKDzkPj5+ACFDHRdgBgicMgCsU" + . "EYEDx0AIgSfHQAzzAQOJKHUUgBYBaIo+iBCYMHUjEyCFFemOCykIMH51CUl/Z+tHBQF2UIF3a9oKa8ggAAHZuwqAGffjAAHRicqLTQiLAAmNcQKL" + . "XQiJADMPtzEPv86JAMvB+x8ByBHaAIPA0IPS/4tNgAyJQQiJUQyJfSR+GgkZfp1FcKsECAAAkIgGLg+FpUNNLIYjZg9uwMAAygBmD2LBZg/WhTJQ" + . "QBDfrUEBgAjdWCvAakFQBQBU1AFU60IAi1XUidDB4AKAAdABwIlF1EMVgEgCi1UIiQrAG4CYg+gwiYVMwA9C20MBRdTe+YESQFgI3sGFFMgwDsow" + . "ohFIA2V0EkgDRQ+FjlUAIA0xAwcUdTEJNKrQwADaADTTADSVFTSoxkXTS4ETQAQByhfG60DMBggrdRGGDNCIK00yxGIfwqLMQYzrJyiLVcyHTsNR" + . "TgHYCIlFzFgVvcdFyBGBYcdFxEIKE4tVQsioMciDRcRAGMQAO0XMfOWAfdOIAHQTQy/bRcijMNBYCOsRRwLJRiLlKAorJHRYIE3YmYnfAA+v+InW" + . "D6/xgAH+9+GNDBZhVUkkUesdxgYFdWYK2JNwCkQuAwADegwCamVQdA+FqyIawCIaNwCLRcAFAxcAAIAPtgBmD77QJgUoOcJ0ZCrL7UCDRQbAoB7G" + . "BoTAdboPyrbAhgBAAXQbpQ9DeBOiJ0N46yxDAwkAiwgV4BaChYlQCKEhQgEAi0AEowKJFEAk/9CD7ASDF08XZQ+EqoUXvIUXvAUI9ZoXDo8XvIAX" + . "xgaaF+iPfYkX2IcXQgGDF0EBixeSQauUbnV/x0UiA+tANItFuAUOExcH6QIX61isFrigFmYGoBb6vecR3OcRQgHjEUEB6hEE6wUiC41l9FteGF9d" + . "w0ECBQAiVW4Aa25vd25fT2IAamVjdF8ADQoFIAsipQF0cnVlAABmYWxzZQBudQRsbMcFVmFsdWUAXwAwMTIzNDUANjc4OUFCQ0QARUYAVYnlU4Mg" + . "7FTHRfRmt4tAABSNVfSJVCQUEMdEJBAiK0QkDNHBQ41VDMACCMABAKmHoAXgc8MWGMdF5AIFVEXowwDswwDwgwoQOIlF5GAC484iDBiLVFX0wAgg" + . "pAsc5AAYweEAjU3kiUyDD8EMb4EPxAPCPCAQBCcPYN4QaYM2CXVgQhBwTvEFCCCLVRCLUkUCBOtiaGYCA3VcYQISUbsJQBZ/uUEFOcMZ0RR8FYYB" + . "PSABgInQIIPY/30u8BqNVRrgcQ+JcA8xHgQk6AKhAAKFwHQRi00C4EYDiQGJUQSQgItd/MnDkJBwFYCD7Fhmx0XuEx8URfAgFhQBEE0MugDNzMzM" + . "icj34gjB6gM2SinBicqBEAfAMINt9AEhgMD0ZolURcawA+ICBPfikALoA4lFDACDfQwAdbmNVaGgAfQBwAGQAhCACQYIYhHDCSj+//+QQ0AIsx1g" + . "x0X4Qi4aA+RFwApF+MHgBAEQ0IlF2AEBQBg5YEX4D41E8BkAC84FUQLY8QxF9MZF84AAg330AHkHkAAwAfdd9FAcQwz0ulBnZmZmQAzqcAn4QgJS" + . "eSnYicL/DINUbezyDOzxDKaeA8Gg+R+JyimgCPSBBgB1pYB98wB0DoNBAyEDx0RFpi1wJw6mwADADmAC0MZF60OQJeImi0XkjSGM0BAB0A+3MGfk" + . "jQxpwRYByAM6dZA5CAIAoGaFwHUZJQEMJgGyBhAFAesQobwCdFCEAbwCdAeDReQB6wCHkIB96wAPhDOhZuEfVdgwmdEt6crJJC5AHCEVjKPiAMMU" + . "UNTGReOAC9yDC9z1ggXUhAvcjwsIAoULIwF9igvjggu8AoELvAKBC9whgwvjAHQPSgvrGEiDRfjyfUAQUgvX+P3//3JIuiy/PWIAckMJYCPoBYEP" + . "3QDdXY2QLtizAbIOx0XgYwBxIhuNRehQJzABkQehdoQQPeNAFaEAHUEhdUzgJBiNTdgFQUJqDEH/5UgVQSELPws/C8ABMRIAMegEiwAAOokgSZ8L" + . "nwu/nwufC58LnwufCzY7ZMAJnuaSCtI2NApXSXwYNQFBK0x9bo1FqGhK9hOQQFQP6zeBQ3QgiwBVsItF8AHAjaoc8GoMdJYMcZYTsc4uDaEhwGzw" + . "IBDBbPABawUDZie3M3M+9HrTE+wAg33sAHlti00m7I9Bj0G4MBAEKdCdqk6+vgOmQcIFdaPhAoPBAkBBvi0A61vPBi/PBl9VrwavBqWEI+s+oUIT" + . "J41VvtZW6L8Ts78TshPoAXwDJhSp6TU1syoYkgYXegVQgyIAzOl2ctyYBelkk90E5JR1VqIDFK0DXAAdCWsfBhMGEB4G/rNiEwZczx8GHwYfBmgC" + . "6a7yBBkGepwZBggfBh8GHwZmAmIAAOlMAgBVsQAAi0UQiwCNUAIBAHCJEOk6AgABAIgID7cAZoP4AAx1VoN9DAB0EBSLRQwAjEgCiwBVDIkKZscA" + . "XFgA6w0K3AJMFw1MZrAA6eoBAZ4JwtgCIoUEwgo8wm4A6YgOYQp2CWENPGFyAOkmFY4wFIkwCbwwdADpNMQAjTCyggiEMB9+YgyGBX5+b6k2DhN1" + . "Aw0TQxYPt8CLVRAQiVQkCAEKVCQEIIkEJOhsACHrKyXCERjKEYtVwAwSZkSJEI0cRQgCRCqFgMAPhY38//9TIQIiTSGQycOQkFVAieVTg+wkQBBm" + . "AIlF2MdF8CMXIAAAx0X4gCEA6wAtD7dF2IPgDwCJwotF8AHQDwC2AGYPvtCLRUD4ZolURegBB2YIwegEAQ6DRfgBAIN9+AN+zcdFFPQDwQ4zQiEc" + . "i0VA9A+3XEXoSiOJEtrQMW30QBD0AHlEx7jBHotd/IEnkA==" + static Code := false + if ((A_PtrSize * 8) != 32) { + Throw Exception("_LoadLib32Bit does not support " (A_PtrSize * 8) " bit AHK, please run using 32 bit AHK") + } + ; MCL standalone loader https://github.com/G33kDude/MCLib.ahk + ; Copyright (c) 2021 G33kDude, CloakerSmoker (CC-BY-4.0) + ; https://creativecommons.org/licenses/by/4.0/ + if (!Code) { + CompressedSize := VarSetCapacity(DecompressionBuffer, 3898, 0) + if !DllCall("Crypt32\CryptStringToBinary", "Str", CodeBase64, "UInt", 0, "UInt", 1, "Ptr", &DecompressionBuffer, "UInt*", CompressedSize, "Ptr", 0, "Ptr", 0, "UInt") + throw Exception("Failed to convert MCLib b64 to binary") + if !(pCode := DllCall("GlobalAlloc", "UInt", 0, "Ptr", 9004, "Ptr")) + throw Exception("Failed to reserve MCLib memory") + if (DllCall("ntdll\RtlDecompressBuffer", "UShort", 0x102, "Ptr", pCode, "UInt", 9004, "Ptr", &DecompressionBuffer, "UInt", CompressedSize, "UInt*", DecompressedSize, "UInt")) + throw Exception("Error calling RtlDecompressBuffer",, Format("0x{:08x}", r)) + for k, Offset in [29, 62, 112, 381, 431, 548, 598, 687, 737, 944, 994, 1252, 1279, 1329, 1351, 1378, 1428, 1450, 1477, 1527, 1774, 1824, 1950, 2000, 2039, 2089, 2356, 2367, 3012, 3023, 5347, 5402, 5416, 5461, 5472, 5483, 5536, 5591, 5605, 5650, 5661, 5672, 5721, 5773, 5794, 5805, 5816, 7090, 7101, 7276, 7287, 8861] { + Old := NumGet(pCode + 0, Offset, "Ptr") + NumPut(Old + pCode, pCode + 0, Offset, "Ptr") + } + if !DllCall("VirtualProtect", "Ptr", pCode, "Ptr", 9004, "UInt", 0x40, "UInt*", OldProtect, "UInt") + Throw Exception("Failed to mark MCLib memory as executable") + Exports := {} + for ExportName, ExportOffset in {"bBoolsAsInts": 0, "dumps": 4, "fnCastString": 2180, "fnGetObj": 2184, "loads": 2188, "objFalse": 5848, "objNull": 5852, "objTrue": 5856} { + Exports[ExportName] := pCode + ExportOffset + } + Code := Exports + } + return Code + } + _LoadLib64Bit() { + static CodeBase64 := "" + . "yLUEAQALAFVIieVICIHswABQSIlNEABIiVUYTIlFIABEiciIRShIixBFEEiLAAgFlR0BAHyLAEg5wg+EIrwAVsdF/AF660cASIN9GAB0LYsARfxI" + . "mEiNFY0hAE5ED7YEAGZFGAEBYI1IAkiLVRgASIkKZkEPvtAgZokQ6w8AGyCLEACNUAEBCIkQg2hF/AEFP00APwE+hAjAdaUCfYlFoEgIi00gAkON" + . "RaBJAInISInB6EYjCwCOAnkZEGjHACIABQ5luAGv6RYJAACYxkX7gGWBbFAwgwMkQCAAbHVbAAwBxxRF9AJsNYQQGItFAvSATMHgBUgB0E2ARrCA" + . "C4ABUBCAC4MMwAEADQCJlMCIRQD7g0X0AYB9+0gAdBMBGWPQCC18CrIDViyCDwhBuFthATEGQbh7AbsPYEQCiY9fgH0oAHRkKMdF8Iy78IKbJhxN" + . "sbvwwF3DD+Ybx13HZEXswkqlBgInREHsAUlBqIN97AAPjhbKgS+YYSyUMWbHRWrojDHogiFfgCGvMehLgDHDDx+IMesvmSYgIZQmecdF5IImaMeU" + . "ReDMKODCGL4a8Sg24MAoww9+wA/FKINFAuTABTA7ReR9kAQPtsCQ8AGEwA9chOhA6UFcBpEwQZmNbomcW1C9QAGowA/B0ZilyNGY5Gj+HyUKHDQK" + . "zOn+Q1SJCunqYALqE0Y44hNBbMdF3Kwm3NmiHooZvyavJtygI+MHrkrgBwiDhRqQiBqQhBqWKYYa1iQsLA3rG2YK0+QJZAm9IHsJOlAuv04BLTSL" + . "QBiD+AF1J2EwgBAKEFweIHEXA8NiMOMEBg+Fn+BDYwUZYbMJGKAB4Jdpx0Xq2Gwv2GInFwAEfy9tLybYYC/jB9cXZy/pi1oCaQ9tQANkD9RsD9Td" + . "YgegAAR/D20P1GAP4weqYGkPD2oPAWcP0GwP2tBiByp/D3AP0GAP4wcU6hZoD5NicjCNSJoBQApNQePAEABMgAYhQQqJTCQgwTWt+DD//+loxDPC" + . "NQV1Vh9kBSw7YiE7PUkFAggPhYOjbahIjZVQcP///+EEimCaxxRFzCIcSCMcLkiLRJV4wAOLRcwAFQEwwEyNBAAbbRxBD3S3EFMczJAACgRQXQ8A" + . "twBmhcB1nukqqlI8yBwVyBIR3RW3HxUfFe0GyBAV8wOd8AN7WzwqEW+gDu8zD07aBewH0AWoSPF2D4xE+f+i//FcD4Td4gzE7AxyxOII8BTvDO8M" + . "DQfE+wAH8wOw8ANXczGUcmMBknXJBrzCAobPBs8Gzga8i8AG8wNGyAaDRcBwAUDAO0UwfJCshV0dpIV9r4WvhaiRSIHEcQEMXcOQCgDsog4AVYXA" + . "ozBBLI2sJIBCpIqNs6SVESRIi4VhAIWgGxS1AEjHQAjyEe2QCYWiAgEKUAAK0wARUYN1ATEpg/ggdNUtAYgKdMItAQ10ry0BCAl0nC0Bew+FKUfC" + . "VK8HogfHRVDCEMcURVh0AGByAIsFA0fhOAE/QaMF9f7QAMeIRCRAUwJEJDiCAACNVTBIiVQkMFWAAFCBACiQASAht0EqufEBQZIWuqICicGoQf/S" + . "8Bc4UGxozxA/zxDPEM8QzxDPECcBfQ+shMLyR2kBhfCHrF4BQIP4InQKuCAQ/3jpZhGBDqG5YAfCHugA9/3//4XAdCL9AwJFAQLvDO8M7wzvDO8M" + . "y+8MJAE6FQrEEA8ICAjbUijHCzrDC7QDiLIDsDKki40DLEVoxEkCYA1/fxqPDY8Njw2PDY8NJwEszHUdbwdjB+nC0AtAkHOMHdUMug+fEJwQsDkJ" + . "AbY5i1VoSIlQCA2z0n3KA5MFWw+FZd9CeD8F9DPyyXAA+HQAUkJpEDPD+/kztdEA/zONdlXQxfMz8P8z/zPgGdjh8DNwx4WsMAGBAh8aPx8aHxof" + . "Gh8aHxonAV0PNoRh45803kdQKCfH+pkpJxUOMQLiJouVcQz1UA1wRCftMBgvDS8NLw0DLw0iAQq2AGaD+A10r0iLAIXAAAAASIsAiA+3AACQCXSc" + . "DZAILHUkB0hIjVACQQU0iRCDhawAEAFA6ar+//+QDW5dEHQKuP8AAOk+DRcBKhOCAAnIAAlmxwAGCQEjAQtIi1VwSBCJUAi4AAsA6QGDCjwDWSIP" + . "hRMFGlOxBReJhaACCQRYlQINgwBbB3YIAOlZBA0xSIXAdYRdggwPP1wwD4X2AyE/hFZ1NLcACYI8gROJAkKAPCKWIFzpxwovhDoUI1wXI4BVECMv" + . "FCMvlxE5kBFipZQRCJcR8gKPEWaUEaoMlxGrkBFulBEKlxGqZJARcpQRDZcRHZARTnSUEUK4kxHWAY8RdTgPhYWKBY6ZxBUAANjHhZwBy8HLO4MM" + . "gQbBgBHB4ASJwkUKj6aIL35CTQI5fy/HB4NiB8cDAdCD6DDpCYzprqNrKghAfj9NAihGfyyaCjeJCutc1c0HYC8KZjwKVyoKhHkUtQjXKYNCKAGD" + . "vSHBAAMPjrhAmkiDUSIIAus64wd16QcQuEiNSucHIYojPkggPpqNAxMSUC5gl5D7QAvFRZJIJgcpyEiCFuMCwEAISIPoBMs8dReJI6XXB28xLXQu" + . "bj4YD44MiqfkPg+P9XHgoMeFmMEgh6YADxSZBqjHQCAgsAx1IuMG56Ek36KDBjB1ITjTCk1+IXAOMA+OidACOX8YdutMhigAvYnQSADB4AJIAdBI" + . "ATDASYnAaQwgNYuVBWMMCqAHSA+/wEx0AcBgD9AFCCPFTGYfCW4Ofo4lTFMGAABhDuEuD4Xm2BtIPmaAD+/A8kgPKsEUsWEC8g8R4EAGMQXAM0KU" + . "xDPrbIuVYQGJgtDAGwHQAcCJQgO9+BuYgHcCDOAL4ADScAABEgRmDyjI8g9eAso2BxBACPIPWJbBPAhcEBcPJI5q6h8JYwFldJ4CRQ+F+HePTf0Q" + . "swIUVyL/Ef8RxqyFkw8qASohkwEBTweJQwfrMj0DK3Uf3gRbHy1LEROvIYQhOrI1jGFUWus6i5WxAMYbQXufKZwbRBEeMQNfB18HfhCgx4WIhCLH" + . "hYRxVQcci5VRASgj4QCDKQICAYtiADsyBnzWZIC9og90Klkh4BfJnVAjjVEDECMaIusolwISSIMaDyryBfIPWS+9JPkdwaXVOotSREiYSEgPrzk4" + . "6zg6AwW+db8GsAahA78GugYMtyIUAwBTU6EPfPh0D5SF35ITgJUTUouyABGQCY0V0hADD7YEMBBmD75BCpgDOcJ9Ja9LWgWdZqEE8BYWBYABFAWE" + . "wHWXD7YFAGLk//+EwHQdn8kKqFLSPxURZIUVDgMHGVdLBfwiNkNQiwXuodEAicH/0lMPq/+GIPhmD4XTUQ9FfKEiD0yLRXzSCeewAhv/DvsOW/88" + . "9w5FfAEttQSbtASQDqCQDnjjt58OTGGeDgSjBpgO8lQHLZMO5IIBlg7BLzP4bigPhaWSDngSBkmLtEV40gkDnw6XDgeSDmzrdG8OZQ54YA6DBLpr" + . "MSdjDqPsC1X4yOMLQyXqCzXqC+sFUgdIgcTEMLAJXcOQBwCkKQcPAA8AAgAiVW5rbgBvd25fT2JqZUBjdF8ADQoQCSIB1QB0cnVlAGZhAGxzZQBu" + . "dWxsAecCVmFsdWVfAAAwMTIzNDU2NwA4OUFCQ0RFRgAAVUiJ5UiDxACASIlNEEiJVQAYTIlFIMdF/A0DU0XAURFbKEiNTQAYSI1V/EiJVEAkKMdE" + . "JCDxAUFiuTEsSYnIcRJgAk2AEP/QSMdF4NIAKMdF6HQA8LQEIEg4iUXg4ABTiaIFTItAUDCLRfxIEAVAUdMCRCQ4hQAwggCN/FXgRgfAV0AHogdi" + . "FXGWYE0QQf/S0QWE73V+HqIGgZfCGGAG5ADRGOtiYKcCA3VTtQEBDICwSDnQfUBu1AK68Bqif0IbOdB/4FNF8Q8s2ElwiFMH6EE2hcC0dA+gAdiw" + . "7lADUjAGwBCQSIPsgBge8xVs7GDxFeQVZrIREAWJFEX4oBYUgASLTRiAicq4zczMzDBTAMJIweggicLBBOoDJl4pwYnKiQDQg8Awg238AQSJwjET" + . "mGaJVEUAwIuitABFGInCuM3MzADMSA+vwkjB6AAgwegDiUUYgwB9GAB1qUiNVQDAi0X8SJhIAQDASAHQSItVIABJidBIicJIiwBNEOgB/v//kIBI" + . "g8RgXcOQBgAAVUiJ5UiD7HAASIlNEEiJVRgATIlFIMdF/AABAADprgIAAEiLQEUQSItQGAOswUTgBQFXiUXQAQ9jAwBhAR1AMEg5wg8AjZoBAABm" + . "x0UWuAI0ABpAAFBF8MYARe8ASIN98AAEeQgACgFI913wMMdF6BQAXwCU8EgIumdmAwBIichICPfqSACuwfgCSQCJyEnB+D9MKWbAAbwBE+ACAXgA" + . "1ikAwUiJyonQg8AAMINt6AGJwosARehImGaJVEVCkJgnSMH5PwAbSAopgV3wAkd1gIB9MO8AdBCBIoMhx0TQRZAtAIChkIIHhKEAiUXAxkXnAMdE" + . "ReCBiYtF4IAMjUYUAXEBDw+3EAQJDAEBCRhIAcgPtwAgZjnCdW8PFQBmcIXAdR6JC4AXhQsGkYAyAes6kxp0IpMaAHQKg0XgAelmAv9AdoB95wAP" + . "hDL2AlZFIMB+wC4QuLHAZADpAUABCmw4AWwMjMrDCoVqyMZF39XAOdjDOdiGG8jFOYIE39A5jQrFOccFyznfwjlRDRfBOVENwTnYxjnfAHSCEs04" + . "6yCDRfwAcoUIOSACOTv9//+ApEFAOoPEcF3DwruBbOyQAQSEvEjEdsAB6E3EAfDBAcCy4AUCwPJADxAA8g8RQIXHVEXAhAjIxAHQwgGND4BnQIqA" + . "AwEjSIsFhADm//9IiwBMixRQMEADdkEDx0QkokADDUQkOAICiwAfsIlUJDDB7QECKEAGUiABEEG5wQdBwi26AYIKicFB/9JIgfbEAS7wd0DpdwAX" + . "ABmgeI+jbIEhAAjkXg+Jm39vCXlvuDDgBynQg21u/KJvwIKhb8C/b6lvDzyFemA5YQgjCGBvwC14AOmAXxPfgh8T2oLHJEXsIS7rUOABGAAsdDaL" + . "qgAL7EIBTI3MBAJiVGArjUhAAWE5BApBAGVmiRDrD0HhU4sAjVABAQGJYBCDRewBFAlHY45t5VRAJzzkOyDpOwMTHAGvD2bHACIA6QjGBEOAyA/p" + . "9AMjQSENoIP4InVmYwgZcghsXADuF1wOkMMLSg58nUoOXF8OXw7IBekdUA46CUoOCF8OXw7GBWIAbOmq4+FKDpZk5EMODIdfDl8OxgVmAOk3UA76" + . "IyoHCi8HLwcvBy8H4gKwbgDpxABILQewMwF9JAcNLwcvBy8HLwfiAnJIAOlRLwfpPSoHCR8vBy8HLwcvB+ICdADpHt50cikH9HAkBx9+DfHHAH5+" + . "fP8H/wf+B+8CzeECde8CpAYPt/FKkW1CGMBOicHojKFINN3DBB7PBGAAYAMSL0cBCAxFEBFKEgyFwA+FfPz7QGhfCXg8PgThoiAv6Wb2SGBU1WaJ" + . "AGaNBRyS89AFUFTEo+syD8C3RRCD4A/Sp8BVwVBOtgBmD76So5JZwugRAmbB6AQRBNF7AIN9/AN+yMdFIvhgPADrP7MKJYsARfhImEQPt0Rj4Hdu" + . "C0SJwr8P4FZtwvjQBPgAebslVVUM" + static Code := false + if ((A_PtrSize * 8) != 64) { + Throw Exception("_LoadLib64Bit does not support " (A_PtrSize * 8) " bit AHK, please run using 64 bit AHK") + } + ; MCL standalone loader https://github.com/G33kDude/MCLib.ahk + ; Copyright (c) 2021 G33kDude, CloakerSmoker (CC-BY-4.0) + ; https://creativecommons.org/licenses/by/4.0/ + if (!Code) { + CompressedSize := VarSetCapacity(DecompressionBuffer, 4221, 0) + if !DllCall("Crypt32\CryptStringToBinary", "Str", CodeBase64, "UInt", 0, "UInt", 1, "Ptr", &DecompressionBuffer, "UInt*", CompressedSize, "Ptr", 0, "Ptr", 0, "UInt") + throw Exception("Failed to convert MCLib b64 to binary") + if !(pCode := DllCall("GlobalAlloc", "UInt", 0, "Ptr", 11072, "Ptr")) + throw Exception("Failed to reserve MCLib memory") + if (DllCall("ntdll\RtlDecompressBuffer", "UShort", 0x102, "Ptr", pCode, "UInt", 11072, "Ptr", &DecompressionBuffer, "UInt", CompressedSize, "UInt*", DecompressedSize, "UInt")) + throw Exception("Error calling RtlDecompressBuffer",, Format("0x{:08x}", r)) + if !DllCall("VirtualProtect", "Ptr", pCode, "Ptr", 11072, "UInt", 0x40, "UInt*", OldProtect, "UInt") + Throw Exception("Failed to mark MCLib memory as executable") + Exports := {} + for ExportName, ExportOffset in {"bBoolsAsInts": 0, "dumps": 16, "fnCastString": 2608, "fnGetObj": 2624, "loads": 2640, "objFalse": 7616, "objNull": 7632, "objTrue": 7648} { + Exports[ExportName] := pCode + ExportOffset + } + Code := Exports + } + return Code + } + _LoadLib() { + return A_PtrSize = 4 ? this._LoadLib32Bit() : this._LoadLib64Bit() + } + + Dump(obj, pretty := 0) + { + this._init() + if (!IsObject(obj)) + throw Exception("Input must be object") + size := 0 + DllCall(this.lib.dumps, "Ptr", &obj, "Ptr", 0, "Int*", size + , "Int", !!pretty, "Int", 0, "CDecl Ptr") + VarSetCapacity(buf, size*2+2, 0) + DllCall(this.lib.dumps, "Ptr", &obj, "Ptr*", &buf, "Int*", size + , "Int", !!pretty, "Int", 0, "CDecl Ptr") + return StrGet(&buf, size, "UTF-16") + } + + Load(ByRef json) + { + this._init() + + _json := " " json ; Prefix with a space to provide room for BSTR prefixes + VarSetCapacity(pJson, A_PtrSize) + NumPut(&_json, &pJson, 0, "Ptr") + + VarSetCapacity(pResult, 24) + + if (r := DllCall(this.lib.loads, "Ptr", &pJson, "Ptr", &pResult , "CDecl Int")) || ErrorLevel + { + throw Exception("Failed to parse JSON (" r "," ErrorLevel ")", -1 + , Format("Unexpected character at position {}: '{}'" + , (NumGet(pJson)-&_json)//2, Chr(NumGet(NumGet(pJson), "short")))) + } + + result := ComObject(0x400C, &pResult)[] + if (IsObject(result)) + ObjRelease(&result) + return result + } + + True[] + { + get + { + static _ := {"value": true, "name": "true"} + return _ + } + } + + False[] + { + get + { + static _ := {"value": false, "name": "false"} + return _ + } + } + + Null[] + { + get + { + static _ := {"value": "", "name": "null"} + return _ + } + } +} + diff --git a/Dist/cJson.ahk b/Dist/cJson.ahk deleted file mode 100644 index 211cd0a..0000000 --- a/Dist/cJson.ahk +++ /dev/null @@ -1,283 +0,0 @@ -; -; cJson.ahk 0.3.1-git-built -; Copyright (c) 2021 Philip Taylor (known also as GeekDude, G33kDude) -; https://github.com/G33kDude/cJson.ahk -; -; MIT License -; -; Permission is hereby granted, free of charge, to any person obtaining a copy -; of this software and associated documentation files (the "Software"), to deal -; in the Software without restriction, including without limitation the rights -; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -; copies of the Software, and to permit persons to whom the Software is -; furnished to do so, subject to the following conditions: -; -; The above copyright notice and this permission notice shall be included in all -; copies or substantial portions of the Software. -; -; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -; SOFTWARE. -; - -class cJson -{ - static version := "0.3.1-git-built" - - BoolsAsInts[] - { - get - { - this._init() - return NumGet(this.lib.bBoolsAsInts, "Int") - } - - set - { - this._init() - NumPut(value, this.lib.bBoolsAsInts, "Int") - return value - } - } - - _init() - { - if (this.lib) - return - this.lib := this._LoadLib() - - ; Populate globals - NumPut(&this.True, this.lib.objTrue, "UPtr") - NumPut(&this.False, this.lib.objFalse, "UPtr") - NumPut(&this.Null, this.lib.objNull, "UPtr") - - this.fnGetObj := Func("Object") - NumPut(&this.fnGetObj, this.lib.fnGetObj, "UPtr") - - this.fnCastString := Func("Format").Bind("{}") - NumPut(&this.fnCastString, this.lib.fnCastString, "UPtr") - } - - _LoadLib32Bit() { - static CodeBase64 := "" - . "TrYCAAAAVYnlU4PsAHSLRQiLEKHQABQAAIsAOcIPRISkANDHRfQBhOsAOIN9DAB0IYsQRfQF2ACAD7YYAItFDIsAjUgCAItVDIkKZg++ANNmiRDr" - . "DYtFEhAAKlABAA6JEIMMRfQAEAViAITAdQK5AMaZiUXAiVVixAFCRCQIAIwABgQCjQATBCToIhoACgACaRQLXscAIgAFDFy4AZfpsAUAAFDGRfMA" - . "AbtQAJMIgItAEDnCdUcAE1ABx0XsArspAhwMAItF7MHgBAHQEIlFzIsAAkAIiwBV7IPCATnQDwCUwIhF84NF7IABgH3zAHQLhCJQRex8xoJFJAIL" - . "B8S7WwEmBbt7AAOLTkSJGIxNx0Xogk7HFgQBFQM+6AQ+yIN90OgAfk6TciyNchMTEiANEw+2AGDwAYQgwA+EnwGDOUAYIDlF6H18pKaLRYbIQESA" - . "ZriJVbyNZlK4gWaHGIRmFw8T6WbcwkTIE+nKQgSAIRxRgCEPjZ/CkuTLkuT0BenokuQAAkUMxJLELFCwiVW0zSywwSzTSheYkyvKF+scgxOLMFUQ" - . "iVTAEcAJVCTSBAERghkVETp0a0IawAyD+AF1HoECThxiHIAt6YcCAVADCgaoD4VJgnXIAOjUQEAhgLhVx0Xgi1PgBTryqFPgAAJFDMIp6RVxJA4Q" - . "ocxGDAE7SAzc7AX3XwxGDNwAASUGQwwusqYYwYxDDNhLDNgFdv1fDEYM2AABJQZDDE8FRAwA7yoU+///6UYv5APhKgV1IFQFjUVBMARIBQJ1aUAB" - . "jRRVoCUEC2AOx0XUBYIXN4IXIItVqIuARdQBwI0cAooXSA+3E3EX1AEFBgEA0A+3AGaFwHUot+mQAmXQayLQBewCFX8i5QrQAAElBgZl3S4ct+AX" - . "n4NECugAAYOisOgPjCrAKAqjXQOjBn0fo4K2i138ycODAQFkz1dWU4HsI4iKDMAPFOEAx0AIoQPYx0AMIiGgCAihCOAqDgjhZ4ABISaD+CB0IuWo" - . "AQp016gBDXQiyagBCXS7qAF7D4yFcsJdyArHRaBiDlZFAd/AAKjDAKzBAKFMfAbB4qCqixVBAceIRCQgwgNEJBzhAACNTZCJTCQYjdRNoMAAFKAC" - . "EGBHoQMf4hfgAMMZQJPhAIkUJAD/0IPsJItFmA+gl78bvxurG30PhFQrxMAiAoXgwkMJAoP4ICJ0Crj/AADpv3EQCo1FgFFT4QeQIWmA/v//hcB0" - . "F/MBfp/wAf8J/wn/Cf8J1QA6ncUHQs8F8luUCN/9kgjVxAIVwgKIMywIYwJiXn5cgAFPFE8KTwpPCtcALKR1EioF6VRwEZBZFlmFCXwLXwyALAnS" - . "MFXQsIlQCMOKVHUC8wMwWw+F8EUZNiiFcFMQBbIihXSWAHiWAHxnlAD/KPwojWCQAiIpjU8RBV8pXylWKYVoEQNF/rQAe/ECrxWvFa8VrxXXALBd" - . "D4S29IH2KaUDQM3YH+FwRtcfFwr1AUB+6uRjArRhArZQFS8KLwo3LwovCtkfFioF8YfpAcuACBkgXcUJegkfIBcgGrQWIFJ1AkQ4D4VjggPvNYsA" - . "iUXgkgOG4JADowQIAOnvBUsbxGK0B/5AHDgFXA+FLqqdTSkHIW/ggAGJVXbgsl47Los5BsAE2wJcVdwCXdsCL9sCL9wCL1XbAmLbAgjcAgHbAmZV" - . "2wIM3ALT201u2wIKVdwCpdsCctsCDdwCd33bAnTbAjEe2QKDmtYCdfgPhRFNPuADgAOxZeKVnulxnDABAAMwwonC4QEROhsvfjDYADl/IgfDApEC" - . "UwEB0IPoMAmFA+mAqTWD+EB+Ii3YAEZ/H98Dg+hSN9UD60XIAmCqA2bbrwOhA1emAwQpbaFJuzMA3AGDfdwDD47GFvABoKcC6yb0X6QCWBCNSqIC" - . "wC7g0IOJGk1gBhJLELAy//z/Sv9hMUhhAinIcQcMcSC7g+gENxWKB0M33TMw4ogELXRwd7cVD47GsSU49BUPj58QAYCpz8FPP4k0iRkFdRTQAgEN" - . "Y183EwIwdSMPBGojjhErBTB+dSofZ+tHA8EOgORACGvaCmsgyAAB2bsQUQD3AOMB0YnKi00IAIsJjXECi10IAIkzD7cxD7/OAInLwfsfAcgRANqD" - . "wNCD0v+LgE0MiUEIiVGQ6AF4JRqLTLcARQiLAA+3AGYAg/g5fp3rCrgC/wAA6asEAACQAosH0C4PhaUAACIAAkSNUAIAHIkQAItFDItQDItAIAhm" - . "D27AAAbKZgAPYsFmD9aFUBkAgt+tAQoARN1YCAEACmbHAAUAx0UE1AEAiOtCi1XUAInQweACAdABEMCJRdQDVUgCixBVCIkKAG+Yg+hQMImFTAA/" - . "2wMFRQjU3vkBSkAI3sEjBVIGmi9+DggNOX4ioggNZXQSCA1FDxyFVQCADcQDDhR1MVUJaNCAAdoAaNMAaJUxFWjGRdODJgMhLXVKE4AIAYov6x8I" - . "ECs8dREGGQdAlmSExR8DCgAAncyAnADrJ4sUVcwHncORnAHYiYRFzJgqvcdFyAHDCMdFxAIpE4tVyCFIY8iDRcSAMMQ7AEXMfOWAfdMARHQTg17b" - . "RchDYVhoCOsRhwTJhkTFUSsBwVFICItYDItFANiZid8Pr/iJANYPr/EB/vfhAI0MFonKi00MAIlBCIlRDOsdaYYNBXXGFNjQFIRcA8QAuMEs6QwC" - . "hHHDB1B0D4WrQjTAQjQ3AItFwAXyFAAAgA+2AGYPvtBGCig5wnTEVMvNgYNFBsBAPYYNhMB1ug+EtgWBE4TAdBtFH5HAAcdACEJPQAzCGoIsgwYJ" - . "AIsV1IAOIUADiVAIoYICAIsEQARDBYkUJP/QaIPsBAMvT8UeAy9mRQUvvAUvvAX3Gi8OfQ8vvAAvhg0aL0EFEC/M34cXQgGDF0EBixeSpYCDFyBu" - . "dX/HRSID6zSgi0W4Bf0TFwcCF3TrWKwWuKAWZgagFr195xHQ5xFCAeMRQQHqEesCBSILjWX0W15fDF3DQQIFACJVbmsAbm93bl9PYmpAZWN0XwAi" - . "BQF0AHJ1ZQBmYWxzQGUAbnVsbCcFVgBhbHVlXwAwMQAyMzQ1Njc4OQBBQkNERUYAAABVieVTg+xUxwxF9CELohiLQBSNAFX0iVQkFMdERCQQoipE" - . "JAxBQ430VQzAAgjAAYCooAVgcyFDFhjHReQCBUXoFcMA7MMA8IMKEIlFDuRgAkEIJAwYi1X0VcAIIKQLHOQAGOEAjfBN5IlMgw/BDIEPxANrQjwg" - . "EAQnDySgCwM2CRp14EEQYJzhCwiLVYgQi1KFBATraMYEWAN1XMEEoqG7ACx/ArmBCjnDGdF8FQUGAz1AAoCJ0IPYiP99LmA1jVXg4R6GieAe4TsE" - . "JOihAASAhcB0EYtN4IYGAIkBiVEEkItdIPzJw5CQ4CqD7CBYZsdF7qM9RfALQCxgPABAhLrNzMwAzInI9+LB6gMh5pMpwYnKIA7AMACDbfQBicKL" - . "RcD0ZolURcZgB8IFBPfiIAXoA4lFDACDfQwAdbmNVaFAA/QBwAEgBRAAEwYIwiKDEyj+//+QQ4AQYztgx0X4AlwaA0SLgBVF+MHgBAEQ0IlF2AEC" - . "QBg5YEX4D41E4DMAFs4FoQTY4RlF9MZF84AAg330AHkHIAEwAfdd9KA4gxj0ulBnZmZmgBjq4BL4AAKJy8H7HynYVInC8Rns4hns4RmmgS4Hwfkf" - . "icopQBEC9AENdaWAffMADHQOgQZBBsdERaY6LeBOpoABgB3ABNDGDEXrIEvCTYtF5I2CFKAA0AHQD7fgzUjkjQyBLQHIg3N1A1A5CAIAZoXAdRkV" - . "JQEMJgEGEAUB6y0JvgJ0Gr4CdAeDRQDkAeuHkIB96xgAD4RhZuEfVdiJJBC40S3pyiQuQBwZIRWMo+IAwxTUxkWq44AL3IML3IIF1IQLvtyPCwgC" - . "hQsjAYoL44ILL7wCgQu8AoEL3IML4wAEdA9KC+sYg0X4CbJ9QBBSC9f9//8/Mki6LL89YgByQ2Aj6AWhgQ/dAN1dkC7YswExsg7HReBjACIbjUWO" - . "6FAnMAGRB6F4BgNQOBiLFaEAHUHhdEwk8BiNTdgFQQJqDEHlSH8VQSELPws/C8ABMRIAMQT0iwAAOokgSZ8LnwufC1+fC58LnwufCzY7ZMAJ5s+S" - . "CtI2NApXSXwYNQErTKB9bo1FqGhK9pBACVQP6zeBQ3Qgi1UAsItF8AHAjRyVsGoMNJYMMZYTZkCdLg2hIYBs8CAQgWzwAWsFA2Ynt/NyPrR60xPs" - . "AIN97AB5bYtNJuyPQY9BuDAQBCnQnapOvr4DpkHCBXWj4QKDwQJAQb4tAOtbzwYvzwZfVa8GrwalhCPrPqFCEyeNVb7WVui/E7O/E7IT6AF8AyYU" - . "qek1NbMqGJIGF3oFEIMiAEzpdlCymgXpZBIBCFEDbSJ1VqIDFK0DXK4AHQkfBhMGEB4G/rNiPRMGXB8GHwYfBmgC6a7r8gQZBpwZBggfBh8GHwah" - . "ZgJiAOlMHgY6GQYeDB8GHwYfBmYCZgDptuoCLxkG2CMwEwYKHwaHHwYfBmYCbgDpiB4GenYZBg0fBh8GHwZmAnKoAOkmHgYUGQYJHwbHHwYfBmYC" - . "dADpNXEXBmayI0wTBh9+0Ie0AH68fm/fBt8G1QZuAnVtAjGTBQ+3wNCf8JDnsAAIi1UMiVQkBACJBCTobAAAAADrK4N9DAB0GACLRQyLAI1IAgEB" - . "8AqLVQgPtxIAZokQ6w2LRRAJAFxQAQAciRCDRRAIAotFADYAZoWAwA+Fjfz//wJ6ghQKembHACIADHIAkMnDkJBVieUQU4PsJABBZolFANjHRfAS" - . "FQAACMdF+ACGAOstDwC3RdiD4A+JwgCLRfAB0A+2AABmD77Qi0X4ZhCJVEXoARxmwegCBAE4g0X4AYN9APgDfs3HRfQDBQE7MwKFHItF9A+Qt1xF" - . "6AqNidoQxwRt9IAg9AB5x7gRgT2LXfwBT5A=" - static Code := false - if ((A_PtrSize * 8) != 32) { - Throw Exception("_LoadLib32Bit does not support " (A_PtrSize * 8) " bit AHK, please run using 32 bit AHK") - } - ; MCL standalone loader https://github.com/G33kDude/MCLib.ahk - ; Copyright (c) 2021 G33kDude, CloakerSmoker (CC-BY-4.0) - ; https://creativecommons.org/licenses/by/4.0/ - if (!Code) { - CompressedSize := VarSetCapacity(DecompressionBuffer, 3722, 0) - if !DllCall("Crypt32\CryptStringToBinary", "Str", CodeBase64, "UInt", 0, "UInt", 1, "Ptr", &DecompressionBuffer, "UInt*", CompressedSize, "Ptr", 0, "Ptr", 0, "UInt") - throw Exception("Failed to convert MCLib b64 to binary") - if !(pCode := DllCall("GlobalAlloc", "UInt", 0, "Ptr", 8476, "Ptr")) - throw Exception("Failed to reserve MCLib memory") - if (DllCall("ntdll\RtlDecompressBuffer", "UShort", 0x102, "Ptr", pCode, "UInt", 8476, "Ptr", &DecompressionBuffer, "UInt", CompressedSize, "UInt*", DecompressedSize, "UInt")) - throw Exception("Error calling RtlDecompressBuffer",, Format("0x{:08x}", r)) - for k, Offset in [17, 50, 100, 638, 688, 946, 973, 1023, 1045, 1072, 1122, 1144, 1171, 1221, 1447, 1497, 1832, 1843, 2488, 2499, 4823, 4878, 4892, 4937, 4948, 4959, 5012, 5067, 5081, 5126, 5137, 5148, 5197, 5249, 5270, 5281, 5292, 6562, 6573, 6748, 6759, 8333] { - Old := NumGet(pCode + 0, Offset, "Ptr") - NumPut(Old + pCode, pCode + 0, Offset, "Ptr") - } - if !DllCall("VirtualProtect", "Ptr", pCode, "Ptr", 8476, "UInt", 0x40, "UInt*", OldProtect, "UInt") - Throw Exception("Failed to mark MCLib memory as executable") - Exports := {} - for ExportName, ExportOffset in {"bBoolsAsInts": 0, "dumps": 4, "fnCastString": 1656, "fnGetObj": 1660, "loads": 1664, "objFalse": 5324, "objNull": 5328, "objTrue": 5332} { - Exports[ExportName] := pCode + ExportOffset - } - Code := Exports - } - return Code - } - _LoadLib64Bit() { - static CodeBase64 := "" - . "grUCAAwAVUiJ5UiBBOyQAFBIiU0QSACJVRhMiUUgSCCLRRBIiwAIBTsCGwBkiwBIOcIPRIS8AJTHRfwBbusAR0iDfRgAdC0Ai0X8SJhIjRVCMwBO" - . "RA+2BABmRQIYAWCNSAJIi1UAGEiJCmZBD75A0GaJEOsPADYgIIsAjVABAQiJEBCDRfwBBT/zGgBCAAE+hMB1pQJ9iWBFwEiLTQCJAEONAEXASYnI" - . "SInBWOjsIACOAnkZEGjHKAAiAA5luAGv6b3ABgAAxkX7AMuBbCRQMIMDQCAAbHVboQAMAcdF9AJsNYQQEBiLRfSATMHgBWhIAdCARtCAC4ABUGIQ" - . "gAuDwAEADQCJlADAiEX7g0X0AUCAffsAdBMBGWNTARQFLXyyA1Ysgg8ICEG4WwExBkG4exMBuA9gRImPX8dF8FmCYJ0FAhmETfCJTchAg33wAH5e" - . "GYwsSw8smQsgjwsPtoA68AABhMAPhOgBAJYAgSDGOjABQ42JATVbK2dAAcjAD4F7uIh7uCmEe/0eRRQcVBTp/rNDUgkV6erABMonOMInUUGCx0Xs" - . "zK/swp+E2hjxr+zAr8MPRMAPyK/VBTWwCDWwBDUoBjWWSXIsTBrrG8YUxBPEErwaH9sSOr59AQ+LQBhwg/gBdWEwgBAKEFsyHUBT/gJiMOMEBg+c" - . "hZPgQ2MFQYgIF6ABocBsacdF6Gwv6GInbhEABH8vbS/oYC/jB9GyFmcv6XJkEWMPbEAD1WQP5GwP5GIHmgAEfw+tbQ/kYA/jB1ppD/bqHqoAZw/g" - . "bA/gYgckfw9NcA/gYA/jB+QVaA96B2YPwABKNBj6///pRlvEA0I0BXUfUwVtRaE5MEkFAnV6QgWNFFWQAQScwLTHRdwVwhlFwxkr4AeYi0WC3EAS" - . "AcBMjQRAGKGtGUEPtxCTGdwgAQOnB6CZD7cAZoXAUHWk6aqCddgMJ9jZAh/wFB8nbw3YACfjB+6w4AeLdaogh4Ac/5isC47woAsojqG/D4xMQC81" - . "LMBdJMB9P8Aq2EiB4sSh9F3DkAkA7fnv+4SB7OI5jawkgIL8pI3AYgCVyPIHhWEAhSANFLUASMdACDIX7YAJhaIC8QlQ8AnTAAFBg3UBsRqD+CB0" - . "1S0BiAp0wi0BDXSvLQEICXScLQF7D4UpjgNyCa8HoQfHRVCyECjHRVh0AGByAIsFRAP/kBaLAEyifQWE9f7QAMdEJEBTAghEJDiCAI1VMEhQiVQk" - . "MIAAUIEAKEWQASDQEQBBufEBQQWCFrqiAonBQf/S9eAXOEBcaM8QzxDPEM8Qh88QzxAnAX0PhMKiOBVpAYXgd6xeAYP4Igh0CrggEP/pZhEPgQ4B" - . "lGAHwh7o9/3/oP+FwHQiAwJFAQJ/7wzvDO8M7wzvDO8MJAE6eRUKxBAPCAgIUijHCzqbwwu0A4iyA6Ayi40DLPRFaEQ7AmANfxqPDY8Nj48Njw2P" - . "DScBLHUdbwdpYwfpwtALkI4d1Qy6Lg+fEJwQsDkJtjmLVaBoSIlQCBOtfcoD4ZMFWw+FZfJvPwX0MzuypHAA+HQAUkIQM8P7zfkztdEA/zONVdCm" - . "8zMu8P8z/zPgGdjwM3DH/IWsMAGBAh8aHxofGh8axx8aHxonAV0PhMG9nzQ23kdQKCfHUFsnJxUOszEC4iaLlXEMUA1wRCf+7TAYLw0vDS8NLw0v" - . "DS8NLUknJG8HYweD0xbpqstAUL4nXWUNPg1/Ir8nNbkncLcnAcoDFEgPhQ4TIso/BcsQSImFoDl4F4uV0gCwBWcHCAAo6VkEDxt1tAuCDOHvB1wP" - . "hfavY+8H1QrcdTQgAZIHcQKJQgiyfXsfBLQ8x+oFVAdvBGIEXMtvBGUEgG8E+C9vBGIEli9vBGUEOW8E+GJvBAPkFJUCz7YAiwBIjVACSIsAhcAA" - . "AABIiRAY6fICADgEcIsADwC3AGaD+GZ1NE0ASKABSAGwiZUBKGZYxwAMCKQMjKsQjG5VFIwKF0ZkEEZyFEYNVRdGHRBGdBRGCRcj1sIBDyN1D4WF" - . "CguLGYMEMYArAADHhZyAAjkBAOk7AxkBDQAjweA4BInChRSCGQoxL37iQg0JOX8vBx+CHQcPIAHQg+gwiSfpriOCDYsgQH4/DQlGf0osGhU3CRXr" - . "XI0PYBVPFGZcFFdKFAq4/1EAAOm1CJdTg4JQAQSDvYEBAw+OuP4Q//9Ig0IQAus6hcMPdckPEEiNSscPqghGfEhAfI0DJhKQXCAiD4WQ+4AWi4WK" - . "yIIFSEYOKchIAi2BwwVACEiD6ASLeSXVLrhCftcHz2ItdEIuznwPjgwFTwo50A+P9QRBkpiBQQMbi0EiAB4UxQJIx0BAQHlQGXUiww1BSdirigYw" - . "HnUhONMKTX5wDjAPjoKJ0AI5f3brTIYoAFAISInQSMHgAAJIAdBIAcBJTInAaQwgNYuVYwwKAaAHSA+/wEwBwLVgD9AFCIkACE5mH24OBH6OJUxT" - . "BgAAkGHtAy4PhebYG0g+ZoAP78DySA8qwRSxYQLyDxHgQAYxBcAzQpTEM+tsi5VhAYmC0MAbAdABwIlCA734G5iAdwIM4AvgANLgAAEiCGYPKMjy" - . "D14CymYOEEAI8g9YlsFsEKwgFw9IjmrKPwnDAmV0LgVFD4X4Nxub4Q5jBRSnRP8jBQCoxoWTE1QhIwMBlQ7E6zJtBit1H64JO1pYL34TT0MEQzpi" - . "a4xhpLTrOouVYQGGN0F7OlMhN0QhPGEGvw6gDqCIx4WIBEXHhYSlDrgci5WhAkhGwQGDAgQUAYvCADtiDHzWgLK9Qh90KqlCwC/JoEZOjaEGIEYq" - . "ROsoJwVIiQM1DyryBfIPWb0kFfkdJNg6i1JESJhIJA+vOTjrODoDBXVfvwawBqEDvwa6Bgy3IgMKAFNToQ98+HQPhcrfkhOAlRNSi7IAkAkIjRXN" - . "EAMPtgQQGGYPvkEKmAM5wnR95B5LWgWdZqEE8BYWBXsBFAWEwHWXD7YFAMLm//+EwHQdn8kKqFLSPxURZIUVDgMHGVdLBfwiNkNQiwXuodEAicH/" - . "0lMPq/+GIPhmD4XTUQ9FfKEiD0yLRXzSCeKwAhv/DvsOW/889w5FfAEttQSWtASQDqCQDtjlt58OTGGeDgSjBpgO8lQHLZMO5IIBlg7BLzP4bigP" - . "haWSDngSBkmLdEV40gn+oSKfDpMOB9mSDut0bw5lDnhgDoME1rWEBGAOo+wLVad15AtKQ+oLNeoL6wVSB0iIgcQwYA9dw5AHAA+kKQ8ADwACACJV" - . "bmsAbm93bl9PYmpAZWN0XwAihQB0AHJ1ZQBmYWxzQGUAbnVsbJcCVgBhbHVlXwAwMQAyMzQ1Njc4OUBBQkNERUbzBFUASInlSIPEgEgAiU0QSIlV" - . "GExAiUUgx0X8A1NFA8BREVsoSI1NGEgAjVX8SIlUJCiQx0QkIPEBQbkxLBBJici60wJNEP8g0EjHReDSAMdFCuh0APC0BCBIiUUO4OAAU4miBUyL" - . "UDBQi0X8SBAFQNMCRBQkOIUAMIIAjVXgP0YHwFdAB6IHYhVxlk0QGEH/0tEFMyEJdR4/ogaBl8IYYAbkANEY62AxpwIDdVO1AQEMgEhYOdB9QG7U" - . "ArrwGn9RQhs50H/gU0XxD9gWSXCIUwfoQTaFwHRCD6AB2EiLVVADUoEwBhCQSIPsgBge2fMV7GDxFeQVZrIREAUoiUX4oBYUgASLTQAYicq4zczM" - . "zAEwU8JIweggicIIweoDJl4pwYnKAInQg8Awg238CAGJwjETmGaJVBRFwFEEwooDwegDAIlFGIN9GAB1/qkgCxACsAJQk7GTYAoYDGYBsLHgCsRg" - . "CSn0CnAx/yAA6a7SSZEbUBgRYwXB4AVxBYlF0A3xAGMQBtEBQDBIOfDCD42akB6wDqAaYAEFoAFAAAVF8MZF7wAASIN98AB5CMGgAAFI913w8BBB" - . "EEFACfBIumdmAwBIIInISPfqgp/4AgFAJknB+D9MKcBDwQvJoEgpwUi2Eeg9shHosxEAnP8E9ARIwaT5P2ADSCmxC/DiCAB1gIB97wB0EINRBDME" - . "x0RFkC0RKAaQ8gA0FIlFwMZFxudQR3Iui0XgoUKxteJF4QEPtxAkAbHvQCMkAciDR3VvrwIAZnCFwHUeeQHwAnUBBp1QBgEQhl8D0AF0Il8DAXIB" - . "CoNF4AHpZgFwK5CAfecAD4SS9sU3i1WwCxC40Tcs6QFQAAobOAEbjMoDswKlGsjGRd8AlrMQx0XYAAAAi0XYAEiYSI0UAEiLAEXISAHQD7cQBQSQ" - . "DAFIGEgByA+AtwBmOcJ1bw+owABmhcB1HgkuAF4BBS4GxkXfAes6CRNqdCITanQKg0UA2AHpZv///5BAgH3fAHQSAB4gAEiLVdBIiRC4AgEAsOsg" - . "g0X8AUCLRfxIY9AAGxAASItAIEg5wg9AjDv9//+4AdJIAIPEcF3DVUiJIOVIgeyQARCJTQAQSIlVGEjHRaLgAiDHRegEB/CBAwpmgAsFgUMQ8g8Q" - . "QADyDxFF6AANwBUEEciEA9CCA41F4DBIiUXAAAcBRkiLAAWE5v//SIsAUEyLUDCABnaBBseIRCRAAxpEJDgCBAKLAD6JVCQwSI1UVcABBCiADCAB" - . "IEEquYEPQYJbugIVicFAQf/SSIHEAVxdjMOQBgCCZ4PsQAVmMEyJRSAAXABkx0Uc/BQCMgGGACBF8EiAg33wAA+Jm4IKQE3wSLpnZgMASACJyEj3" - . "6kiJ0ABIwfgCSYnISaDB+D9MKYAkwsIEBOACAGJIAcBIKUDBSInKuDDADymA0INt/AGJwgFcQJhmiVRFwFgUSMjB+T8ADkgpQGtFIRyFesBywRBD" - . "EMdERSDALQDpgLsmidAIg8AwOyZ1gMdFEuxBXOtQwAMYAHSuNgFnQhOBGQEAFuyCAjBMjQQCwqjAVo1IE4ACwXIKQQDKZokQBOsPwaeLAI1QAYEB" - . "AokQg0XsARQStYfGjsWpQEd4xHcgyXcFAyYcTx9mxwAiABjpCARCfYkf6fQDg0OCQRqD+CJ1ZsMQshnSEFwA7hdcDpDDC3VKDnxKDlxfDl8OyAXp" - . "6h1QDglKDghfDl8OxgWgYgDpqgJPDpZjAh1EDgxfDl8OxgVmAOnqN1AOI0oOCl8OXw7GBbBuAOnEAJBNDrBjAh1EDg1fDl8OxgVyAOnqUVAOPUoO" - . "CV8OXw7GBbB0AOneQ6NKDsrEpRFDDh9+DYcBfn58N/8P8A/TBXXQBUMND7cL4ZUh2xiAnYnB6Ix1QZE0gwkejwnAAMAGEmFRjkiDRRAhlCIYhWDA" - . "D4X8+4DQuBIi9a8SkMBIIOlm9khgVNVmwokAZo0FjfPQBVBUA2Bn4lMyD7dFEIM04A+RWovAVVBOtgBQZg++0JZZ6BECZhjB6AQRBNF7g338QAN+" - . "yMdF+GA8AATrP7MKJYtF+EhgmEQPt0Tgd24LREyJwr8P4FZt+NAE+BgAebslVVUM" - static Code := false - if ((A_PtrSize * 8) != 64) { - Throw Exception("_LoadLib64Bit does not support " (A_PtrSize * 8) " bit AHK, please run using 64 bit AHK") - } - ; MCL standalone loader https://github.com/G33kDude/MCLib.ahk - ; Copyright (c) 2021 G33kDude, CloakerSmoker (CC-BY-4.0) - ; https://creativecommons.org/licenses/by/4.0/ - if (!Code) { - CompressedSize := VarSetCapacity(DecompressionBuffer, 4080, 0) - if !DllCall("Crypt32\CryptStringToBinary", "Str", CodeBase64, "UInt", 0, "UInt", 1, "Ptr", &DecompressionBuffer, "UInt*", CompressedSize, "Ptr", 0, "Ptr", 0, "UInt") - throw Exception("Failed to convert MCLib b64 to binary") - if !(pCode := DllCall("GlobalAlloc", "UInt", 0, "Ptr", 10464, "Ptr")) - throw Exception("Failed to reserve MCLib memory") - if (DllCall("ntdll\RtlDecompressBuffer", "UShort", 0x102, "Ptr", pCode, "UInt", 10464, "Ptr", &DecompressionBuffer, "UInt", CompressedSize, "UInt*", DecompressedSize, "UInt")) - throw Exception("Error calling RtlDecompressBuffer",, Format("0x{:08x}", r)) - if !DllCall("VirtualProtect", "Ptr", pCode, "Ptr", 10464, "UInt", 0x40, "UInt*", OldProtect, "UInt") - Throw Exception("Failed to mark MCLib memory as executable") - Exports := {} - for ExportName, ExportOffset in {"bBoolsAsInts": 0, "dumps": 16, "fnCastString": 2000, "fnGetObj": 2016, "loads": 2032, "objFalse": 7008, "objNull": 7024, "objTrue": 7040} { - Exports[ExportName] := pCode + ExportOffset - } - Code := Exports - } - return Code - } - _LoadLib() { - return A_PtrSize = 4 ? this._LoadLib32Bit() : this._LoadLib64Bit() - } - - Dumps(obj) - { - this._init() - if (!IsObject(obj)) - throw Exception("Input must be object") - size := 0 - DllCall(this.lib.dumps, "Ptr", &obj, "Ptr", 0, "Int*", size, "CDecl Ptr") - VarSetCapacity(buf, size*2+2, 0) - DllCall(this.lib.dumps, "Ptr", &obj, "Ptr*", &buf, "Int*", size, "CDecl Ptr") - return StrGet(&buf, size, "UTF-16") - } - - Loads(ByRef json) - { - this._init() - - _json := " " json ; Prefix with a space to provide room for BSTR prefixes - VarSetCapacity(pJson, A_PtrSize) - NumPut(&_json, &pJson, 0, "Ptr") - - VarSetCapacity(pResult, 24) - - if (r := DllCall(this.lib.loads, "Ptr", &pJson, "Ptr", &pResult , "CDecl Int")) || ErrorLevel - { - throw Exception("Failed to parse JSON (" r "," ErrorLevel ")", -1 - , Format("Unexpected character at position {}: '{}'" - , (NumGet(pJson)-&_json)//2, Chr(NumGet(NumGet(pJson), "short")))) - } - - result := ComObject(0x400C, &pResult)[] - if (IsObject(result)) - ObjRelease(&result) - return result - } - - True[] - { - get - { - static _ := {"value": true, "name": "true"} - return _ - } - } - - False[] - { - get - { - static _ := {"value": false, "name": "false"} - return _ - } - } - - Null[] - { - get - { - static _ := {"value": "", "name": "null"} - return _ - } - } -} - diff --git a/Src/cJson.ahk b/Src/JSON.ahk similarity index 95% rename from Src/cJson.ahk rename to Src/JSON.ahk index f3fff13..247195c 100644 --- a/Src/cJson.ahk +++ b/Src/JSON.ahk @@ -1,7 +1,7 @@ ο»Ώ -class cJson +class JSON { - static version := "0.3.1-git-dev" + static version := "0.4.0-git-dev" BoolsAsInts[] { @@ -43,7 +43,7 @@ class cJson return MCL.FromC("#include ""dumps.c""`n#include ""loads.c""") } - Dumps(obj, pretty := 0) + Dump(obj, pretty := 0) { this._init() if (!IsObject(obj)) @@ -57,7 +57,7 @@ class cJson return StrGet(&buf, size, "UTF-16") } - Loads(ByRef json) + Load(ByRef json) { this._init() diff --git a/Tests/!TestDev.ahk b/Tests/!TestDev.ahk index 16f5e2c..a1f7f27 100644 --- a/Tests/!TestDev.ahk +++ b/Tests/!TestDev.ahk @@ -11,7 +11,7 @@ SetWorkingDir, %A_LineFile%/../../Src/ #Include OutputDebug.ahk ; Include dev cJson -#Include %A_LineFile%/../../Src/cJson.ahk +#Include %A_LineFile%/../../Src/JSON.ahk ; Include test suites #Include %A_LineFile%\..\ diff --git a/Tests/!TestDist.ahk b/Tests/!TestDist.ahk index ec43460..3c4d471 100644 --- a/Tests/!TestDist.ahk +++ b/Tests/!TestDist.ahk @@ -11,7 +11,7 @@ SetBatchLines, -1 #Include OutputDebug.ahk ; Include Dist cJson -#Include %A_LineFile%/../../Dist/cJson.ahk +#Include %A_LineFile%/../../Dist/JSON.ahk ; Include test suites #Include %A_LineFile%\..\ diff --git a/Tests/DumpsTestSuite.ahk b/Tests/DumpsTestSuite.ahk index 63765d3..ce36742 100644 --- a/Tests/DumpsTestSuite.ahk +++ b/Tests/DumpsTestSuite.ahk @@ -11,7 +11,7 @@ class DumpsTestSuite { expected = Input must be object try - produced := cJson.Dumps(42) + produced := JSON.Dump(42) catch e produced := e.message Yunit.assert(produced == expected, Format(this.message, expected, produced)) @@ -21,7 +21,7 @@ class DumpsTestSuite { expected = Input must be object try - produced := cJson.Dumps("string") + produced := JSON.Dump("string") catch e produced := e.message Yunit.assert(produced == expected, Format(this.message, expected, produced)) @@ -30,63 +30,63 @@ class DumpsTestSuite Test_Object_Empty() { expected = [] - produced := cJson.Dumps({}) + produced := JSON.Dump({}) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Array_Numbers() { expected = [3, 2, 1] - produced := cJson.Dumps([3, 2, 1]) + produced := JSON.Dump([3, 2, 1]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Array_Strings() { expected = ["a", "1", ""] - produced := cJson.Dumps(["a", "1", ""]) + produced := JSON.Dump(["a", "1", ""]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Object_Numbers() { expected = {"key1": 1, "key2": 2} - produced := cJson.Dumps({"key2": 2, "key1": 1}) + produced := JSON.Dump({"key2": 2, "key1": 1}) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Object_Strings() { expected = {"key1": "1", "key2": "2"} - produced := cJson.Dumps({"key2": "2", "key1": "1"}) + produced := JSON.Dump({"key2": "2", "key1": "1"}) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Array_Empty() { expected = [] - produced := cJson.Dumps([]) + produced := JSON.Dump([]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Array_Nested() { expected = [[1, 2], [3, [4, 5], 6], [7, 8]] - produced := cJson.Dumps([[1, 2], [3, [4, 5], 6], [7, 8]]) + produced := JSON.Dump([[1, 2], [3, [4, 5], 6], [7, 8]]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } Test_Array_Com() { expected = \["Unknown_Object_\d+"\] - produced := cJson.Dumps([ComObjCreate("WScript.Shell")]) + produced := JSON.Dump([ComObjCreate("WScript.Shell")]) Yunit.assert(produced ~= expected, Format(this.message, expected, produced)) } Test_Array_Specials() { expected = [true, false, null] - produced := cJson.Dumps([cJson.True, cJson.False, cJson.Null]) + produced := JSON.Dump([JSON.True, JSON.False, JSON.Null]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } @@ -96,7 +96,7 @@ class DumpsTestSuite expected = [0.500000, -0.750000, "0.5", 85070591730234616000000000000000000000.000000] else expected = [0.500000, -0.750000, "0.5", 85070591730234615865843651857942052864.000000] - produced := cJson.Dumps([1/2, -3/4, 0.5, (0xFFFFFFFFFFFFFFFF*1.0)**2]) + produced := JSON.Dump([1/2, -3/4, 0.5, (0xFFFFFFFFFFFFFFFF*1.0)**2]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } @@ -108,7 +108,7 @@ class DumpsTestSuite \uD83C\uDF69\uD83C\uDF05\uD83C\uDF33\uD83D\uDC14\uD83C\uDFE9\uD83C\uDF4E \uD83D\uDCF5\uD83C\uDF6D\uD83C\uDF16\uD83D\uDD20\uD83C\uDF5A"] ) - produced := cJson.Dumps(["πŸ“ŽπŸŸπŸ’πŸ€πŸ”ΌπŸ‘πŸ‘“ πŸ©πŸŒ…πŸŒ³πŸ”πŸ©πŸŽ πŸ“΅πŸ­πŸŒ–πŸ” πŸš"]) + produced := JSON.Dump(["πŸ“ŽπŸŸπŸ’πŸ€πŸ”ΌπŸ‘πŸ‘“ πŸ©πŸŒ…πŸŒ³πŸ”πŸ©πŸŽ πŸ“΅πŸ­πŸŒ–πŸ” πŸš"]) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } @@ -126,7 +126,7 @@ class DumpsTestSuite , 2147483648: 0 ; 32-bit -2147483648 , 9223372036854775808: 0} ; 32-bit -1 - produced := cJson.Dumps(produced) + produced := JSON.Dump(produced) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } diff --git a/Tests/LoadsTestSuite.ahk b/Tests/LoadsTestSuite.ahk index 802740f..5893d47 100644 --- a/Tests/LoadsTestSuite.ahk +++ b/Tests/LoadsTestSuite.ahk @@ -12,7 +12,7 @@ class LoadsTestSuite { input = "\"\\\/\b\f\n\r\t\u1234" expected := """\/`b`f`n`r`t" Chr(0x1234) - produced := cJson.Loads(input) + produced := JSON.Load(input) Yunit.assert(produced == expected, Format(this.message, expected, produced)) } @@ -20,7 +20,7 @@ class LoadsTestSuite { input = 1.12345 expected := 1.12345 - produced := cJson.Loads(input) + produced := JSON.Load(input) Yunit.assert(Abs(produced - expected) < 0.0005, Format(this.message, expected, produced)) } @@ -28,7 +28,7 @@ class LoadsTestSuite { input = [1} try - cJson.Loads(input) + JSON.Load(input) catch e pass = pass Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message) @@ -39,7 +39,7 @@ class LoadsTestSuite { input = [trne] try - cJson.Loads(input) + JSON.Load(input) catch e pass = pass Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message) @@ -50,7 +50,7 @@ class LoadsTestSuite { expected := [1, 2, 3] produced = [1, 2, 3] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -58,23 +58,23 @@ class LoadsTestSuite { expected := ["a", "b", "c"] produced = ["a", "b", "c"] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } Test_Array_Specials() { ; Test BoolsAsInts True (default) - expected := [1, 0, cJson.null] + expected := [1, 0, JSON.null] produced = [true, false, null] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) ; Test BoolsAsInts False - cJson.BoolsAsInts := False - expected := [cJson.true, cJson.false, cJson.null] + JSON.BoolsAsInts := False + expected := [JSON.true, JSON.false, JSON.null] produced = [true, false, null] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -82,7 +82,7 @@ class LoadsTestSuite { expected := [[1, 2], [3, [4, 5], 6], [7, 8]] produced = [[1, 2], [3, [4, 5], 6], [7, 8]] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -90,7 +90,7 @@ class LoadsTestSuite { expected := {"key2": 2, "key1": 1} produced = {"key2": 2, "key1": 1} - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -98,7 +98,7 @@ class LoadsTestSuite { input = {1: "failure"} try - cJson.Loads(input) + JSON.Load(input) catch e pass = pass Yunit.assert(e.message == "Failed to parse JSON (-1,0)", e.message) @@ -109,7 +109,7 @@ class LoadsTestSuite { expected := {"key2": "2", "key1": "1"} produced = {"key2": "2", "key1": "1"} - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -117,7 +117,7 @@ class LoadsTestSuite { expected := {"k1": {"k1": 1, "k2": 2}, "k2": {"k1": 3, "k2": {"k1": 4, "k2": 5}, "k3": 6}, "k3": {"k1": 7, "k2": 8}} produced = {"k1": {"k1": 1, "k2": 2}, "k2": {"k1": 3, "k2": {"k1": 4, "k2": 5}, "k3": 6}, "k3": {"k1": 7, "k2": 8}} - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) } @@ -125,7 +125,7 @@ class LoadsTestSuite { expected := [1, 2147483649, 0.1, "a"] produced = [1, 2147483649, 0.1, "a"] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(ObjGetCapacity(produced, 1) == "", "1 decoded as string") Yunit.assert(ObjGetCapacity(produced, 2) == "", "2147483649 decoded as string") Yunit.assert(ObjGetCapacity(produced, 3) == "", "0.1 decoded as string") @@ -136,7 +136,7 @@ class LoadsTestSuite { expected := [9223372036854775807, -9223372036854775808, {-1: -2147483648, 0: 2147483648, 1: -2147483649, "a": 2147483649}] produced = [9223372036854775807, -9223372036854775808, {"-1": -2147483648, "0": 2147483648, "1": -2147483649, "a": 2147483649}] - produced := cJson.Loads(produced) + produced := JSON.Load(produced) Yunit.assert(isEqual(produced, expected), Format(this.message, expected, produced)) }