diff options
author | dos-reis <gdr@axiomatics.org> | 2011-05-16 02:40:27 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-05-16 02:40:27 +0000 |
commit | 3537b6ab6e6696fb5def82cde4c9c9e843f84ce9 (patch) | |
tree | 1483f8a7677477c35940de78eccb7e6d087b5ce0 /src/boot | |
parent | 8cf4c7d7040078b651859fbd998f6bbf7b68127e (diff) | |
download | open-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.boot | 3 | ||||
-rw-r--r-- | src/boot/parser.boot | 6 | ||||
-rw-r--r-- | src/boot/strap/ast.clisp | 2 | ||||
-rw-r--r-- | src/boot/strap/parser.clisp | 6 | ||||
-rw-r--r-- | src/boot/strap/tokens.clisp | 2 | ||||
-rw-r--r-- | src/boot/tokens.boot | 1 |
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"] , _ |