From 7eaf834e700b76632dc5669e28776dc3d33fe27d Mon Sep 17 00:00:00 2001 From: Arun Arumugam Date: Wed, 19 Aug 2026 20:08:39 -0700 Subject: [PATCH] gh-153668: Replace Unicode numeric switch with binary-search tables --- ...-08-19-18-54-20.gh-issue-153668.hJ8mQ2.rst | 3 + Objects/unicodetype_db.h | 2667 +++-------------- Tools/unicode/makeunicodedata.py | 48 +- 3 files changed, 531 insertions(+), 2187 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2026-08-19-18-54-20.gh-issue-153668.hJ8mQ2.rst diff --git a/Misc/NEWS.d/next/Build/2026-08-19-18-54-20.gh-issue-153668.hJ8mQ2.rst b/Misc/NEWS.d/next/Build/2026-08-19-18-54-20.gh-issue-153668.hJ8mQ2.rst new file mode 100644 index 00000000000000..15a85e5f2e576d --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-08-19-18-54-20.gh-issue-153668.hJ8mQ2.rst @@ -0,0 +1,3 @@ +Fix Windows ARM64 Release builds with MSVC v145 by replacing the generated +Unicode numeric-value switch with compact binary-search tables. This avoids +excessive compiler memory usage. diff --git a/Objects/unicodetype_db.h b/Objects/unicodetype_db.h index 536f51324aeee8..d1bf23cf198f64 100644 --- a/Objects/unicodetype_db.h +++ b/Objects/unicodetype_db.h @@ -4356,2186 +4356,503 @@ static const unsigned short index2[] = { 0, }; +/* Sorted code points and parallel indexes into numeric_values. */ +static const unsigned int numeric_codepoints[] = { + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 178, 179, 185, 188, 189, 190, + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1776, 1777, + 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1984, 1985, 1986, 1987, + 1988, 1989, 1990, 1991, 1992, 1993, 2406, 2407, 2408, 2409, 2410, 2411, + 2412, 2413, 2414, 2415, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, + 2542, 2543, 2548, 2549, 2550, 2551, 2552, 2553, 2662, 2663, 2664, 2665, + 2666, 2667, 2668, 2669, 2670, 2671, 2790, 2791, 2792, 2793, 2794, 2795, + 2796, 2797, 2798, 2799, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, + 2926, 2927, 2930, 2931, 2932, 2933, 2934, 2935, 3046, 3047, 3048, 3049, + 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3174, 3175, 3176, + 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3192, 3193, 3194, 3195, 3196, + 3197, 3198, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, + 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3430, 3431, 3432, 3433, 3434, + 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, + 3447, 3448, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, + 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3792, 3793, + 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3872, 3873, 3874, 3875, + 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, + 3888, 3889, 3890, 3891, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, + 4168, 4169, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, + 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, + 4981, 4982, 4983, 4984, 4985, 4986, 4987, 4988, 5870, 5871, 5872, 6112, + 6113, 6114, 6115, 6116, 6117, 6118, 6119, 6120, 6121, 6128, 6129, 6130, + 6131, 6132, 6133, 6134, 6135, 6136, 6137, 6160, 6161, 6162, 6163, 6164, + 6165, 6166, 6167, 6168, 6169, 6470, 6471, 6472, 6473, 6474, 6475, 6476, + 6477, 6478, 6479, 6608, 6609, 6610, 6611, 6612, 6613, 6614, 6615, 6616, + 6617, 6618, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 6791, 6792, 6793, + 6800, 6801, 6802, 6803, 6804, 6805, 6806, 6807, 6808, 6809, 6992, 6993, + 6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, 7088, 7089, 7090, 7091, + 7092, 7093, 7094, 7095, 7096, 7097, 7232, 7233, 7234, 7235, 7236, 7237, + 7238, 7239, 7240, 7241, 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, + 7256, 7257, 8304, 8308, 8309, 8310, 8311, 8312, 8313, 8320, 8321, 8322, + 8323, 8324, 8325, 8326, 8327, 8328, 8329, 8528, 8529, 8530, 8531, 8532, + 8533, 8534, 8535, 8536, 8537, 8538, 8539, 8540, 8541, 8542, 8543, 8544, + 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 8556, + 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, + 8569, 8570, 8571, 8572, 8573, 8574, 8575, 8576, 8577, 8578, 8581, 8582, + 8583, 8584, 8585, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, + 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332, + 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, + 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354, 9355, 9356, + 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, + 9369, 9370, 9371, 9450, 9451, 9452, 9453, 9454, 9455, 9456, 9457, 9458, + 9459, 9460, 9461, 9462, 9463, 9464, 9465, 9466, 9467, 9468, 9469, 9470, + 9471, 10102, 10103, 10104, 10105, 10106, 10107, 10108, 10109, 10110, + 10111, 10112, 10113, 10114, 10115, 10116, 10117, 10118, 10119, 10120, + 10121, 10122, 10123, 10124, 10125, 10126, 10127, 10128, 10129, 10130, + 10131, 11517, 12295, 12321, 12322, 12323, 12324, 12325, 12326, 12327, + 12328, 12329, 12344, 12345, 12346, 12690, 12691, 12692, 12693, 12832, + 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 12872, + 12873, 12874, 12875, 12876, 12877, 12878, 12879, 12881, 12882, 12883, + 12884, 12885, 12886, 12887, 12888, 12889, 12890, 12891, 12892, 12893, + 12894, 12895, 12928, 12929, 12930, 12931, 12932, 12933, 12934, 12935, + 12936, 12937, 12977, 12978, 12979, 12980, 12981, 12982, 12983, 12984, + 12985, 12986, 12987, 12988, 12989, 12990, 12991, 13317, 13443, 14378, + 15181, 19968, 19971, 19975, 19977, 20004, 20061, 20108, 20116, 20118, + 20140, 20159, 20160, 20191, 20200, 20237, 20336, 20457, 20486, 20740, + 20806, 20841, 20843, 20845, 21313, 21315, 21316, 21317, 21324, 21441, + 21442, 21443, 21444, 22235, 22769, 22777, 24186, 24318, 24319, 24332, + 24333, 24334, 24336, 25296, 25342, 25420, 26578, 27934, 28422, 29590, + 30334, 30357, 31213, 32902, 33836, 36014, 36019, 36144, 37390, 38057, + 38433, 38470, 38476, 38520, 38646, 42528, 42529, 42530, 42531, 42532, + 42533, 42534, 42535, 42536, 42537, 42726, 42727, 42728, 42729, 42730, + 42731, 42732, 42733, 42734, 42735, 43056, 43057, 43058, 43059, 43060, + 43061, 43216, 43217, 43218, 43219, 43220, 43221, 43222, 43223, 43224, + 43225, 43264, 43265, 43266, 43267, 43268, 43269, 43270, 43271, 43272, + 43273, 43472, 43473, 43474, 43475, 43476, 43477, 43478, 43479, 43480, + 43481, 43504, 43505, 43506, 43507, 43508, 43509, 43510, 43511, 43512, + 43513, 43600, 43601, 43602, 43603, 43604, 43605, 43606, 43607, 43608, + 43609, 44016, 44017, 44018, 44019, 44020, 44021, 44022, 44023, 44024, + 44025, 63851, 63859, 63864, 63922, 63953, 63955, 63997, 65296, 65297, + 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65799, 65800, + 65801, 65802, 65803, 65804, 65805, 65806, 65807, 65808, 65809, 65810, + 65811, 65812, 65813, 65814, 65815, 65816, 65817, 65818, 65819, 65820, + 65821, 65822, 65823, 65824, 65825, 65826, 65827, 65828, 65829, 65830, + 65831, 65832, 65833, 65834, 65835, 65836, 65837, 65838, 65839, 65840, + 65841, 65842, 65843, 65856, 65857, 65858, 65859, 65860, 65861, 65862, + 65863, 65864, 65865, 65866, 65867, 65868, 65869, 65870, 65871, 65872, + 65873, 65874, 65875, 65876, 65877, 65878, 65879, 65880, 65881, 65882, + 65883, 65884, 65885, 65886, 65887, 65888, 65889, 65890, 65891, 65892, + 65893, 65894, 65895, 65896, 65897, 65898, 65899, 65900, 65901, 65902, + 65903, 65904, 65905, 65906, 65907, 65908, 65909, 65910, 65911, 65912, + 65930, 65931, 66273, 66274, 66275, 66276, 66277, 66278, 66279, 66280, + 66281, 66282, 66283, 66284, 66285, 66286, 66287, 66288, 66289, 66290, + 66291, 66292, 66293, 66294, 66295, 66296, 66297, 66298, 66299, 66336, + 66337, 66338, 66339, 66369, 66378, 66513, 66514, 66515, 66516, 66517, + 66720, 66721, 66722, 66723, 66724, 66725, 66726, 66727, 66728, 66729, + 67672, 67673, 67674, 67675, 67676, 67677, 67678, 67679, 67705, 67706, + 67707, 67708, 67709, 67710, 67711, 67751, 67752, 67753, 67754, 67755, + 67756, 67757, 67758, 67759, 67835, 67836, 67837, 67838, 67839, 67862, + 67863, 67864, 67865, 67866, 67867, 68028, 68029, 68032, 68033, 68034, + 68035, 68036, 68037, 68038, 68039, 68040, 68041, 68042, 68043, 68044, + 68045, 68046, 68047, 68050, 68051, 68052, 68053, 68054, 68055, 68056, + 68057, 68058, 68059, 68060, 68061, 68062, 68063, 68064, 68065, 68066, + 68067, 68068, 68069, 68070, 68071, 68072, 68073, 68074, 68075, 68076, + 68077, 68078, 68079, 68080, 68081, 68082, 68083, 68084, 68085, 68086, + 68087, 68088, 68089, 68090, 68091, 68092, 68093, 68094, 68095, 68160, + 68161, 68162, 68163, 68164, 68165, 68166, 68167, 68168, 68221, 68222, + 68253, 68254, 68255, 68331, 68332, 68333, 68334, 68335, 68440, 68441, + 68442, 68443, 68444, 68445, 68446, 68447, 68472, 68473, 68474, 68475, + 68476, 68477, 68478, 68479, 68521, 68522, 68523, 68524, 68525, 68526, + 68527, 68858, 68859, 68860, 68861, 68862, 68863, 68912, 68913, 68914, + 68915, 68916, 68917, 68918, 68919, 68920, 68921, 68928, 68929, 68930, + 68931, 68932, 68933, 68934, 68935, 68936, 68937, 69216, 69217, 69218, + 69219, 69220, 69221, 69222, 69223, 69224, 69225, 69226, 69227, 69228, + 69229, 69230, 69231, 69232, 69233, 69234, 69235, 69236, 69237, 69238, + 69239, 69240, 69241, 69242, 69243, 69244, 69245, 69246, 69405, 69406, + 69407, 69408, 69409, 69410, 69411, 69412, 69413, 69414, 69457, 69458, + 69459, 69460, 69573, 69574, 69575, 69576, 69577, 69578, 69579, 69714, + 69715, 69716, 69717, 69718, 69719, 69720, 69721, 69722, 69723, 69724, + 69725, 69726, 69727, 69728, 69729, 69730, 69731, 69732, 69733, 69734, + 69735, 69736, 69737, 69738, 69739, 69740, 69741, 69742, 69743, 69872, + 69873, 69874, 69875, 69876, 69877, 69878, 69879, 69880, 69881, 69942, + 69943, 69944, 69945, 69946, 69947, 69948, 69949, 69950, 69951, 70096, + 70097, 70098, 70099, 70100, 70101, 70102, 70103, 70104, 70105, 70113, + 70114, 70115, 70116, 70117, 70118, 70119, 70120, 70121, 70122, 70123, + 70124, 70125, 70126, 70127, 70128, 70129, 70130, 70131, 70132, 70384, + 70385, 70386, 70387, 70388, 70389, 70390, 70391, 70392, 70393, 70736, + 70737, 70738, 70739, 70740, 70741, 70742, 70743, 70744, 70745, 70864, + 70865, 70866, 70867, 70868, 70869, 70870, 70871, 70872, 70873, 71248, + 71249, 71250, 71251, 71252, 71253, 71254, 71255, 71256, 71257, 71360, + 71361, 71362, 71363, 71364, 71365, 71366, 71367, 71368, 71369, 71376, + 71377, 71378, 71379, 71380, 71381, 71382, 71383, 71384, 71385, 71386, + 71387, 71388, 71389, 71390, 71391, 71392, 71393, 71394, 71395, 71472, + 71473, 71474, 71475, 71476, 71477, 71478, 71479, 71480, 71481, 71482, + 71483, 71904, 71905, 71906, 71907, 71908, 71909, 71910, 71911, 71912, + 71913, 71914, 71915, 71916, 71917, 71918, 71919, 71920, 71921, 71922, + 72016, 72017, 72018, 72019, 72020, 72021, 72022, 72023, 72024, 72025, + 72688, 72689, 72690, 72691, 72692, 72693, 72694, 72695, 72696, 72697, + 72784, 72785, 72786, 72787, 72788, 72789, 72790, 72791, 72792, 72793, + 72794, 72795, 72796, 72797, 72798, 72799, 72800, 72801, 72802, 72803, + 72804, 72805, 72806, 72807, 72808, 72809, 72810, 72811, 72812, 73040, + 73041, 73042, 73043, 73044, 73045, 73046, 73047, 73048, 73049, 73120, + 73121, 73122, 73123, 73124, 73125, 73126, 73127, 73128, 73129, 73184, + 73185, 73186, 73187, 73188, 73189, 73190, 73191, 73192, 73193, 73552, + 73553, 73554, 73555, 73556, 73557, 73558, 73559, 73560, 73561, 73664, + 73665, 73666, 73667, 73668, 73669, 73670, 73671, 73672, 73673, 73674, + 73675, 73676, 73677, 73678, 73679, 73680, 73681, 73682, 73683, 73684, + 73784, 73785, 73849, 74278, 74283, 74507, 74509, 74649, 74752, 74753, + 74754, 74755, 74756, 74757, 74758, 74759, 74760, 74761, 74762, 74763, + 74764, 74765, 74766, 74767, 74768, 74769, 74770, 74771, 74772, 74773, + 74774, 74775, 74776, 74777, 74778, 74779, 74780, 74781, 74782, 74783, + 74784, 74785, 74786, 74787, 74788, 74789, 74790, 74791, 74792, 74793, + 74794, 74795, 74796, 74797, 74798, 74799, 74800, 74801, 74802, 74803, + 74804, 74805, 74806, 74807, 74808, 74809, 74810, 74811, 74812, 74813, + 74814, 74815, 74816, 74817, 74818, 74819, 74820, 74821, 74822, 74823, + 74824, 74825, 74826, 74827, 74828, 74829, 74830, 74831, 74832, 74833, + 74834, 74835, 74836, 74837, 74838, 74839, 74840, 74841, 74842, 74843, + 74844, 74845, 74846, 74847, 74848, 74849, 74850, 74851, 74852, 74853, + 74854, 74855, 74856, 74857, 74858, 74859, 74860, 74861, 74862, 90416, + 90417, 90418, 90419, 90420, 90421, 90422, 90423, 90424, 90425, 92768, + 92769, 92770, 92771, 92772, 92773, 92774, 92775, 92776, 92777, 92864, + 92865, 92866, 92867, 92868, 92869, 92870, 92871, 92872, 92873, 93008, + 93009, 93010, 93011, 93012, 93013, 93014, 93015, 93016, 93017, 93019, + 93020, 93021, 93022, 93023, 93024, 93025, 93552, 93553, 93554, 93555, + 93556, 93557, 93558, 93559, 93560, 93561, 93824, 93825, 93826, 93827, + 93828, 93829, 93830, 93831, 93832, 93833, 93834, 93835, 93836, 93837, + 93838, 93839, 93840, 93841, 93842, 93843, 93844, 93845, 93846, 94196, + 94197, 94198, 118000, 118001, 118002, 118003, 118004, 118005, 118006, + 118007, 118008, 118009, 119488, 119489, 119490, 119491, 119492, 119493, + 119494, 119495, 119496, 119497, 119498, 119499, 119500, 119501, 119502, + 119503, 119504, 119505, 119506, 119507, 119520, 119521, 119522, 119523, + 119524, 119525, 119526, 119527, 119528, 119529, 119530, 119531, 119532, + 119533, 119534, 119535, 119536, 119537, 119538, 119539, 119648, 119649, + 119650, 119651, 119652, 119653, 119654, 119655, 119656, 119657, 119658, + 119659, 119660, 119661, 119662, 119663, 119664, 119665, 119666, 119667, + 119668, 119669, 119670, 119671, 119672, 120782, 120783, 120784, 120785, + 120786, 120787, 120788, 120789, 120790, 120791, 120792, 120793, 120794, + 120795, 120796, 120797, 120798, 120799, 120800, 120801, 120802, 120803, + 120804, 120805, 120806, 120807, 120808, 120809, 120810, 120811, 120812, + 120813, 120814, 120815, 120816, 120817, 120818, 120819, 120820, 120821, + 120822, 120823, 120824, 120825, 120826, 120827, 120828, 120829, 120830, + 120831, 123200, 123201, 123202, 123203, 123204, 123205, 123206, 123207, + 123208, 123209, 123632, 123633, 123634, 123635, 123636, 123637, 123638, + 123639, 123640, 123641, 124144, 124145, 124146, 124147, 124148, 124149, + 124150, 124151, 124152, 124153, 124401, 124402, 124403, 124404, 124405, + 124406, 124407, 124408, 124409, 124410, 125127, 125128, 125129, 125130, + 125131, 125132, 125133, 125134, 125135, 125264, 125265, 125266, 125267, + 125268, 125269, 125270, 125271, 125272, 125273, 126065, 126066, 126067, + 126068, 126069, 126070, 126071, 126072, 126073, 126074, 126075, 126076, + 126077, 126078, 126079, 126080, 126081, 126082, 126083, 126084, 126085, + 126086, 126087, 126088, 126089, 126090, 126091, 126092, 126093, 126094, + 126095, 126096, 126097, 126098, 126099, 126100, 126101, 126102, 126103, + 126104, 126105, 126106, 126107, 126108, 126109, 126110, 126111, 126112, + 126113, 126114, 126115, 126116, 126117, 126118, 126119, 126120, 126121, + 126122, 126123, 126125, 126126, 126127, 126129, 126130, 126131, 126132, + 126209, 126210, 126211, 126212, 126213, 126214, 126215, 126216, 126217, + 126218, 126219, 126220, 126221, 126222, 126223, 126224, 126225, 126226, + 126227, 126228, 126229, 126230, 126231, 126232, 126233, 126234, 126235, + 126236, 126237, 126238, 126239, 126240, 126241, 126242, 126243, 126244, + 126245, 126246, 126247, 126248, 126249, 126250, 126251, 126252, 126253, + 126255, 126256, 126257, 126258, 126259, 126260, 126261, 126262, 126263, + 126264, 126265, 126266, 126267, 126268, 126269, 127232, 127233, 127234, + 127235, 127236, 127237, 127238, 127239, 127240, 127241, 127242, 127243, + 127244, 130032, 130033, 130034, 130035, 130036, 130037, 130038, 130039, + 130040, 130041, 131073, 131172, 131298, 131361, 133418, 133507, 133516, + 133532, 133866, 133885, 133913, 140176, 141720, 146203, 156269, 194704, +}; + +static const unsigned char numeric_value_indices[] = { + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 48, 68, 2, 12, 7, 73, 1, 2, + 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, + 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 5, + 18, 70, 12, 73, 43, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 12, 7, 73, 5, 18, 70, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, + 23, 24, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 2, 48, + 68, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 6, 13, 77, 8, 3, 72, 14, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 23, 24, 12, 7, 73, 5, 18, + 70, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, + 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 7, 71, 112, 129, 145, 36, 39, 42, 45, 0, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, + 115, 122, 131, 138, 146, 23, 25, 44, 46, 47, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 2, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, + 120, 127, 136, 143, 17, 20, 3, 9, 50, 14, 51, 74, 94, 15, 113, 18, 76, + 114, 130, 2, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 34, 37, 115, 23, + 116, 24, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 34, 37, 115, 23, + 116, 24, 24, 117, 25, 120, 115, 118, 26, 1, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 21, 34, 37, 38, 40, 41, 43, 44, 46, 47, 52, 2, 48, 68, 92, 110, + 120, 127, 136, 143, 21, 34, 37, 38, 40, 41, 43, 44, 46, 47, 52, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 21, 34, 37, 38, 40, 41, 43, 44, 46, 47, + 52, 1, 34, 37, 38, 40, 41, 43, 44, 46, 47, 52, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 21, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 21, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 21, 7, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 2, 48, + 68, 92, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 21, 52, 78, 95, 115, + 122, 131, 138, 58, 60, 61, 62, 63, 64, 65, 66, 67, 78, 83, 84, 85, 86, + 87, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 88, 89, 90, 91, 95, 100, + 101, 102, 104, 105, 106, 107, 108, 109, 115, 110, 48, 110, 127, 2, 127, + 25, 68, 48, 143, 48, 110, 92, 33, 29, 21, 24, 68, 110, 23, 48, 48, 29, + 32, 48, 136, 120, 21, 24, 52, 78, 95, 68, 68, 68, 68, 92, 2, 2, 2, 143, + 52, 2, 48, 68, 48, 127, 21, 136, 127, 1, 127, 143, 23, 53, 30, 92, 25, + 48, 48, 48, 143, 143, 24, 120, 23, 120, 1, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 12, 7, 73, 5, + 18, 70, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, + 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 68, 21, 48, 1, 120, 120, + 21, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 21, 52, 78, 95, 115, 122, 131, 138, 146, 23, 53, 79, 96, + 116, 123, 132, 139, 147, 24, 54, 80, 97, 117, 124, 133, 140, 148, 25, 55, + 81, 98, 118, 125, 134, 141, 149, 12, 7, 2, 110, 115, 116, 117, 118, 110, + 21, 115, 23, 116, 24, 117, 110, 21, 115, 23, 116, 24, 25, 118, 21, 2, 2, + 2, 48, 48, 48, 48, 110, 21, 21, 21, 21, 21, 78, 115, 115, 115, 115, 23, + 79, 116, 116, 116, 116, 116, 24, 117, 110, 115, 7, 7, 50, 73, 1, 12, 2, + 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, 115, 122, 131, 138, + 146, 23, 53, 79, 96, 116, 123, 132, 139, 147, 2, 110, 21, 115, 146, 147, + 2, 48, 21, 52, 23, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 2, 48, 68, + 21, 52, 23, 24, 25, 2, 48, 68, 92, 110, 21, 52, 2, 48, 68, 92, 92, 110, + 21, 52, 23, 2, 110, 21, 52, 23, 2, 21, 52, 23, 48, 68, 35, 7, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, 115, 122, 131, 23, 53, 79, + 96, 116, 123, 132, 139, 147, 24, 54, 80, 97, 117, 124, 133, 140, 148, 25, + 55, 81, 98, 118, 125, 134, 141, 149, 26, 56, 82, 99, 119, 126, 135, 142, + 150, 4, 49, 69, 93, 111, 121, 128, 137, 144, 22, 2, 48, 68, 92, 21, 52, + 23, 24, 7, 2, 115, 2, 21, 52, 2, 110, 21, 52, 23, 2, 48, 68, 92, 21, 52, + 23, 24, 2, 48, 68, 92, 21, 52, 23, 24, 2, 48, 68, 92, 21, 52, 23, 2, 110, + 21, 115, 23, 24, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, + 52, 78, 95, 115, 122, 131, 138, 146, 23, 53, 79, 96, 116, 123, 132, 139, + 147, 7, 12, 9, 50, 2, 48, 68, 92, 110, 21, 52, 78, 23, 7, 2, 21, 52, 23, + 2, 48, 68, 92, 21, 52, 23, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, + 52, 78, 95, 115, 122, 131, 138, 146, 23, 24, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, + 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, 115, 122, 131, + 138, 146, 23, 24, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, + 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, + 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 21, 52, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, + 115, 122, 131, 138, 146, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, + 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 52, 78, 95, 115, + 122, 131, 138, 146, 23, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, + 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 11, 6, 19, 16, 13, + 10, 77, 75, 8, 5, 5, 3, 18, 72, 70, 14, 12, 7, 7, 73, 11, 2, 2, 2, 7, 48, + 2, 68, 48, 48, 68, 92, 110, 120, 127, 136, 143, 68, 92, 110, 120, 127, + 136, 143, 92, 110, 120, 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 2, 48, 68, 92, 110, 48, 68, 68, 92, 110, 120, 127, 136, 143, 2, 48, + 68, 68, 92, 110, 59, 103, 2, 48, 68, 68, 92, 110, 68, 68, 92, 92, 92, 92, + 120, 127, 127, 127, 136, 136, 143, 143, 143, 143, 48, 68, 92, 110, 120, + 2, 48, 68, 92, 92, 110, 110, 48, 68, 2, 48, 9, 50, 113, 9, 50, 18, 12, + 15, 12, 12, 7, 9, 50, 95, 115, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 21, 23, 25, 27, 29, 31, 32, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 34, 37, 38, + 40, 41, 43, 44, 46, 47, 2, 48, 68, 2, 71, 48, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, 34, 37, 38, + 40, 41, 43, 44, 46, 47, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 21, + 34, 37, 38, 40, 41, 43, 44, 46, 47, 2, 48, 68, 92, 110, 120, 127, 136, + 143, 21, 52, 78, 95, 115, 122, 131, 138, 146, 2, 48, 68, 92, 110, 2, 110, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 2, 48, 68, + 92, 110, 120, 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, + 2, 48, 68, 92, 110, 120, 127, 136, 143, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 21, 52, 78, 95, 115, 122, 131, 138, 146, 23, 53, 79, 96, 116, + 123, 132, 139, 147, 24, 54, 80, 97, 117, 124, 133, 140, 148, 25, 55, 81, + 98, 118, 125, 134, 141, 149, 26, 56, 26, 28, 57, 2, 48, 68, 92, 110, 120, + 127, 136, 143, 12, 7, 73, 2, 48, 25, 26, 2, 48, 68, 92, 110, 120, 127, + 136, 143, 21, 52, 78, 95, 115, 122, 131, 138, 146, 23, 53, 79, 96, 116, + 123, 132, 139, 147, 24, 54, 80, 97, 117, 124, 133, 140, 148, 25, 55, 81, + 98, 118, 125, 134, 141, 149, 48, 68, 92, 110, 120, 127, 136, 143, 21, 96, + 123, 54, 25, 7, 15, 1, 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 1, 1, + 1, 2, 48, 68, 92, 110, 120, 127, 136, 143, 127, 92, 92, 110, 2, 78, 95, + 95, 120, 68, 68, 48, 68, 68, 92, 143, +}; + +static const double numeric_values[] = { + -1.0/2.0, + 0.0, + 1.0, + 1.0/10.0, + 1.0/12.0, + 1.0/16.0, + 1.0/160.0, + 1.0/2.0, + 1.0/20.0, + 1.0/3.0, + 1.0/32.0, + 1.0/320.0, + 1.0/4.0, + 1.0/40.0, + 1.0/5.0, + 1.0/6.0, + 1.0/64.0, + 1.0/7.0, + 1.0/8.0, + 1.0/80.0, + 1.0/9.0, + 10.0, + 10.0/12.0, + 100.0, + 1000.0, + 10000.0, + 100000.0, + 1000000.0, + 10000000.0, + 100000000.0, + 1000000000.0, + 10000000000.0, + 1000000000000.0, + 1e+16, + 11.0, + 11.0/12.0, + 11.0/2.0, + 12.0, + 13.0, + 13.0/2.0, + 14.0, + 15.0, + 15.0/2.0, + 16.0, + 17.0, + 17.0/2.0, + 18.0, + 19.0, + 2.0, + 2.0/12.0, + 2.0/3.0, + 2.0/5.0, + 20.0, + 200.0, + 2000.0, + 20000.0, + 200000.0, + 20000000.0, + 21.0, + 216000.0, + 22.0, + 23.0, + 24.0, + 25.0, + 26.0, + 27.0, + 28.0, + 29.0, + 3.0, + 3.0/12.0, + 3.0/16.0, + 3.0/2.0, + 3.0/20.0, + 3.0/4.0, + 3.0/5.0, + 3.0/64.0, + 3.0/8.0, + 3.0/80.0, + 30.0, + 300.0, + 3000.0, + 30000.0, + 300000.0, + 31.0, + 32.0, + 33.0, + 34.0, + 35.0, + 36.0, + 37.0, + 38.0, + 39.0, + 4.0, + 4.0/12.0, + 4.0/5.0, + 40.0, + 400.0, + 4000.0, + 40000.0, + 400000.0, + 41.0, + 42.0, + 43.0, + 432000.0, + 44.0, + 45.0, + 46.0, + 47.0, + 48.0, + 49.0, + 5.0, + 5.0/12.0, + 5.0/2.0, + 5.0/6.0, + 5.0/8.0, + 50.0, + 500.0, + 5000.0, + 50000.0, + 500000.0, + 6.0, + 6.0/12.0, + 60.0, + 600.0, + 6000.0, + 60000.0, + 600000.0, + 7.0, + 7.0/12.0, + 7.0/2.0, + 7.0/8.0, + 70.0, + 700.0, + 7000.0, + 70000.0, + 700000.0, + 8.0, + 8.0/12.0, + 80.0, + 800.0, + 8000.0, + 80000.0, + 800000.0, + 9.0, + 9.0/12.0, + 9.0/2.0, + 90.0, + 900.0, + 9000.0, + 90000.0, + 900000.0, +}; + /* Returns the numeric value as double for Unicode characters * having this property, -1.0 otherwise. */ double _PyUnicode_ToNumeric(Py_UCS4 ch) { - switch (ch) { - case 0x0F33: - return (double) -1.0/2.0; - case 0x0030: - case 0x0660: - case 0x06F0: - case 0x07C0: - case 0x0966: - case 0x09E6: - case 0x0A66: - case 0x0AE6: - case 0x0B66: - case 0x0BE6: - case 0x0C66: - case 0x0C78: - case 0x0CE6: - case 0x0D66: - case 0x0DE6: - case 0x0E50: - case 0x0ED0: - case 0x0F20: - case 0x1040: - case 0x1090: - case 0x17E0: - case 0x17F0: - case 0x1810: - case 0x1946: - case 0x19D0: - case 0x1A80: - case 0x1A90: - case 0x1B50: - case 0x1BB0: - case 0x1C40: - case 0x1C50: - case 0x2070: - case 0x2080: - case 0x2189: - case 0x24EA: - case 0x24FF: - case 0x3007: - case 0x6D1E: - case 0x96F6: - case 0xA620: - case 0xA6EF: - case 0xA8D0: - case 0xA900: - case 0xA9D0: - case 0xA9F0: - case 0xAA50: - case 0xABF0: - case 0xF9B2: - case 0xFF10: - case 0x1018A: - case 0x104A0: - case 0x10D30: - case 0x10D40: - case 0x11066: - case 0x110F0: - case 0x11136: - case 0x111D0: - case 0x112F0: - case 0x11450: - case 0x114D0: - case 0x11650: - case 0x116C0: - case 0x116D0: - case 0x116DA: - case 0x11730: - case 0x118E0: - case 0x11950: - case 0x11BF0: - case 0x11C50: - case 0x11D50: - case 0x11DA0: - case 0x11DE0: - case 0x11F50: - case 0x16130: - case 0x16A60: - case 0x16AC0: - case 0x16B50: - case 0x16D70: - case 0x16E80: - case 0x1CCF0: - case 0x1D2C0: - case 0x1D2E0: - case 0x1D7CE: - case 0x1D7D8: - case 0x1D7E2: - case 0x1D7EC: - case 0x1D7F6: - case 0x1E140: - case 0x1E2F0: - case 0x1E4F0: - case 0x1E5F1: - case 0x1E950: - case 0x1F100: - case 0x1F101: - case 0x1F10B: - case 0x1F10C: - case 0x1FBF0: - return (double) 0.0; - case 0x0031: - case 0x00B9: - case 0x0661: - case 0x06F1: - case 0x07C1: - case 0x0967: - case 0x09E7: - case 0x0A67: - case 0x0AE7: - case 0x0B67: - case 0x0BE7: - case 0x0C67: - case 0x0C79: - case 0x0C7C: - case 0x0CE7: - case 0x0D67: - case 0x0DE7: - case 0x0E51: - case 0x0ED1: - case 0x0F21: - case 0x1041: - case 0x1091: - case 0x1369: - case 0x17E1: - case 0x17F1: - case 0x1811: - case 0x1947: - case 0x19D1: - case 0x19DA: - case 0x1A81: - case 0x1A91: - case 0x1B51: - case 0x1BB1: - case 0x1C41: - case 0x1C51: - case 0x2081: - case 0x215F: - case 0x2160: - case 0x2170: - case 0x2460: - case 0x2474: - case 0x2488: - case 0x24F5: - case 0x2776: - case 0x2780: - case 0x278A: - case 0x3021: - case 0x3192: - case 0x3220: - case 0x3280: - case 0x4E00: - case 0x58F1: - case 0x58F9: - case 0x5E7A: - case 0x5F0C: - case 0xA621: - case 0xA6E6: - case 0xA8D1: - case 0xA901: - case 0xA9D1: - case 0xA9F1: - case 0xAA51: - case 0xABF1: - case 0xFF11: - case 0x10107: - case 0x10142: - case 0x10158: - case 0x10159: - case 0x1015A: - case 0x102E1: - case 0x10320: - case 0x103D1: - case 0x104A1: - case 0x10858: - case 0x10879: - case 0x108A7: - case 0x108FB: - case 0x10916: - case 0x109C0: - case 0x10A40: - case 0x10A7D: - case 0x10A9D: - case 0x10AEB: - case 0x10B58: - case 0x10B78: - case 0x10BA9: - case 0x10CFA: - case 0x10D31: - case 0x10D41: - case 0x10E60: - case 0x10F1D: - case 0x10F51: - case 0x10FC5: - case 0x11052: - case 0x11067: - case 0x110F1: - case 0x11137: - case 0x111D1: - case 0x111E1: - case 0x112F1: - case 0x11451: - case 0x114D1: - case 0x11651: - case 0x116C1: - case 0x116D1: - case 0x116DB: - case 0x11731: - case 0x118E1: - case 0x11951: - case 0x11BF1: - case 0x11C51: - case 0x11C5A: - case 0x11D51: - case 0x11DA1: - case 0x11DE1: - case 0x11F51: - case 0x12038: - case 0x12039: - case 0x12079: - case 0x1230B: - case 0x12415: - case 0x1241E: - case 0x1242C: - case 0x12434: - case 0x1244F: - case 0x12458: - case 0x16131: - case 0x16A61: - case 0x16AC1: - case 0x16B51: - case 0x16D71: - case 0x16E81: - case 0x16E94: - case 0x16FF4: - case 0x1CCF1: - case 0x1D2C1: - case 0x1D2E1: - case 0x1D360: - case 0x1D372: - case 0x1D377: - case 0x1D7CF: - case 0x1D7D9: - case 0x1D7E3: - case 0x1D7ED: - case 0x1D7F7: - case 0x1E141: - case 0x1E2F1: - case 0x1E4F1: - case 0x1E5F2: - case 0x1E8C7: - case 0x1E951: - case 0x1EC71: - case 0x1ECA3: - case 0x1ECB1: - case 0x1ED01: - case 0x1F102: - case 0x1FBF1: - case 0x2092A: - return (double) 1.0; - case 0x0D5C: - case 0x2152: - case 0x11FCB: - return (double) 1.0/10.0; - case 0x109F6: - return (double) 1.0/12.0; - case 0x09F4: - case 0x0B75: - case 0x0D76: - case 0xA833: - case 0x11FC9: - case 0x11FCA: - return (double) 1.0/16.0; - case 0x0D58: - case 0x11FC1: - return (double) 1.0/160.0; - case 0x00BD: - case 0x0B73: - case 0x0D74: - case 0x0F2A: - case 0x2CFD: - case 0xA831: - case 0x10141: - case 0x10175: - case 0x10176: - case 0x109BD: - case 0x10A48: - case 0x10E7B: - case 0x10F26: - case 0x11FD1: - case 0x11FD2: - case 0x12226: - case 0x12464: - case 0x1ECAE: - case 0x1ED3C: - return (double) 1.0/2.0; - case 0x0D5B: - case 0x11FC8: - return (double) 1.0/20.0; - case 0x2153: - case 0x10E7D: - case 0x1245A: - case 0x1245D: - case 0x12465: - return (double) 1.0/3.0; - case 0x11FC5: - return (double) 1.0/32.0; - case 0x11FC0: - case 0x11FD4: - return (double) 1.0/320.0; - case 0x00BC: - case 0x09F7: - case 0x0B72: - case 0x0D73: - case 0xA830: - case 0x10140: - case 0x1018B: - case 0x10E7C: - case 0x11FD0: - case 0x12460: - case 0x12462: - case 0x12463: - case 0x1ECAD: - return (double) 1.0/4.0; - case 0x0D59: - case 0x11FC4: - return (double) 1.0/40.0; - case 0x0D5E: - case 0x2155: - case 0x11FCF: - return (double) 1.0/5.0; - case 0x2159: - case 0x12461: - case 0x1ED3D: - return (double) 1.0/6.0; - case 0x11FC3: - return (double) 1.0/64.0; - case 0x2150: - return (double) 1.0/7.0; - case 0x09F5: - case 0x0B76: - case 0x0D77: - case 0x215B: - case 0xA834: - case 0x11FCC: - case 0x1245F: - return (double) 1.0/8.0; - case 0x11FC2: - return (double) 1.0/80.0; - case 0x2151: - return (double) 1.0/9.0; - case 0x0BF0: - case 0x0D70: - case 0x1372: - case 0x2169: - case 0x2179: - case 0x2469: - case 0x247D: - case 0x2491: - case 0x24FE: - case 0x277F: - case 0x2789: - case 0x2793: - case 0x3038: - case 0x3229: - case 0x3248: - case 0x3289: - case 0x4EC0: - case 0x5341: - case 0x62FE: - case 0xF973: - case 0xF9FD: - case 0x10110: - case 0x10149: - case 0x10150: - case 0x10157: - case 0x10160: - case 0x10161: - case 0x10162: - case 0x10163: - case 0x10164: - case 0x102EA: - case 0x10322: - case 0x103D3: - case 0x1085B: - case 0x1087E: - case 0x108AD: - case 0x108FD: - case 0x10917: - case 0x109C9: - case 0x10A44: - case 0x10A9E: - case 0x10AED: - case 0x10B5C: - case 0x10B7C: - case 0x10BAD: - case 0x10CFC: - case 0x10E69: - case 0x10F22: - case 0x10F52: - case 0x10FC9: - case 0x1105B: - case 0x111EA: - case 0x1173A: - case 0x118EA: - case 0x11C63: - case 0x16B5B: - case 0x16E8A: - case 0x1D2CA: - case 0x1D2EA: - case 0x1D369: - case 0x1EC7A: - case 0x1ED0A: - case 0x1ED37: - return (double) 10.0; - case 0x109FF: - return (double) 10.0/12.0; - case 0x0BF1: - case 0x0D71: - case 0x137B: - case 0x216D: - case 0x217D: - case 0x4F70: - case 0x767E: - case 0x964C: - case 0x10119: - case 0x1014B: - case 0x10152: - case 0x1016A: - case 0x102F3: - case 0x103D5: - case 0x1085D: - case 0x108AF: - case 0x108FF: - case 0x10919: - case 0x109D2: - case 0x10A46: - case 0x10AEF: - case 0x10B5E: - case 0x10B7E: - case 0x10BAF: - case 0x10CFE: - case 0x10E72: - case 0x10F25: - case 0x10F54: - case 0x10FCB: - case 0x11064: - case 0x111F3: - case 0x11C6C: - case 0x16B5C: - case 0x1EC83: - case 0x1ED13: - return (double) 100.0; - case 0x0BF2: - case 0x0D72: - case 0x216F: - case 0x217F: - case 0x2180: - case 0x4EDF: - case 0x5343: - case 0x9621: - case 0x10122: - case 0x1014D: - case 0x10154: - case 0x10171: - case 0x1085E: - case 0x109DB: - case 0x10A47: - case 0x10B5F: - case 0x10B7F: - case 0x10CFF: - case 0x11065: - case 0x111F4: - case 0x1EC8C: - case 0x1ED1C: - return (double) 1000.0; - case 0x137C: - case 0x2182: - case 0x4E07: - case 0x842C: - case 0x1012B: - case 0x10155: - case 0x1085F: - case 0x109E4: - case 0x16B5D: - case 0x1EC95: - case 0x1ECB3: - case 0x1ED25: - case 0x1ED3B: - return (double) 10000.0; - case 0x2188: - case 0x109ED: - case 0x1EC9E: - case 0x1ECA0: - case 0x1ECB4: - return (double) 100000.0; - case 0x16B5E: - return (double) 1000000.0; - case 0x1ECA1: - return (double) 10000000.0; - case 0x4EBF: - case 0x5104: - case 0x16B5F: - return (double) 100000000.0; - case 0x79ED: - return (double) 1000000000.0; - case 0x16B60: - return (double) 10000000000.0; - case 0x5146: - case 0x16B61: - return (double) 1000000000000.0; - case 0x4EAC: - return (double) 1e+16; - case 0x216A: - case 0x217A: - case 0x246A: - case 0x247E: - case 0x2492: - case 0x24EB: - case 0x16E8B: - case 0x1D2CB: - case 0x1D2EB: - return (double) 11.0; - case 0x109BC: - return (double) 11.0/12.0; - case 0x0F2F: - return (double) 11.0/2.0; - case 0x216B: - case 0x217B: - case 0x246B: - case 0x247F: - case 0x2493: - case 0x24EC: - case 0x16E8C: - case 0x1D2CC: - case 0x1D2EC: - return (double) 12.0; - case 0x246C: - case 0x2480: - case 0x2494: - case 0x24ED: - case 0x16E8D: - case 0x1D2CD: - case 0x1D2ED: - return (double) 13.0; - case 0x0F30: - return (double) 13.0/2.0; - case 0x246D: - case 0x2481: - case 0x2495: - case 0x24EE: - case 0x16E8E: - case 0x1D2CE: - case 0x1D2EE: - return (double) 14.0; - case 0x246E: - case 0x2482: - case 0x2496: - case 0x24EF: - case 0x16E8F: - case 0x1D2CF: - case 0x1D2EF: - return (double) 15.0; - case 0x0F31: - return (double) 15.0/2.0; - case 0x09F9: - case 0x246F: - case 0x2483: - case 0x2497: - case 0x24F0: - case 0x16E90: - case 0x1D2D0: - case 0x1D2F0: - return (double) 16.0; - case 0x16EE: - case 0x2470: - case 0x2484: - case 0x2498: - case 0x24F1: - case 0x16E91: - case 0x1D2D1: - case 0x1D2F1: - return (double) 17.0; - case 0x0F32: - return (double) 17.0/2.0; - case 0x16EF: - case 0x2471: - case 0x2485: - case 0x2499: - case 0x24F2: - case 0x16E92: - case 0x1D2D2: - case 0x1D2F2: - return (double) 18.0; - case 0x16F0: - case 0x2472: - case 0x2486: - case 0x249A: - case 0x24F3: - case 0x16E93: - case 0x1D2D3: - case 0x1D2F3: - return (double) 19.0; - case 0x0032: - case 0x00B2: - case 0x0662: - case 0x06F2: - case 0x07C2: - case 0x0968: - case 0x09E8: - case 0x0A68: - case 0x0AE8: - case 0x0B68: - case 0x0BE8: - case 0x0C68: - case 0x0C7A: - case 0x0C7D: - case 0x0CE8: - case 0x0D68: - case 0x0DE8: - case 0x0E52: - case 0x0ED2: - case 0x0F22: - case 0x1042: - case 0x1092: - case 0x136A: - case 0x17E2: - case 0x17F2: - case 0x1812: - case 0x1948: - case 0x19D2: - case 0x1A82: - case 0x1A92: - case 0x1B52: - case 0x1BB2: - case 0x1C42: - case 0x1C52: - case 0x2082: - case 0x2161: - case 0x2171: - case 0x2461: - case 0x2475: - case 0x2489: - case 0x24F6: - case 0x2777: - case 0x2781: - case 0x278B: - case 0x3022: - case 0x3193: - case 0x3221: - case 0x3281: - case 0x3483: - case 0x4E24: - case 0x4E8C: - case 0x4FE9: - case 0x5006: - case 0x5169: - case 0x5F0D: - case 0x5F10: - case 0x8CAE: - case 0x8CB3: - case 0x8D30: - case 0xA622: - case 0xA6E7: - case 0xA8D2: - case 0xA902: - case 0xA9D2: - case 0xA9F2: - case 0xAA52: - case 0xABF2: - case 0xF978: - case 0xFF12: - case 0x10108: - case 0x1015B: - case 0x1015C: - case 0x1015D: - case 0x1015E: - case 0x102E2: - case 0x103D2: - case 0x104A2: - case 0x10859: - case 0x1087A: - case 0x108A8: - case 0x1091A: - case 0x109C1: - case 0x10A41: - case 0x10B59: - case 0x10B79: - case 0x10BAA: - case 0x10D32: - case 0x10D42: - case 0x10E61: - case 0x10F1E: - case 0x10FC6: - case 0x11053: - case 0x11068: - case 0x110F2: - case 0x11138: - case 0x111D2: - case 0x111E2: - case 0x112F2: - case 0x11452: - case 0x114D2: - case 0x11652: - case 0x116C2: - case 0x116D2: - case 0x116DC: - case 0x11732: - case 0x118E2: - case 0x11952: - case 0x11BF2: - case 0x11C52: - case 0x11C5B: - case 0x11D52: - case 0x11DA2: - case 0x11DE2: - case 0x11F52: - case 0x1222B: - case 0x12399: - case 0x12400: - case 0x12416: - case 0x1241F: - case 0x12423: - case 0x1242D: - case 0x12435: - case 0x1244A: - case 0x12450: - case 0x12456: - case 0x12459: - case 0x16132: - case 0x16A62: - case 0x16AC2: - case 0x16B52: - case 0x16D72: - case 0x16E82: - case 0x16E95: - case 0x16FF6: - case 0x1CCF2: - case 0x1D2C2: - case 0x1D2E2: - case 0x1D361: - case 0x1D373: - case 0x1D7D0: - case 0x1D7DA: - case 0x1D7E4: - case 0x1D7EE: - case 0x1D7F8: - case 0x1E142: - case 0x1E2F2: - case 0x1E4F2: - case 0x1E5F3: - case 0x1E8C8: - case 0x1E952: - case 0x1EC72: - case 0x1ECA4: - case 0x1ECB2: - case 0x1ED02: - case 0x1ED2F: - case 0x1F103: - case 0x1FBF2: - case 0x22390: - return (double) 2.0; - case 0x109F7: - return (double) 2.0/12.0; - case 0x2154: - case 0x10177: - case 0x10E7E: - case 0x1245B: - case 0x1245E: - case 0x12466: - return (double) 2.0/3.0; - case 0x2156: - return (double) 2.0/5.0; - case 0x1373: - case 0x2473: - case 0x2487: - case 0x249B: - case 0x24F4: - case 0x3039: - case 0x3249: - case 0x5344: - case 0x5EFF: - case 0x10111: - case 0x102EB: - case 0x103D4: - case 0x1085C: - case 0x1087F: - case 0x108AE: - case 0x108FE: - case 0x10918: - case 0x109CA: - case 0x10A45: - case 0x10A9F: - case 0x10AEE: - case 0x10B5D: - case 0x10B7D: - case 0x10BAE: - case 0x10E6A: - case 0x10F23: - case 0x10F53: - case 0x10FCA: - case 0x1105C: - case 0x111EB: - case 0x1173B: - case 0x118EB: - case 0x11C64: - case 0x1D36A: - case 0x1EC7B: - case 0x1ED0B: - return (double) 20.0; - case 0x7695: - case 0x1011A: - case 0x102F4: - case 0x109D3: - case 0x10E73: - case 0x1EC84: - case 0x1ED14: - return (double) 200.0; - case 0x10123: - case 0x109DC: - case 0x1EC8D: - case 0x1ED1D: - case 0x1ED3A: - return (double) 2000.0; - case 0x1012C: - case 0x109E5: - case 0x1EC96: - case 0x1ED26: - return (double) 20000.0; - case 0x109EE: - case 0x1EC9F: - return (double) 200000.0; - case 0x1ECA2: - return (double) 20000000.0; - case 0x3251: - return (double) 21.0; - case 0x12432: - return (double) 216000.0; - case 0x3252: - return (double) 22.0; - case 0x3253: - return (double) 23.0; - case 0x3254: - return (double) 24.0; - case 0x3255: - return (double) 25.0; - case 0x3256: - return (double) 26.0; - case 0x3257: - return (double) 27.0; - case 0x3258: - return (double) 28.0; - case 0x3259: - return (double) 29.0; - case 0x0033: - case 0x00B3: - case 0x0663: - case 0x06F3: - case 0x07C3: - case 0x0969: - case 0x09E9: - case 0x0A69: - case 0x0AE9: - case 0x0B69: - case 0x0BE9: - case 0x0C69: - case 0x0C7B: - case 0x0C7E: - case 0x0CE9: - case 0x0D69: - case 0x0DE9: - case 0x0E53: - case 0x0ED3: - case 0x0F23: - case 0x1043: - case 0x1093: - case 0x136B: - case 0x17E3: - case 0x17F3: - case 0x1813: - case 0x1949: - case 0x19D3: - case 0x1A83: - case 0x1A93: - case 0x1B53: - case 0x1BB3: - case 0x1C43: - case 0x1C53: - case 0x2083: - case 0x2162: - case 0x2172: - case 0x2462: - case 0x2476: - case 0x248A: - case 0x24F7: - case 0x2778: - case 0x2782: - case 0x278C: - case 0x3023: - case 0x3194: - case 0x3222: - case 0x3282: - case 0x4E09: - case 0x4EE8: - case 0x53C1: - case 0x53C2: - case 0x53C3: - case 0x53C4: - case 0x5F0E: - case 0xA623: - case 0xA6E8: - case 0xA8D3: - case 0xA903: - case 0xA9D3: - case 0xA9F3: - case 0xAA53: - case 0xABF3: - case 0xF96B: - case 0xFF13: - case 0x10109: - case 0x102E3: - case 0x104A3: - case 0x1085A: - case 0x1087B: - case 0x108A9: - case 0x1091B: - case 0x109C2: - case 0x10A42: - case 0x10B5A: - case 0x10B7A: - case 0x10BAB: - case 0x10D33: - case 0x10D43: - case 0x10E62: - case 0x10F1F: - case 0x10FC7: - case 0x11054: - case 0x11069: - case 0x110F3: - case 0x11139: - case 0x111D3: - case 0x111E3: - case 0x112F3: - case 0x11453: - case 0x114D3: - case 0x11653: - case 0x116C3: - case 0x116D3: - case 0x116DD: - case 0x11733: - case 0x118E3: - case 0x11953: - case 0x11BF3: - case 0x11C53: - case 0x11C5C: - case 0x11D53: - case 0x11DA3: - case 0x11DE3: - case 0x11F53: - case 0x1230D: - case 0x12401: - case 0x12408: - case 0x12417: - case 0x12420: - case 0x12424: - case 0x12425: - case 0x1242E: - case 0x1242F: - case 0x12436: - case 0x12437: - case 0x1243A: - case 0x1243B: - case 0x1244B: - case 0x12451: - case 0x12457: - case 0x16133: - case 0x16A63: - case 0x16AC3: - case 0x16B53: - case 0x16D73: - case 0x16E83: - case 0x16E96: - case 0x1CCF3: - case 0x1D2C3: - case 0x1D2E3: - case 0x1D362: - case 0x1D374: - case 0x1D7D1: - case 0x1D7DB: - case 0x1D7E5: - case 0x1D7EF: - case 0x1D7F9: - case 0x1E143: - case 0x1E2F3: - case 0x1E4F3: - case 0x1E5F4: - case 0x1E8C9: - case 0x1E953: - case 0x1EC73: - case 0x1ECA5: - case 0x1ED03: - case 0x1ED30: - case 0x1F104: - case 0x1FBF3: - case 0x20AFD: - case 0x20B19: - case 0x22998: - case 0x23B1B: - return (double) 3.0; - case 0x109F8: - return (double) 3.0/12.0; - case 0x09F6: - case 0x0B77: - case 0x0D78: - case 0xA835: - case 0x11FCE: - return (double) 3.0/16.0; - case 0x0F2B: - case 0x16FF5: - return (double) 3.0/2.0; - case 0x0D5D: - case 0x11FCD: - return (double) 3.0/20.0; - case 0x00BE: - case 0x09F8: - case 0x0B74: - case 0x0D75: - case 0xA832: - case 0x10178: - case 0x11FD3: - case 0x1ECAF: - return (double) 3.0/4.0; - case 0x2157: - return (double) 3.0/5.0; - case 0x11FC7: - return (double) 3.0/64.0; - case 0x215C: - return (double) 3.0/8.0; - case 0x0D5A: - case 0x11FC6: - return (double) 3.0/80.0; - case 0x1374: - case 0x303A: - case 0x324A: - case 0x325A: - case 0x5345: - case 0x10112: - case 0x10165: - case 0x102EC: - case 0x109CB: - case 0x10E6B: - case 0x10F24: - case 0x1105D: - case 0x111EC: - case 0x118EC: - case 0x11C65: - case 0x1D36B: - case 0x1EC7C: - case 0x1ED0C: - case 0x20983: - return (double) 30.0; - case 0x1011B: - case 0x1016B: - case 0x102F5: - case 0x109D4: - case 0x10E74: - case 0x1EC85: - case 0x1ED15: - return (double) 300.0; - case 0x10124: - case 0x109DD: - case 0x1EC8E: - case 0x1ED1E: - return (double) 3000.0; - case 0x1012D: - case 0x109E6: - case 0x1EC97: - case 0x1ED27: - return (double) 30000.0; - case 0x109EF: - return (double) 300000.0; - case 0x325B: - return (double) 31.0; - case 0x325C: - return (double) 32.0; - case 0x325D: - return (double) 33.0; - case 0x325E: - return (double) 34.0; - case 0x325F: - return (double) 35.0; - case 0x32B1: - return (double) 36.0; - case 0x32B2: - return (double) 37.0; - case 0x32B3: - return (double) 38.0; - case 0x32B4: - return (double) 39.0; - case 0x0034: - case 0x0664: - case 0x06F4: - case 0x07C4: - case 0x096A: - case 0x09EA: - case 0x0A6A: - case 0x0AEA: - case 0x0B6A: - case 0x0BEA: - case 0x0C6A: - case 0x0CEA: - case 0x0D6A: - case 0x0DEA: - case 0x0E54: - case 0x0ED4: - case 0x0F24: - case 0x1044: - case 0x1094: - case 0x136C: - case 0x17E4: - case 0x17F4: - case 0x1814: - case 0x194A: - case 0x19D4: - case 0x1A84: - case 0x1A94: - case 0x1B54: - case 0x1BB4: - case 0x1C44: - case 0x1C54: - case 0x2074: - case 0x2084: - case 0x2163: - case 0x2173: - case 0x2463: - case 0x2477: - case 0x248B: - case 0x24F8: - case 0x2779: - case 0x2783: - case 0x278D: - case 0x3024: - case 0x3195: - case 0x3223: - case 0x3283: - case 0x4E96: - case 0x56DB: - case 0x8086: - case 0xA624: - case 0xA6E9: - case 0xA8D4: - case 0xA904: - case 0xA9D4: - case 0xA9F4: - case 0xAA54: - case 0xABF4: - case 0xFF14: - case 0x1010A: - case 0x102E4: - case 0x104A4: - case 0x1087C: - case 0x108AA: - case 0x108AB: - case 0x109C3: - case 0x10A43: - case 0x10B5B: - case 0x10B7B: - case 0x10BAC: - case 0x10D34: - case 0x10D44: - case 0x10E63: - case 0x10F20: - case 0x10FC8: - case 0x11055: - case 0x1106A: - case 0x110F4: - case 0x1113A: - case 0x111D4: - case 0x111E4: - case 0x112F4: - case 0x11454: - case 0x114D4: - case 0x11654: - case 0x116C4: - case 0x116D4: - case 0x116DE: - case 0x11734: - case 0x118E4: - case 0x11954: - case 0x11BF4: - case 0x11C54: - case 0x11C5D: - case 0x11D54: - case 0x11DA4: - case 0x11DE4: - case 0x11F54: - case 0x12402: - case 0x12409: - case 0x1240F: - case 0x12418: - case 0x12421: - case 0x12426: - case 0x12430: - case 0x12438: - case 0x1243C: - case 0x1243D: - case 0x1243E: - case 0x1243F: - case 0x1244C: - case 0x12452: - case 0x12453: - case 0x12469: - case 0x16134: - case 0x16A64: - case 0x16AC4: - case 0x16B54: - case 0x16D74: - case 0x16E84: - case 0x1CCF4: - case 0x1D2C4: - case 0x1D2E4: - case 0x1D363: - case 0x1D375: - case 0x1D7D2: - case 0x1D7DC: - case 0x1D7E6: - case 0x1D7F0: - case 0x1D7FA: - case 0x1E144: - case 0x1E2F4: - case 0x1E4F4: - case 0x1E5F5: - case 0x1E8CA: - case 0x1E954: - case 0x1EC74: - case 0x1ECA6: - case 0x1ED04: - case 0x1ED31: - case 0x1F105: - case 0x1FBF4: - case 0x20064: - case 0x200E2: - case 0x2626D: - return (double) 4.0; - case 0x109F9: - return (double) 4.0/12.0; - case 0x2158: - return (double) 4.0/5.0; - case 0x1375: - case 0x324B: - case 0x32B5: - case 0x534C: - case 0x10113: - case 0x102ED: - case 0x109CC: - case 0x10E6C: - case 0x1105E: - case 0x111ED: - case 0x118ED: - case 0x11C66: - case 0x12467: - case 0x1D36C: - case 0x1EC7D: - case 0x1ED0D: - case 0x2098C: - case 0x2099C: - return (double) 40.0; - case 0x1011C: - case 0x102F6: - case 0x109D5: - case 0x10E75: - case 0x1EC86: - case 0x1ED16: - case 0x1ED38: - return (double) 400.0; - case 0x10125: - case 0x109DE: - case 0x1EC8F: - case 0x1ED1F: - return (double) 4000.0; - case 0x1012E: - case 0x109E7: - case 0x1EC98: - case 0x1ED28: - return (double) 40000.0; - case 0x109F0: - return (double) 400000.0; - case 0x32B6: - return (double) 41.0; - case 0x32B7: - return (double) 42.0; - case 0x32B8: - return (double) 43.0; - case 0x12433: - return (double) 432000.0; - case 0x32B9: - return (double) 44.0; - case 0x32BA: - return (double) 45.0; - case 0x32BB: - return (double) 46.0; - case 0x32BC: - return (double) 47.0; - case 0x32BD: - return (double) 48.0; - case 0x32BE: - return (double) 49.0; - case 0x0035: - case 0x0665: - case 0x06F5: - case 0x07C5: - case 0x096B: - case 0x09EB: - case 0x0A6B: - case 0x0AEB: - case 0x0B6B: - case 0x0BEB: - case 0x0C6B: - case 0x0CEB: - case 0x0D6B: - case 0x0DEB: - case 0x0E55: - case 0x0ED5: - case 0x0F25: - case 0x1045: - case 0x1095: - case 0x136D: - case 0x17E5: - case 0x17F5: - case 0x1815: - case 0x194B: - case 0x19D5: - case 0x1A85: - case 0x1A95: - case 0x1B55: - case 0x1BB5: - case 0x1C45: - case 0x1C55: - case 0x2075: - case 0x2085: - case 0x2164: - case 0x2174: - case 0x2464: - case 0x2478: - case 0x248C: - case 0x24F9: - case 0x277A: - case 0x2784: - case 0x278E: - case 0x3025: - case 0x3224: - case 0x3284: - case 0x3405: - case 0x382A: - case 0x4E94: - case 0x4F0D: - case 0xA625: - case 0xA6EA: - case 0xA8D5: - case 0xA905: - case 0xA9D5: - case 0xA9F5: - case 0xAA55: - case 0xABF5: - case 0xFF15: - case 0x1010B: - case 0x10143: - case 0x10148: - case 0x1014F: - case 0x1015F: - case 0x10173: - case 0x102E5: - case 0x10321: - case 0x104A5: - case 0x1087D: - case 0x108AC: - case 0x108FC: - case 0x109C4: - case 0x10AEC: - case 0x10CFB: - case 0x10D35: - case 0x10D45: - case 0x10E64: - case 0x10F21: - case 0x11056: - case 0x1106B: - case 0x110F5: - case 0x1113B: - case 0x111D5: - case 0x111E5: - case 0x112F5: - case 0x11455: - case 0x114D5: - case 0x11655: - case 0x116C5: - case 0x116D5: - case 0x116DF: - case 0x11735: - case 0x118E5: - case 0x11955: - case 0x11BF5: - case 0x11C55: - case 0x11C5E: - case 0x11D55: - case 0x11DA5: - case 0x11DE5: - case 0x11F55: - case 0x12403: - case 0x1240A: - case 0x12410: - case 0x12419: - case 0x12422: - case 0x12427: - case 0x12431: - case 0x12439: - case 0x1244D: - case 0x12454: - case 0x12455: - case 0x1246A: - case 0x16135: - case 0x16A65: - case 0x16AC5: - case 0x16B55: - case 0x16D75: - case 0x16E85: - case 0x1CCF5: - case 0x1D2C5: - case 0x1D2E5: - case 0x1D364: - case 0x1D376: - case 0x1D378: - case 0x1D7D3: - case 0x1D7DD: - case 0x1D7E7: - case 0x1D7F1: - case 0x1D7FB: - case 0x1E145: - case 0x1E2F5: - case 0x1E4F5: - case 0x1E5F6: - case 0x1E8CB: - case 0x1E955: - case 0x1EC75: - case 0x1ECA7: - case 0x1ED05: - case 0x1ED32: - case 0x1F106: - case 0x1FBF5: - case 0x20121: - return (double) 5.0; - case 0x109FA: - return (double) 5.0/12.0; - case 0x0F2C: - return (double) 5.0/2.0; - case 0x215A: - case 0x1245C: - return (double) 5.0/6.0; - case 0x215D: - return (double) 5.0/8.0; - case 0x1376: - case 0x216C: - case 0x217C: - case 0x2186: - case 0x324C: - case 0x32BF: - case 0x10114: - case 0x10144: - case 0x1014A: - case 0x10151: - case 0x10166: - case 0x10167: - case 0x10168: - case 0x10169: - case 0x10174: - case 0x102EE: - case 0x10323: - case 0x109CD: - case 0x10A7E: - case 0x10CFD: - case 0x10E6D: - case 0x1105F: - case 0x111EE: - case 0x118EE: - case 0x11C67: - case 0x12468: - case 0x1D36D: - case 0x1EC7E: - case 0x1ED0E: - return (double) 50.0; - case 0x216E: - case 0x217E: - case 0x1011D: - case 0x10145: - case 0x1014C: - case 0x10153: - case 0x1016C: - case 0x1016D: - case 0x1016E: - case 0x1016F: - case 0x10170: - case 0x102F7: - case 0x109D6: - case 0x10E76: - case 0x1EC87: - case 0x1ED17: - return (double) 500.0; - case 0x2181: - case 0x10126: - case 0x10146: - case 0x1014E: - case 0x10172: - case 0x109DF: - case 0x1EC90: - case 0x1ED20: - return (double) 5000.0; - case 0x2187: - case 0x1012F: - case 0x10147: - case 0x10156: - case 0x109E8: - case 0x1EC99: - case 0x1ED29: - return (double) 50000.0; - case 0x109F1: - return (double) 500000.0; - case 0x0036: - case 0x0666: - case 0x06F6: - case 0x07C6: - case 0x096C: - case 0x09EC: - case 0x0A6C: - case 0x0AEC: - case 0x0B6C: - case 0x0BEC: - case 0x0C6C: - case 0x0CEC: - case 0x0D6C: - case 0x0DEC: - case 0x0E56: - case 0x0ED6: - case 0x0F26: - case 0x1046: - case 0x1096: - case 0x136E: - case 0x17E6: - case 0x17F6: - case 0x1816: - case 0x194C: - case 0x19D6: - case 0x1A86: - case 0x1A96: - case 0x1B56: - case 0x1BB6: - case 0x1C46: - case 0x1C56: - case 0x2076: - case 0x2086: - case 0x2165: - case 0x2175: - case 0x2185: - case 0x2465: - case 0x2479: - case 0x248D: - case 0x24FA: - case 0x277B: - case 0x2785: - case 0x278F: - case 0x3026: - case 0x3225: - case 0x3285: - case 0x516D: - case 0x9646: - case 0x9678: - case 0xA626: - case 0xA6EB: - case 0xA8D6: - case 0xA906: - case 0xA9D6: - case 0xA9F6: - case 0xAA56: - case 0xABF6: - case 0xF9D1: - case 0xF9D3: - case 0xFF16: - case 0x1010C: - case 0x102E6: - case 0x104A6: - case 0x109C5: - case 0x10D36: - case 0x10D46: - case 0x10E65: - case 0x11057: - case 0x1106C: - case 0x110F6: - case 0x1113C: - case 0x111D6: - case 0x111E6: - case 0x112F6: - case 0x11456: - case 0x114D6: - case 0x11656: - case 0x116C6: - case 0x116D6: - case 0x116E0: - case 0x11736: - case 0x118E6: - case 0x11956: - case 0x11BF6: - case 0x11C56: - case 0x11C5F: - case 0x11D56: - case 0x11DA6: - case 0x11DE6: - case 0x11F56: - case 0x12404: - case 0x1240B: - case 0x12411: - case 0x1241A: - case 0x12428: - case 0x12440: - case 0x1244E: - case 0x1246B: - case 0x16136: - case 0x16A66: - case 0x16AC6: - case 0x16B56: - case 0x16D76: - case 0x16E86: - case 0x1CCF6: - case 0x1D2C6: - case 0x1D2E6: - case 0x1D365: - case 0x1D7D4: - case 0x1D7DE: - case 0x1D7E8: - case 0x1D7F2: - case 0x1D7FC: - case 0x1E146: - case 0x1E2F6: - case 0x1E4F6: - case 0x1E5F7: - case 0x1E8CC: - case 0x1E956: - case 0x1EC76: - case 0x1ECA8: - case 0x1ED06: - case 0x1ED33: - case 0x1F107: - case 0x1FBF6: - case 0x20AEA: - return (double) 6.0; - case 0x109FB: - return (double) 6.0/12.0; - case 0x1377: - case 0x324D: - case 0x10115: - case 0x102EF: - case 0x109CE: - case 0x10E6E: - case 0x11060: - case 0x111EF: - case 0x118EF: - case 0x11C68: - case 0x1D36E: - case 0x1EC7F: - case 0x1ED0F: - return (double) 60.0; - case 0x1011E: - case 0x102F8: - case 0x109D7: - case 0x10E77: - case 0x1EC88: - case 0x1ED18: - case 0x1ED39: - return (double) 600.0; - case 0x10127: - case 0x109E0: - case 0x1EC91: - case 0x1ED21: - return (double) 6000.0; - case 0x10130: - case 0x109E9: - case 0x1EC9A: - case 0x1ED2A: - return (double) 60000.0; - case 0x109F2: - return (double) 600000.0; - case 0x0037: - case 0x0667: - case 0x06F7: - case 0x07C7: - case 0x096D: - case 0x09ED: - case 0x0A6D: - case 0x0AED: - case 0x0B6D: - case 0x0BED: - case 0x0C6D: - case 0x0CED: - case 0x0D6D: - case 0x0DED: - case 0x0E57: - case 0x0ED7: - case 0x0F27: - case 0x1047: - case 0x1097: - case 0x136F: - case 0x17E7: - case 0x17F7: - case 0x1817: - case 0x194D: - case 0x19D7: - case 0x1A87: - case 0x1A97: - case 0x1B57: - case 0x1BB7: - case 0x1C47: - case 0x1C57: - case 0x2077: - case 0x2087: - case 0x2166: - case 0x2176: - case 0x2466: - case 0x247A: - case 0x248E: - case 0x24FB: - case 0x277C: - case 0x2786: - case 0x2790: - case 0x3027: - case 0x3226: - case 0x3286: - case 0x3B4D: - case 0x4E03: - case 0x62D0: - case 0x67D2: - case 0x6F06: - case 0xA627: - case 0xA6EC: - case 0xA8D7: - case 0xA907: - case 0xA9D7: - case 0xA9F7: - case 0xAA57: - case 0xABF7: - case 0xFF17: - case 0x1010D: - case 0x102E7: - case 0x104A7: - case 0x109C6: - case 0x10D37: - case 0x10D47: - case 0x10E66: - case 0x11058: - case 0x1106D: - case 0x110F7: - case 0x1113D: - case 0x111D7: - case 0x111E7: - case 0x112F7: - case 0x11457: - case 0x114D7: - case 0x11657: - case 0x116C7: - case 0x116D7: - case 0x116E1: - case 0x11737: - case 0x118E7: - case 0x11957: - case 0x11BF7: - case 0x11C57: - case 0x11C60: - case 0x11D57: - case 0x11DA7: - case 0x11DE7: - case 0x11F57: - case 0x12405: - case 0x1240C: - case 0x12412: - case 0x1241B: - case 0x12429: - case 0x12441: - case 0x12442: - case 0x12443: - case 0x1246C: - case 0x16137: - case 0x16A67: - case 0x16AC7: - case 0x16B57: - case 0x16D77: - case 0x16E87: - case 0x1CCF7: - case 0x1D2C7: - case 0x1D2E7: - case 0x1D366: - case 0x1D7D5: - case 0x1D7DF: - case 0x1D7E9: - case 0x1D7F3: - case 0x1D7FD: - case 0x1E147: - case 0x1E2F7: - case 0x1E4F7: - case 0x1E5F8: - case 0x1E8CD: - case 0x1E957: - case 0x1EC77: - case 0x1ECA9: - case 0x1ED07: - case 0x1ED34: - case 0x1F108: - case 0x1FBF7: - case 0x20001: - return (double) 7.0; - case 0x109FC: - return (double) 7.0/12.0; - case 0x0F2D: - return (double) 7.0/2.0; - case 0x215E: - return (double) 7.0/8.0; - case 0x1378: - case 0x324E: - case 0x10116: - case 0x102F0: - case 0x109CF: - case 0x10E6F: - case 0x11061: - case 0x111F0: - case 0x118F0: - case 0x11C69: - case 0x1D36F: - case 0x1EC80: - case 0x1ED10: - return (double) 70.0; - case 0x1011F: - case 0x102F9: - case 0x109D8: - case 0x10E78: - case 0x1EC89: - case 0x1ED19: - return (double) 700.0; - case 0x10128: - case 0x109E1: - case 0x1EC92: - case 0x1ED22: - return (double) 7000.0; - case 0x10131: - case 0x109EA: - case 0x1EC9B: - case 0x1ED2B: - return (double) 70000.0; - case 0x109F3: - return (double) 700000.0; - case 0x0038: - case 0x0668: - case 0x06F8: - case 0x07C8: - case 0x096E: - case 0x09EE: - case 0x0A6E: - case 0x0AEE: - case 0x0B6E: - case 0x0BEE: - case 0x0C6E: - case 0x0CEE: - case 0x0D6E: - case 0x0DEE: - case 0x0E58: - case 0x0ED8: - case 0x0F28: - case 0x1048: - case 0x1098: - case 0x1370: - case 0x17E8: - case 0x17F8: - case 0x1818: - case 0x194E: - case 0x19D8: - case 0x1A88: - case 0x1A98: - case 0x1B58: - case 0x1BB8: - case 0x1C48: - case 0x1C58: - case 0x2078: - case 0x2088: - case 0x2167: - case 0x2177: - case 0x2467: - case 0x247B: - case 0x248F: - case 0x24FC: - case 0x277D: - case 0x2787: - case 0x2791: - case 0x3028: - case 0x3227: - case 0x3287: - case 0x516B: - case 0x634C: - case 0xA628: - case 0xA6ED: - case 0xA8D8: - case 0xA908: - case 0xA9D8: - case 0xA9F8: - case 0xAA58: - case 0xABF8: - case 0xFF18: - case 0x1010E: - case 0x102E8: - case 0x104A8: - case 0x109C7: - case 0x10D38: - case 0x10D48: - case 0x10E67: - case 0x11059: - case 0x1106E: - case 0x110F8: - case 0x1113E: - case 0x111D8: - case 0x111E8: - case 0x112F8: - case 0x11458: - case 0x114D8: - case 0x11658: - case 0x116C8: - case 0x116D8: - case 0x116E2: - case 0x11738: - case 0x118E8: - case 0x11958: - case 0x11BF8: - case 0x11C58: - case 0x11C61: - case 0x11D58: - case 0x11DA8: - case 0x11DE8: - case 0x11F58: - case 0x12406: - case 0x1240D: - case 0x12413: - case 0x1241C: - case 0x1242A: - case 0x12444: - case 0x12445: - case 0x1246D: - case 0x16138: - case 0x16A68: - case 0x16AC8: - case 0x16B58: - case 0x16D78: - case 0x16E88: - case 0x1CCF8: - case 0x1D2C8: - case 0x1D2E8: - case 0x1D367: - case 0x1D7D6: - case 0x1D7E0: - case 0x1D7EA: - case 0x1D7F4: - case 0x1D7FE: - case 0x1E148: - case 0x1E2F8: - case 0x1E4F8: - case 0x1E5F9: - case 0x1E8CE: - case 0x1E958: - case 0x1EC78: - case 0x1ECAA: - case 0x1ED08: - case 0x1ED35: - case 0x1F109: - case 0x1FBF8: - return (double) 8.0; - case 0x109FD: - return (double) 8.0/12.0; - case 0x1379: - case 0x324F: - case 0x10117: - case 0x102F1: - case 0x10E70: - case 0x11062: - case 0x111F1: - case 0x118F1: - case 0x11C6A: - case 0x1D370: - case 0x1EC81: - case 0x1ED11: - return (double) 80.0; - case 0x10120: - case 0x102FA: - case 0x109D9: - case 0x10E79: - case 0x1EC8A: - case 0x1ED1A: - return (double) 800.0; - case 0x10129: - case 0x109E2: - case 0x1EC93: - case 0x1ED23: - return (double) 8000.0; - case 0x10132: - case 0x109EB: - case 0x1EC9C: - case 0x1ED2C: - return (double) 80000.0; - case 0x109F4: - return (double) 800000.0; - case 0x0039: - case 0x0669: - case 0x06F9: - case 0x07C9: - case 0x096F: - case 0x09EF: - case 0x0A6F: - case 0x0AEF: - case 0x0B6F: - case 0x0BEF: - case 0x0C6F: - case 0x0CEF: - case 0x0D6F: - case 0x0DEF: - case 0x0E59: - case 0x0ED9: - case 0x0F29: - case 0x1049: - case 0x1099: - case 0x1371: - case 0x17E9: - case 0x17F9: - case 0x1819: - case 0x194F: - case 0x19D9: - case 0x1A89: - case 0x1A99: - case 0x1B59: - case 0x1BB9: - case 0x1C49: - case 0x1C59: - case 0x2079: - case 0x2089: - case 0x2168: - case 0x2178: - case 0x2468: - case 0x247C: - case 0x2490: - case 0x24FD: - case 0x277E: - case 0x2788: - case 0x2792: - case 0x3029: - case 0x3228: - case 0x3288: - case 0x4E5D: - case 0x5EFE: - case 0x7396: - case 0x920E: - case 0x94A9: - case 0xA629: - case 0xA6EE: - case 0xA8D9: - case 0xA909: - case 0xA9D9: - case 0xA9F9: - case 0xAA59: - case 0xABF9: - case 0xFF19: - case 0x1010F: - case 0x102E9: - case 0x104A9: - case 0x109C8: - case 0x10D39: - case 0x10D49: - case 0x10E68: - case 0x1105A: - case 0x1106F: - case 0x110F9: - case 0x1113F: - case 0x111D9: - case 0x111E9: - case 0x112F9: - case 0x11459: - case 0x114D9: - case 0x11659: - case 0x116C9: - case 0x116D9: - case 0x116E3: - case 0x11739: - case 0x118E9: - case 0x11959: - case 0x11BF9: - case 0x11C59: - case 0x11C62: - case 0x11D59: - case 0x11DA9: - case 0x11DE9: - case 0x11F59: - case 0x12407: - case 0x1240E: - case 0x12414: - case 0x1241D: - case 0x1242B: - case 0x12446: - case 0x12447: - case 0x12448: - case 0x12449: - case 0x1246E: - case 0x16139: - case 0x16A69: - case 0x16AC9: - case 0x16B59: - case 0x16D79: - case 0x16E89: - case 0x1CCF9: - case 0x1D2C9: - case 0x1D2E9: - case 0x1D368: - case 0x1D7D7: - case 0x1D7E1: - case 0x1D7EB: - case 0x1D7F5: - case 0x1D7FF: - case 0x1E149: - case 0x1E2F9: - case 0x1E4F9: - case 0x1E5FA: - case 0x1E8CF: - case 0x1E959: - case 0x1EC79: - case 0x1ECAB: - case 0x1ED09: - case 0x1ED36: - case 0x1F10A: - case 0x1FBF9: - case 0x2F890: - return (double) 9.0; - case 0x109FE: - return (double) 9.0/12.0; - case 0x0F2E: - return (double) 9.0/2.0; - case 0x137A: - case 0x10118: - case 0x102F2: - case 0x10341: - case 0x10E71: - case 0x11063: - case 0x111F2: - case 0x118F2: - case 0x11C6B: - case 0x1D371: - case 0x1EC82: - case 0x1ED12: - return (double) 90.0; - case 0x10121: - case 0x102FB: - case 0x1034A: - case 0x109DA: - case 0x10E7A: - case 0x1EC8B: - case 0x1ED1B: - return (double) 900.0; - case 0x1012A: - case 0x109E3: - case 0x1EC94: - case 0x1ED24: - return (double) 9000.0; - case 0x10133: - case 0x109EC: - case 0x1EC9D: - case 0x1ED2D: - return (double) 90000.0; - case 0x109F5: - return (double) 900000.0; + size_t lo = 0; + size_t hi = Py_ARRAY_LENGTH(numeric_codepoints); + while (lo < hi) { + size_t mid = lo + (hi - lo) / 2; + Py_UCS4 codepoint = numeric_codepoints[mid]; + if (ch < codepoint) { + hi = mid; + } + else if (ch > codepoint) { + lo = mid + 1; + } + else { + return numeric_values[numeric_value_indices[mid]]; + } } return -1.0; } diff --git a/Tools/unicode/makeunicodedata.py b/Tools/unicode/makeunicodedata.py index ab453686d4dfb1..c7464209292b01 100644 --- a/Tools/unicode/makeunicodedata.py +++ b/Tools/unicode/makeunicodedata.py @@ -657,24 +657,48 @@ def makeunicodetype(unicode, trace): Array("index1", index1).dump(fp, trace) Array("index2", index2).dump(fp, trace) - # Generate code for _PyUnicode_ToNumeric() + # Generate sorted parallel tables and code for _PyUnicode_ToNumeric(). numeric_items = sorted(numeric.items()) - fprint('/* Returns the numeric value as double for Unicode characters') - fprint(' * having this property, -1.0 otherwise.') - fprint(' */') - fprint('double _PyUnicode_ToNumeric(Py_UCS4 ch)') - fprint('{') - fprint(' switch (ch) {') - for value, codepoints in numeric_items: + numeric_by_codepoint = sorted( + (codepoint, value_index) + for value_index, (_, codepoints) in enumerate(numeric_items) + for codepoint in codepoints + ) + fprint('/* Sorted code points and parallel indexes into numeric_values. */') + Array("numeric_codepoints", + [item[0] for item in numeric_by_codepoint]).dump(fp, trace) + Array("numeric_value_indices", + [item[1] for item in numeric_by_codepoint]).dump(fp, trace) + + fprint('static const double numeric_values[] = {') + for value, _ in numeric_items: # Turn text into float literals parts = value.split('/') parts = [repr(float(part)) for part in parts] value = '/'.join(parts) + fprint(' %s,' % value) + fprint('};') + fprint() - codepoints.sort() - for codepoint in codepoints: - fprint(' case 0x%04X:' % (codepoint,)) - fprint(' return (double) %s;' % (value,)) + fprint('/* Returns the numeric value as double for Unicode characters') + fprint(' * having this property, -1.0 otherwise.') + fprint(' */') + fprint('double _PyUnicode_ToNumeric(Py_UCS4 ch)') + fprint('{') + fprint(' size_t lo = 0;') + fprint(' size_t hi = Py_ARRAY_LENGTH(numeric_codepoints);') + fprint(' while (lo < hi) {') + fprint(' size_t mid = lo + (hi - lo) / 2;') + fprint(' Py_UCS4 codepoint = numeric_codepoints[mid];') + fprint(' if (ch < codepoint) {') + fprint(' hi = mid;') + fprint(' }') + fprint(' else if (ch > codepoint) {') + fprint(' lo = mid + 1;') + fprint(' }') + fprint(' else {') + fprint(' return numeric_values[numeric_value_indices[mid]];') + fprint(' }') fprint(' }') fprint(' return -1.0;') fprint('}')