aboutsummaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-05-16 02:40:27 +0000
committerdos-reis <gdr@axiomatics.org>2011-05-16 02:40:27 +0000
commit3537b6ab6e6696fb5def82cde4c9c9e843f84ce9 (patch)
tree1483f8a7677477c35940de78eccb7e6d087b5ce0 /src/boot
parent8cf4c7d7040078b651859fbd998f6bbf7b68127e (diff)
downloadopen-axiom-3537b6ab6e6696fb5def82cde4c9c9e843f84ce9.tar.gz
* boot/tokens.boot: "do" is now a keyword.
* boot/ast.boot (bfDo): New. * boot/parser.boot (bpDo): New. (bpReturn): Include do-expressions. * interp/vmlisp.lisp (do): Remove.
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/ast.boot3
-rw-r--r--src/boot/parser.boot6
-rw-r--r--src/boot/strap/ast.clisp2
-rw-r--r--src/boot/strap/parser.clisp6
-rw-r--r--src/boot/strap/tokens.clisp2
-rw-r--r--src/boot/tokens.boot1
6 files changed, 18 insertions, 2 deletions
diff --git a/src/boot/ast.boot b/src/boot/ast.boot
index 2ab77036..6472449b 100644
--- a/src/boot/ast.boot
+++ b/src/boot/ast.boot
@@ -161,6 +161,9 @@ bfPile: %List %Form -> %List %Form
bfPile(part) ==
part
+bfDo x ==
+ x
+
bfAppend: %List %List %Form -> %List %Form
bfAppend ls ==
ls isnt [l,:ls] => nil
diff --git a/src/boot/parser.boot b/src/boot/parser.boot
index f7a0ba8f..db07d2f9 100644
--- a/src/boot/parser.boot
+++ b/src/boot/parser.boot
@@ -756,6 +756,11 @@ bpLeave() ==
bpEqKey "LEAVE" and (bpLogical() or bpTrap()) and
bpPush bfLeave bpPop1()
+++ Do:
+++ DO Assign
+bpDo() ==
+ bpEqKey "DO" and (bpAssign() or bpTrap()) and bpPush bfDo bpPop1()
+
++ Return:
++ RETURN Assign
++ Leave
@@ -767,6 +772,7 @@ bpReturn()==
or bpLeave()
or bpThrow()
or bpAnd()
+ or bpDo()
bpLogical()== bpLeftAssoc('(OR),function bpReturn)
diff --git a/src/boot/strap/ast.clisp b/src/boot/strap/ast.clisp
index 6fcee2ea..74194f69 100644
--- a/src/boot/strap/ast.clisp
+++ b/src/boot/strap/ast.clisp
@@ -197,6 +197,8 @@
(DEFUN |bfPile| (|part|) |part|)
+(DEFUN |bfDo| (|x|) |x|)
+
(DECLAIM (FTYPE (FUNCTION ((|%List| (|%List| |%Form|)))
(|%List| |%Form|))
|bfAppend|))
diff --git a/src/boot/strap/parser.clisp b/src/boot/strap/parser.clisp
index 867d52e9..06dc31e3 100644
--- a/src/boot/strap/parser.clisp
+++ b/src/boot/strap/parser.clisp
@@ -818,10 +818,14 @@
(AND (|bpEqKey| 'LEAVE) (OR (|bpLogical|) (|bpTrap|))
(|bpPush| (|bfLeave| (|bpPop1|)))))
+(DEFUN |bpDo| ()
+ (AND (|bpEqKey| 'DO) (OR (|bpAssign|) (|bpTrap|))
+ (|bpPush| (|bfDo| (|bpPop1|)))))
+
(DEFUN |bpReturn| ()
(OR (AND (|bpEqKey| 'RETURN) (OR (|bpAssign|) (|bpTrap|))
(|bpPush| (|bfReturnNoName| (|bpPop1|))))
- (|bpLeave|) (|bpThrow|) (|bpAnd|)))
+ (|bpLeave|) (|bpThrow|) (|bpAnd|) (|bpDo|)))
(DEFUN |bpLogical| () (|bpLeftAssoc| '(OR) #'|bpReturn|))
diff --git a/src/boot/strap/tokens.clisp b/src/boot/strap/tokens.clisp
index b8eae135..297bcbb3 100644
--- a/src/boot/strap/tokens.clisp
+++ b/src/boot/strap/tokens.clisp
@@ -29,7 +29,7 @@
(DEFCONSTANT |shoeKeyWords|
(LIST (LIST "and" 'AND) (LIST "by" 'BY) (LIST "case" 'CASE)
- (LIST "catch" 'CATCH) (LIST "cross" 'CROSS)
+ (LIST "catch" 'CATCH) (LIST "cross" 'CROSS) (LIST "do" 'DO)
(LIST "else" 'ELSE) (LIST "finally" 'FINALLY)
(LIST "for" 'FOR) (LIST "forall" 'FORALL) (LIST "has" 'HAS)
(LIST "if" 'IF) (LIST "import" 'IMPORT) (LIST "in" 'IN)
diff --git a/src/boot/tokens.boot b/src/boot/tokens.boot
index 9acebffc..c6b6b4dc 100644
--- a/src/boot/tokens.boot
+++ b/src/boot/tokens.boot
@@ -62,6 +62,7 @@ shoeKeyWords == [ _
['"case","CASE"] , _
['"catch","CATCH"], _
['"cross","CROSS"] , _
+ ['"do", "DO" ], _
['"else", "ELSE"] , _
['"finally", "FINALLY"], _
['"for", "FOR"] , _