aboutsummaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/parser.boot6
-rw-r--r--src/boot/tokens.boot5
2 files changed, 8 insertions, 3 deletions
diff --git a/src/boot/parser.boot b/src/boot/parser.boot
index 3aee7371..a7706e9a 100644
--- a/src/boot/parser.boot
+++ b/src/boot/parser.boot
@@ -549,15 +549,15 @@ bpExceptions()==
bpSexpKey()==
- $stok is ["KEY",:.] and not bpExceptions()=>
+ $stok is ["KEY",:.] and not bpExceptions() =>
a := $ttok has SHOEINF
- a = nil => bpPush $ttok and bpNext()
+ a = nil => bpPush keywordId $ttok and bpNext()
bpPush a and bpNext()
false
bpAnyId()==
bpEqKey "MINUS" and ($stok is ["INTEGER",:.] or bpTrap()) and
- bpPush MINUS $ttok and bpNext() or
+ bpPush(-$ttok) and bpNext() or
bpSexpKey() or
shoeTokType $stok in '(ID INTEGER STRING FLOAT)
and bpPush $ttok and bpNext()
diff --git a/src/boot/tokens.boot b/src/boot/tokens.boot
index e8909318..a008556c 100644
--- a/src/boot/tokens.boot
+++ b/src/boot/tokens.boot
@@ -132,6 +132,11 @@ shoeKeyTableCons()==
shoeKeyTable:=shoeKeyTableCons()
+keywordId t ==
+ s := or/[k for [k,:v] in entries shoeKeyTable | symbolEq?(v,t)] =>
+ makeSymbol s
+ t
+
shoeInsert(s,d) ==
l := #s
h := codePoint stringChar(s,0)