comparison modules/json.tp @ 365:3d36d69aab7f

Fix JSON decoder to align with language changes
author Michael Pavone <pavone@retrodev.com>
date Fri, 07 Aug 2015 21:40:08 -0700
parents eef8a5cea812
children e2c1309ab750
comparison
equal deleted inserted replaced
364:e44f65abaf0e 365:3d36d69aab7f
16 cr <- "\r" byte: 0 16 cr <- "\r" byte: 0
17 colon <- ":" byte: 0 17 colon <- ":" byte: 0
18 t <- "t" byte: 0 18 t <- "t" byte: 0
19 f <- "f" byte: 0 19 f <- "f" byte: 0
20 20
21 parseNumAt <- :str :at :recvResult { 21 parseNumAt <- :str at {
22 num <- 0 22 num <- 0
23 l <- str length 23 l <- str length
24 minus <- false 24 minus <- false
25 aft <- -1 25 aft <- -1
26 ignore <- false 26 ignore <- false
54 value <- num 54 value <- num
55 after <- aft 55 after <- aft
56 } 56 }
57 } 57 }
58 58
59 parseStrAt <- :src :at :recvResult { 59 parseStrAt <- :src at {
60 //TODO: Deal with escaped characters 60 //TODO: Deal with escaped characters
61 end <- src find: "\"" startingAt: at + 1 else: { src length } 61 end <- src find: "\"" startingAt: at + 1 else: { src length }
62 #{ 62 #{
63 value <- src from: (at + 1) withLength: (end - at - 1) 63 value <- src from: (at + 1) withLength: (end - at - 1)
64 after <- end + 1 64 after <- end + 1
67 67
68 _decode:at <- :text :cur { 68 _decode:at <- :text :cur {
69 ret <- false 69 ret <- false
70 b <- text byte: cur 70 b <- text byte: cur
71 if: b = neg || b >= zero && b <= nine { 71 if: b = neg || b >= zero && b <= nine {
72 text parseNumAt: cur 72 parseNumAt: text cur
73 } else: { 73 } else: {
74 if: b = quote { 74 if: b = quote {
75 text parseStrAt: cur 75 parseStrAt: text cur
76 } else: { 76 } else: {
77 if: b = startArr { 77 if: b = startArr {
78 len <- text length 78 len <- text length
79 val <- #[] 79 val <- #[]
80 cur <- cur + 1 80 cur <- cur + 1