comparison modules/json.tp @ 169:9d8ae39e8e67

Handle floating point numbers in JSON parser
author Mike Pavone <pavone@retrodev.com>
date Sun, 11 Aug 2013 04:03:08 -0700
parents 5a6a55592c45
children bb4723fec05e
comparison
equal deleted inserted replaced
168:224071eed9dd 169:9d8ae39e8e67
8 zero <- "0" byte: 0 8 zero <- "0" byte: 0
9 nine <- "9" byte: 0 9 nine <- "9" byte: 0
10 neg <- "-" byte: 0 10 neg <- "-" byte: 0
11 space <- " " byte: 0 11 space <- " " byte: 0
12 comma <- "," byte: 0 12 comma <- "," byte: 0
13 period <- "." byte: 0
13 tab <- " " byte: 0 14 tab <- " " byte: 0
14 nl <- "\n" byte: 0 15 nl <- "\n" byte: 0
15 cr <- "\r" byte: 0 16 cr <- "\r" byte: 0
16 colon <- ":" byte: 0 17 colon <- ":" byte: 0
17 t <- "t" byte: 0 18 t <- "t" byte: 0
20 parseNumAt <- :str :at :recvResult { 21 parseNumAt <- :str :at :recvResult {
21 num <- 0 22 num <- 0
22 l <- str length 23 l <- str length
23 minus <- false 24 minus <- false
24 aft <- -1 25 aft <- -1
26 ignore <- false
25 while: { at < l } do: { 27 while: { at < l } do: {
26 b <- str byte: at 28 b <- str byte: at
27 if: b = neg { 29 if: b = neg {
28 minus <- true 30 minus <- true
29 } else: { 31 } else: {
30 if: b >= zero && b <= nine { 32 if: b = period {
31 num <- num * 10 + (str byte: at) - zero 33 ignore <- true
32 } else: { 34 } else: {
33 aft <- at 35 if: b >= zero && b <= nine {
34 at <- l 36 if: (not: ignore) {
37 num <- num * 10 + (str byte: at) - zero
38 }
39 } else: {
40 aft <- at
41 at <- l
42 }
35 } 43 }
36 } 44 }
37 at <- at + 1 45 at <- at + 1
38 } 46 }
39 if: aft < 0 { 47 if: aft < 0 {