aboutsummaryrefslogtreecommitdiff
path: root/src/boot/strap/translator.clisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot/strap/translator.clisp')
-rw-r--r--src/boot/strap/translator.clisp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/boot/strap/translator.clisp b/src/boot/strap/translator.clisp
index 0b849cfc..2d480526 100644
--- a/src/boot/strap/translator.clisp
+++ b/src/boot/strap/translator.clisp
@@ -469,10 +469,39 @@
((NULL |$stack|) (|bpGeneralErrorHere|) NIL)
('T (CAR |$stack|)))))))
+(DEFUN |genDeclaration| (|n| |t|)
+ (PROG (|argTypes| |ISTMP#2| |valType| |ISTMP#1|)
+ (RETURN
+ (COND
+ ((AND (CONSP |t|) (EQ (CAR |t|) '|Mapping|)
+ (PROGN
+ (SETQ |ISTMP#1| (CDR |t|))
+ (AND (CONSP |ISTMP#1|)
+ (PROGN
+ (SETQ |valType| (CAR |ISTMP#1|))
+ (SETQ |ISTMP#2| (CDR |ISTMP#1|))
+ (AND (CONSP |ISTMP#2|) (EQ (CDR |ISTMP#2|) NIL)
+ (PROGN
+ (SETQ |argTypes| (CAR |ISTMP#2|))
+ 'T))))))
+ (PROGN
+ (COND
+ ((|bfTupleP| |argTypes|)
+ (SETQ |argTypes| (CDR |argTypes|))))
+ (COND
+ ((AND (NULL (NULL |argTypes|)) (SYMBOLP |argTypes|))
+ (SETQ |argTypes| (LIST |argTypes|))))
+ (LIST 'DECLAIM
+ (LIST 'FTYPE (LIST 'FUNCTION |argTypes| |valType|)
+ |n|))))
+ ('T (LIST 'DECLAIM (LIST 'TYPE |t| |n|)))))))
+
(DEFUN |bpOutItem| ()
(PROG (|bfVar#6| |bfVar#5| |r| |ISTMP#2| |l| |ISTMP#1| |b|)
+ (DECLARE (SPECIAL |$op|))
(RETURN
(PROGN
+ (SETQ |$op| NIL)
(OR (|bpComma|) (|bpTrap|))
(SETQ |b| (|bpPop1|))
(COND
@@ -495,6 +524,9 @@
(SETQ |bfVar#5| |b|)
(SETQ |bfVar#6| (CDR |bfVar#5|))
(CASE (CAR |bfVar#5|)
+ (|Signature|
+ (LET ((|op| (CAR |bfVar#6|)) (|t| (CADR |bfVar#6|)))
+ (|bpPush| (LIST (|genDeclaration| |op| |t|)))))
(|Module|
(LET ((|m| (CAR |bfVar#6|)))
(|bpPush|