@@ -9,24 +9,20 @@ import {
99 LOAD 
1010}  from  "./arraybuffer" ; 
1111
12- @lazy  export  const  MAX_DOUBLE_LENGTH  =  28 ; 
13- 
14- @inline 
15- export  function  POWERS10 ( ) : u32 [ ]  { 
16-  const  table : u32 [ ]  =  [ 
17-  1 , 
18-  10 , 
19-  100 , 
20-  1000 , 
21-  10000 , 
22-  100000 , 
23-  1000000 , 
24-  10000000 , 
25-  100000000 , 
26-  1000000000 
27-  ] ; 
28-  return  table ;  // inlines to a constant memory offset 
29- } 
12+ @inline  export  const  MAX_DOUBLE_LENGTH  =  28 ; 
13+ 
14+ @lazy  @inline  const  POWERS10 : u32 [ ]  =  [ 
15+  1 , 
16+  10 , 
17+  100 , 
18+  1000 , 
19+  10000 , 
20+  100000 , 
21+  1000000 , 
22+  10000000 , 
23+  100000000 , 
24+  1000000000 
25+ ] ; 
3026
3127/* 
3228 Lookup table for pairwise char codes in range [0-99] 
@@ -42,78 +38,66 @@ export function POWERS10(): u32[] {
4238 "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", 
4339 "90", "91", "92", "93", "94", "95", "96", "97", "98", "99" 
4440*/ 
45- @inline 
46- export  function  DIGITS ( ) : u32 [ ]  { 
47-  const  table : u32 [ ]  =  [ 
48-  0x00300030 ,  0x00310030 ,  0x00320030 ,  0x00330030 ,  0x00340030 , 
49-  0x00350030 ,  0x00360030 ,  0x00370030 ,  0x00380030 ,  0x00390030 , 
50-  0x00300031 ,  0x00310031 ,  0x00320031 ,  0x00330031 ,  0x00340031 , 
51-  0x00350031 ,  0x00360031 ,  0x00370031 ,  0x00380031 ,  0x00390031 , 
52-  0x00300032 ,  0x00310032 ,  0x00320032 ,  0x00330032 ,  0x00340032 , 
53-  0x00350032 ,  0x00360032 ,  0x00370032 ,  0x00380032 ,  0x00390032 , 
54-  0x00300033 ,  0x00310033 ,  0x00320033 ,  0x00330033 ,  0x00340033 , 
55-  0x00350033 ,  0x00360033 ,  0x00370033 ,  0x00380033 ,  0x00390033 , 
56-  0x00300034 ,  0x00310034 ,  0x00320034 ,  0x00330034 ,  0x00340034 , 
57-  0x00350034 ,  0x00360034 ,  0x00370034 ,  0x00380034 ,  0x00390034 , 
58-  0x00300035 ,  0x00310035 ,  0x00320035 ,  0x00330035 ,  0x00340035 , 
59-  0x00350035 ,  0x00360035 ,  0x00370035 ,  0x00380035 ,  0x00390035 , 
60-  0x00300036 ,  0x00310036 ,  0x00320036 ,  0x00330036 ,  0x00340036 , 
61-  0x00350036 ,  0x00360036 ,  0x00370036 ,  0x00380036 ,  0x00390036 , 
62-  0x00300037 ,  0x00310037 ,  0x00320037 ,  0x00330037 ,  0x00340037 , 
63-  0x00350037 ,  0x00360037 ,  0x00370037 ,  0x00380037 ,  0x00390037 , 
64-  0x00300038 ,  0x00310038 ,  0x00320038 ,  0x00330038 ,  0x00340038 , 
65-  0x00350038 ,  0x00360038 ,  0x00370038 ,  0x00380038 ,  0x00390038 , 
66-  0x00300039 ,  0x00310039 ,  0x00320039 ,  0x00330039 ,  0x00340039 , 
67-  0x00350039 ,  0x00360039 ,  0x00370039 ,  0x00380039 ,  0x00390039 
68-  ] ; 
69-  return  table ;  // inlines to a constant memory offset 
70- } 
71- 
72- @inline 
73- function  EXP_POWERS ( ) : i16 [ ]  { 
74-  const  table : i16 [ ]  =  [ 
75-  - 1220 ,  - 1193 ,  - 1166 ,  - 1140 ,  - 1113 ,  - 1087 ,  - 1060 ,  - 1034 ,  - 1007 ,  - 980 , 
76-  - 954 ,  - 927 ,  - 901 ,  - 874 ,  - 847 ,  - 821 ,  - 794 ,  - 768 ,  - 741 ,  - 715 , 
77-  - 688 ,  - 661 ,  - 635 ,  - 608 ,  - 582 ,  - 555 ,  - 529 ,  - 502 ,  - 475 ,  - 449 , 
78-  - 422 ,  - 396 ,  - 369 ,  - 343 ,  - 316 ,  - 289 ,  - 263 ,  - 236 ,  - 210 ,  - 183 , 
79-  - 157 ,  - 130 ,  - 103 ,  - 77 ,  - 50 ,  - 24 ,  3 ,  30 ,  56 ,  83 , 
80-  109 ,  136 ,  162 ,  189 ,  216 ,  242 ,  269 ,  295 ,  322 ,  348 , 
81-  375 ,  402 ,  428 ,  455 ,  481 ,  508 ,  534 ,  561 ,  588 ,  614 , 
82-  641 ,  667 ,  694 ,  720 ,  747 ,  774 ,  800 ,  827 ,  853 ,  880 , 
83-  907 ,  933 ,  960 ,  986 ,  1013 ,  1039 ,  1066 
84-  ] ; 
85-  return  table ; 
86- } 
41+ @lazy  @inline  const  DIGITS : u32 [ ]  =  [ 
42+  0x00300030 ,  0x00310030 ,  0x00320030 ,  0x00330030 ,  0x00340030 , 
43+  0x00350030 ,  0x00360030 ,  0x00370030 ,  0x00380030 ,  0x00390030 , 
44+  0x00300031 ,  0x00310031 ,  0x00320031 ,  0x00330031 ,  0x00340031 , 
45+  0x00350031 ,  0x00360031 ,  0x00370031 ,  0x00380031 ,  0x00390031 , 
46+  0x00300032 ,  0x00310032 ,  0x00320032 ,  0x00330032 ,  0x00340032 , 
47+  0x00350032 ,  0x00360032 ,  0x00370032 ,  0x00380032 ,  0x00390032 , 
48+  0x00300033 ,  0x00310033 ,  0x00320033 ,  0x00330033 ,  0x00340033 , 
49+  0x00350033 ,  0x00360033 ,  0x00370033 ,  0x00380033 ,  0x00390033 , 
50+  0x00300034 ,  0x00310034 ,  0x00320034 ,  0x00330034 ,  0x00340034 , 
51+  0x00350034 ,  0x00360034 ,  0x00370034 ,  0x00380034 ,  0x00390034 , 
52+  0x00300035 ,  0x00310035 ,  0x00320035 ,  0x00330035 ,  0x00340035 , 
53+  0x00350035 ,  0x00360035 ,  0x00370035 ,  0x00380035 ,  0x00390035 , 
54+  0x00300036 ,  0x00310036 ,  0x00320036 ,  0x00330036 ,  0x00340036 , 
55+  0x00350036 ,  0x00360036 ,  0x00370036 ,  0x00380036 ,  0x00390036 , 
56+  0x00300037 ,  0x00310037 ,  0x00320037 ,  0x00330037 ,  0x00340037 , 
57+  0x00350037 ,  0x00360037 ,  0x00370037 ,  0x00380037 ,  0x00390037 , 
58+  0x00300038 ,  0x00310038 ,  0x00320038 ,  0x00330038 ,  0x00340038 , 
59+  0x00350038 ,  0x00360038 ,  0x00370038 ,  0x00380038 ,  0x00390038 , 
60+  0x00300039 ,  0x00310039 ,  0x00320039 ,  0x00330039 ,  0x00340039 , 
61+  0x00350039 ,  0x00360039 ,  0x00370039 ,  0x00380039 ,  0x00390039 
62+ ] ; 
63+ 
64+ @lazy  @inline  const  EXP_POWERS : i16 [ ]  =  [ 
65+  - 1220 ,  - 1193 ,  - 1166 ,  - 1140 ,  - 1113 ,  - 1087 ,  - 1060 ,  - 1034 ,  - 1007 ,  - 980 , 
66+  - 954 ,  - 927 ,  - 901 ,  - 874 ,  - 847 ,  - 821 ,  - 794 ,  - 768 ,  - 741 ,  - 715 , 
67+  - 688 ,  - 661 ,  - 635 ,  - 608 ,  - 582 ,  - 555 ,  - 529 ,  - 502 ,  - 475 ,  - 449 , 
68+  - 422 ,  - 396 ,  - 369 ,  - 343 ,  - 316 ,  - 289 ,  - 263 ,  - 236 ,  - 210 ,  - 183 , 
69+  - 157 ,  - 130 ,  - 103 ,  - 77 ,  - 50 ,  - 24 ,  3 ,  30 ,  56 ,  83 , 
70+  109 ,  136 ,  162 ,  189 ,  216 ,  242 ,  269 ,  295 ,  322 ,  348 , 
71+  375 ,  402 ,  428 ,  455 ,  481 ,  508 ,  534 ,  561 ,  588 ,  614 , 
72+  641 ,  667 ,  694 ,  720 ,  747 ,  774 ,  800 ,  827 ,  853 ,  880 , 
73+  907 ,  933 ,  960 ,  986 ,  1013 ,  1039 ,  1066 
74+ ] ; 
8775
8876// 1e-348, 1e-340, ..., 1e340 
89- @inline 
90- function  FRC_POWERS ( ) : u64 [ ]  { 
91-  const  table : u64 [ ]  =  [ 
92-  0xFA8FD5A0081C0288 ,  0xBAAEE17FA23EBF76 ,  0x8B16FB203055AC76 ,  0xCF42894A5DCE35EA , 
93-  0x9A6BB0AA55653B2D ,  0xE61ACF033D1A45DF ,  0xAB70FE17C79AC6CA ,  0xFF77B1FCBEBCDC4F , 
94-  0xBE5691EF416BD60C ,  0x8DD01FAD907FFC3C ,  0xD3515C2831559A83 ,  0x9D71AC8FADA6C9B5 , 
95-  0xEA9C227723EE8BCB ,  0xAECC49914078536D ,  0x823C12795DB6CE57 ,  0xC21094364DFB5637 , 
96-  0x9096EA6F3848984F ,  0xD77485CB25823AC7 ,  0xA086CFCD97BF97F4 ,  0xEF340A98172AACE5 , 
97-  0xB23867FB2A35B28E ,  0x84C8D4DFD2C63F3B ,  0xC5DD44271AD3CDBA ,  0x936B9FCEBB25C996 , 
98-  0xDBAC6C247D62A584 ,  0xA3AB66580D5FDAF6 ,  0xF3E2F893DEC3F126 ,  0xB5B5ADA8AAFF80B8 , 
99-  0x87625F056C7C4A8B ,  0xC9BCFF6034C13053 ,  0x964E858C91BA2655 ,  0xDFF9772470297EBD , 
100-  0xA6DFBD9FB8E5B88F ,  0xF8A95FCF88747D94 ,  0xB94470938FA89BCF ,  0x8A08F0F8BF0F156B , 
101-  0xCDB02555653131B6 ,  0x993FE2C6D07B7FAC ,  0xE45C10C42A2B3B06 ,  0xAA242499697392D3 , 
102-  0xFD87B5F28300CA0E ,  0xBCE5086492111AEB ,  0x8CBCCC096F5088CC ,  0xD1B71758E219652C , 
103-  0x9C40000000000000 ,  0xE8D4A51000000000 ,  0xAD78EBC5AC620000 ,  0x813F3978F8940984 , 
104-  0xC097CE7BC90715B3 ,  0x8F7E32CE7BEA5C70 ,  0xD5D238A4ABE98068 ,  0x9F4F2726179A2245 , 
105-  0xED63A231D4C4FB27 ,  0xB0DE65388CC8ADA8 ,  0x83C7088E1AAB65DB ,  0xC45D1DF942711D9A , 
106-  0x924D692CA61BE758 ,  0xDA01EE641A708DEA ,  0xA26DA3999AEF774A ,  0xF209787BB47D6B85 , 
107-  0xB454E4A179DD1877 ,  0x865B86925B9BC5C2 ,  0xC83553C5C8965D3D ,  0x952AB45CFA97A0B3 , 
108-  0xDE469FBD99A05FE3 ,  0xA59BC234DB398C25 ,  0xF6C69A72A3989F5C ,  0xB7DCBF5354E9BECE , 
109-  0x88FCF317F22241E2 ,  0xCC20CE9BD35C78A5 ,  0x98165AF37B2153DF ,  0xE2A0B5DC971F303A , 
110-  0xA8D9D1535CE3B396 ,  0xFB9B7CD9A4A7443C ,  0xBB764C4CA7A44410 ,  0x8BAB8EEFB6409C1A , 
111-  0xD01FEF10A657842C ,  0x9B10A4E5E9913129 ,  0xE7109BFBA19C0C9D ,  0xAC2820D9623BF429 , 
112-  0x80444B5E7AA7CF85 ,  0xBF21E44003ACDD2D ,  0x8E679C2F5E44FF8F ,  0xD433179D9C8CB841 , 
113-  0x9E19DB92B4E31BA9 ,  0xEB96BF6EBADF77D9 ,  0xAF87023B9BF0EE6B 
114-  ] ; 
115-  return  table ; 
116- } 
77+ @lazy  @inline  const  FRC_POWERS : u64 [ ]  =  [ 
78+  0xFA8FD5A0081C0288 ,  0xBAAEE17FA23EBF76 ,  0x8B16FB203055AC76 ,  0xCF42894A5DCE35EA , 
79+  0x9A6BB0AA55653B2D ,  0xE61ACF033D1A45DF ,  0xAB70FE17C79AC6CA ,  0xFF77B1FCBEBCDC4F , 
80+  0xBE5691EF416BD60C ,  0x8DD01FAD907FFC3C ,  0xD3515C2831559A83 ,  0x9D71AC8FADA6C9B5 , 
81+  0xEA9C227723EE8BCB ,  0xAECC49914078536D ,  0x823C12795DB6CE57 ,  0xC21094364DFB5637 , 
82+  0x9096EA6F3848984F ,  0xD77485CB25823AC7 ,  0xA086CFCD97BF97F4 ,  0xEF340A98172AACE5 , 
83+  0xB23867FB2A35B28E ,  0x84C8D4DFD2C63F3B ,  0xC5DD44271AD3CDBA ,  0x936B9FCEBB25C996 , 
84+  0xDBAC6C247D62A584 ,  0xA3AB66580D5FDAF6 ,  0xF3E2F893DEC3F126 ,  0xB5B5ADA8AAFF80B8 , 
85+  0x87625F056C7C4A8B ,  0xC9BCFF6034C13053 ,  0x964E858C91BA2655 ,  0xDFF9772470297EBD , 
86+  0xA6DFBD9FB8E5B88F ,  0xF8A95FCF88747D94 ,  0xB94470938FA89BCF ,  0x8A08F0F8BF0F156B , 
87+  0xCDB02555653131B6 ,  0x993FE2C6D07B7FAC ,  0xE45C10C42A2B3B06 ,  0xAA242499697392D3 , 
88+  0xFD87B5F28300CA0E ,  0xBCE5086492111AEB ,  0x8CBCCC096F5088CC ,  0xD1B71758E219652C , 
89+  0x9C40000000000000 ,  0xE8D4A51000000000 ,  0xAD78EBC5AC620000 ,  0x813F3978F8940984 , 
90+  0xC097CE7BC90715B3 ,  0x8F7E32CE7BEA5C70 ,  0xD5D238A4ABE98068 ,  0x9F4F2726179A2245 , 
91+  0xED63A231D4C4FB27 ,  0xB0DE65388CC8ADA8 ,  0x83C7088E1AAB65DB ,  0xC45D1DF942711D9A , 
92+  0x924D692CA61BE758 ,  0xDA01EE641A708DEA ,  0xA26DA3999AEF774A ,  0xF209787BB47D6B85 , 
93+  0xB454E4A179DD1877 ,  0x865B86925B9BC5C2 ,  0xC83553C5C8965D3D ,  0x952AB45CFA97A0B3 , 
94+  0xDE469FBD99A05FE3 ,  0xA59BC234DB398C25 ,  0xF6C69A72A3989F5C ,  0xB7DCBF5354E9BECE , 
95+  0x88FCF317F22241E2 ,  0xCC20CE9BD35C78A5 ,  0x98165AF37B2153DF ,  0xE2A0B5DC971F303A , 
96+  0xA8D9D1535CE3B396 ,  0xFB9B7CD9A4A7443C ,  0xBB764C4CA7A44410 ,  0x8BAB8EEFB6409C1A , 
97+  0xD01FEF10A657842C ,  0x9B10A4E5E9913129 ,  0xE7109BFBA19C0C9D ,  0xAC2820D9623BF429 , 
98+  0x80444B5E7AA7CF85 ,  0xBF21E44003ACDD2D ,  0x8E679C2F5E44FF8F ,  0xD433179D9C8CB841 , 
99+  0x9E19DB92B4E31BA9 ,  0xEB96BF6EBADF77D9 ,  0xAF87023B9BF0EE6B 
100+ ] ; 
117101
118102// Count number of decimals for u32 values 
119103// In our case input value always non-zero so we can simplify some parts 
@@ -122,7 +106,7 @@ export function decimalCount32(value: u32): u32 {
122106 let  l : u32  =  32  -  clz < u32 > ( value ) ;  // log2 
123107 let  t  =  l  *  1233  >>>  12 ;  // log10 
124108
125-  let  lutbuf  =  < ArrayBuffer > POWERS10 ( ) . buffer_ ; 
109+  let  lutbuf  =  < ArrayBuffer > POWERS10 . buffer_ ; 
126110 let  power  =  LOAD < u32 > ( lutbuf ,  t ) ; 
127111 t  -=  < u32 > ( value  <  power ) ; 
128112 return  t  +  1 ; 
@@ -152,7 +136,7 @@ export function decimalCount64(value: u64): u32 {
152136 let  l : u32  =  64  -  < u32 > clz < u64 > ( value ) ;  // log2 
153137 let  t  =  l  *  1233  >>>  12 ;  // log10 
154138
155-  let  lutbuf  =  < ArrayBuffer > POWERS10 ( ) . buffer_ ; 
139+  let  lutbuf  =  < ArrayBuffer > POWERS10 . buffer_ ; 
156140 let  power  =  LOAD < u32 , u64 > ( lutbuf ,  t  -  10 ) ; 
157141 t  -=  < u32 > ( value  <  10000000000  *  power ) ; 
158142 return  t  +  1 ; 
@@ -176,7 +160,7 @@ export function decimalCount64(value: u64): u32 {
176160} 
177161
178162function  utoa32_lut ( buffer : usize ,  num : u32 ,  offset : usize ) : void { 
179-  var  lutbuf  =  < ArrayBuffer > DIGITS ( ) . buffer_ ; 
163+  var  lutbuf  =  < ArrayBuffer > DIGITS . buffer_ ; 
180164
181165 while  ( num  >=  10000 )  { 
182166 // in most VMs i32/u32 div and modulo by constant can be shared and simplificate 
@@ -215,7 +199,7 @@ function utoa32_lut(buffer: usize, num: u32, offset: usize): void {
215199} 
216200
217201function  utoa64_lut ( buffer : usize ,  num : u64 ,  offset : usize ) : void { 
218-  var  lutbuf  =  < ArrayBuffer > DIGITS ( ) . buffer_ ; 
202+  var  lutbuf  =  < ArrayBuffer > DIGITS . buffer_ ; 
219203
220204 while  ( num  >=  100000000 )  { 
221205 let  t  =  num  /  100000000 ; 
@@ -432,8 +416,8 @@ function getCachedPower(minExp: i32): void {
432416
433417 var  index  =  ( k  >>  3 )  +  1 ; 
434418 _K  =  348  -  ( index  <<  3 ) ; // decimal exponent no need lookup table 
435-  var  frcPowers  =  < ArrayBuffer > FRC_POWERS ( ) . buffer_ ; 
436-  var  expPowers  =  < ArrayBuffer > EXP_POWERS ( ) . buffer_ ; 
419+  var  frcPowers  =  < ArrayBuffer > FRC_POWERS . buffer_ ; 
420+  var  expPowers  =  < ArrayBuffer > EXP_POWERS . buffer_ ; 
437421 _frc_pow  =  LOAD < u64 > ( frcPowers ,  index ) ; 
438422 _exp_pow  =  LOAD < i16 , i32 > ( expPowers ,  index ) ; 
439423} 
@@ -485,7 +469,7 @@ function genDigits(buffer: usize, w_frc: u64, w_exp: i32, mp_frc: u64, mp_exp: i
485469 var  kappa  =  < i32 > decimalCount32 ( p1 ) ; 
486470 var  len  =  sign ; 
487471
488-  var  powers10  =  < ArrayBuffer > POWERS10 ( ) . buffer_ ; 
472+  var  powers10  =  < ArrayBuffer > POWERS10 . buffer_ ; 
489473
490474 while  ( kappa  >  0 )  { 
491475 let  d : u32 ; 
0 commit comments