Added KMP->STANDARD, a lame attenpt to make KMP-Scheme look like
authorStephen Adams <edu/mit/csail/zurich/adams>
Sat, 1 Apr 1995 16:56:23 +0000 (16:56 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Sat, 1 Apr 1995 16:56:23 +0000 (16:56 +0000)
normal Scheme.

v8/src/compiler/midend/utils.scm

index c869a52ce4e16bf3e8062c8b73c820c99800c569..c352984002e04fb19e442d391bba09b6e9c19f35 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: utils.scm,v 1.20 1995/03/01 14:09:28 adams Exp $
+$Id: utils.scm,v 1.21 1995/04/01 16:56:23 adams Exp $
 
 Copyright (c) 1994 Massachusetts Institute of Technology
 
@@ -165,6 +165,38 @@ MIT in each case. |#
          ((pair? expr)
           (map walk expr))
          (else expr))))
+
+(define (kmp->standard form)
+  ;; Convert non-cps kmp code to `ordinary' scheme
+  (cond ((QUOTE/? form)
+        (let ((datum (quote/text form)))
+          (if (or (number? datum) (boolean? datum)
+                  (string? datum) (char? datum))
+              datum
+              form)))
+       ((LOOKUP/? form)
+        (lookup/name form))
+       ((or (LET/? form) (LETREC/? form))
+        `(,(car form) ,(map (lambda (b)
+                              (list (car b) (kmp->standard (cadr b))))
+                            (second form))
+                      ,(kmp->standard (third form))))
+       ((LAMBDA/? form)
+        `(LAMBDA ,(cdr (lambda/formals form)) ,(kmp->standard (third form))))
+       ((CALL/? form)
+        (if (not (equal? (call/continuation form) '(QUOTE #F)))
+            (internal-error "KMP->Standard: not pre-CPS:" form))
+        (let ((rator  (kmp->standard (call/operator form)))
+              (rands  (map kmp->standard (call/operands form))))
+          (cond ((and (QUOTE/? rator)
+                      (or (known-operator? (quote/text rator))
+                          (primitive-procedure? (quote/text rator))))
+                 `(,(quote/text rator) ,@rands))
+                (else `(,rator ,@rands)))))
+       ((SET!/? form) `(set! ,(second from) ,(kmp->standard (third form))))
+       ((DECLARE/? form) form)
+       (else
+        (cons (car form) (map kmp->standard (cdr form))))))
 \f
 ;;; Simple form utilities