From 60ef3caa4dc2610028e32b9c2a37ef560d4d1a5a Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 15 Apr 2021 17:38:14 -0700 Subject: shell: starting to parse dotted lists --- shell/parse.mu | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'shell') diff --git a/shell/parse.mu b/shell/parse.mu index 9fd555b3..dde7da4d 100644 --- a/shell/parse.mu +++ b/shell/parse.mu @@ -65,18 +65,28 @@ fn parse-sexpression tokens: (addr stream cell), _out: (addr handle cell), trace { break-if-= var curr/esi: (addr handle cell) <- copy _out - $parse-sexpression:list-loop: { - allocate-pair curr + allocate-pair curr + var curr-addr/eax: (addr cell) <- lookup *curr + var left/ecx: (addr handle cell) <- get curr-addr, left + { + var close-paren?/eax: boolean <- parse-sexpression tokens, left, trace + compare close-paren?, 0/false + break-if-!= var curr-addr/eax: (addr cell) <- lookup *curr - var left/ecx: (addr handle cell) <- get curr-addr, left - { - var close-paren?/eax: boolean <- parse-sexpression tokens, left, trace - compare close-paren?, 0/false - break-if-!= $parse-sexpression:list-loop - } - # curr <- get curr-addr, right - loop + $parse-sexpression:list-loop: { + allocate-pair curr + var curr-addr/eax: (addr cell) <- lookup *curr + var left/ecx: (addr handle cell) <- get curr-addr, left + { + var close-paren?/eax: boolean <- parse-sexpression tokens, left, trace + compare close-paren?, 0/false + break-if-!= $parse-sexpression:list-loop + } + # + curr <- get curr-addr, right + loop + } } break $parse-sexpression:type-check } -- cgit 1.4.1-2-gfad0 alue='19615eade0106ad5a3a988b3f1f257367aceb7ec'/>
path: root/json.lua
blob: c41ef56bdcd03cfd7d521444960b61b9d168e2be (plain) (tree)