mescc: Refactor expr->base.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 7 Apr 2017 12:41:47 +0000 (14:41 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 7 Apr 2017 12:41:47 +0000 (14:41 +0200)
* module/language/c99/compiler.mes (expr->base): Rename from
  expr->+base.  Use throughout.

module/language/c99/compiler.mes

index 45eedcab64862edbf5970feafc0ba74b2e2a626b..2d1b555e6dcc57dc28c4d73f4841ca6842c308d3 100644 (file)
          (when (not (equal? op "="))
            (stderr "OOOPS0.0: op=~s\n" op)
            barf)
-         (let* ((empty (clone info #:text '()))
-                (base ((expr->base empty) b)))
-           (append-text info (append (.text base)
-                                     ((base->ident-address info) name)
+         (let ((info ((expr->base info) b)))
+           (append-text info (append ((base->ident-address info) name)
                                      ((ident->accu info) name)
                                      ((ident-add info) name 1)))))
 
          (when (not (equal? op "="))
            (stderr "OOOPS0.0: op=~s\n" op)
            barf)
-         (let* ((empty (clone info #:text '()))
-                (base ((expr->base empty) b)))
-           (append-text info (append (.text base)
-                                     ((base->ident-address info) name)
+         (let ((info ((expr->base info) b)))
+           (append-text info (append ((base->ident-address info) name)
                                      ((ident->accu info) name)
                                      ((ident-add info) name -1)))))
 
          (when (not (equal? op "="))
            (stderr "OOOPS0: op=~s\n" op)
            barf)
-         (let* ((empty (clone info #:text '()))
-                (expr ((expr->accu* empty) `(d-sel (ident ,field) ,@d-sel))) ;; <-OFFSET
-                (base ((expr->base empty) b))
+         (let* (;;(empty (clone info #:text '()))
+                ;;(expr ((expr->accu* empty) `(d-sel (ident ,field) ,@d-sel))) ;; <-OFFSET
+                (info ((expr->accu info) b))
+                (info (append-text info (wrap-as (i386:push-accu))))
+                (info ((expr->accu* info) `(d-sel (ident ,field) ,@d-sel))) ;; <-OFFSET
+                (info (append-text info (wrap-as (i386:pop-base))))
                 (type (list "struct" "scm")) ;; FIXME
                 (fields (type->description info type))
                 (size (type->size info type))
                 (field-size 4) ;; FIXME:4, not fixed
                 (offset (* field-size (1- (length (member field (reverse fields) (lambda (a b) (equal? a (cdr b))))))))                )
-           (append-text info (append (.text expr)
-                                     (.text base)
-                                     (wrap-as (i386:base->accu-address)))))) ; FIXME: size
+           (append-text info (wrap-as (i386:base->accu-address))))) ; FIXME: size
 
 
         ;; i = 0;
                     (not (equal? op "-=")))
            (stderr "OOOPS1: op=~s\n" op)
            barf)
-         (let* ((empty (clone info #:text '()))
-                (base ((expr->base empty) b)))
-           (append-text info (append (.text base)
-                                     (if (equal? op "=") '()
+         (let ((info ((expr->base info) b)))
+           (append-text info (append (if (equal? op "=") '()
                                          (append ((ident->accu info) name)
                                                  (wrap-as (append (if (equal? op "+=") (i386:accu+base)
                                                                       (i386:accu-base))
                                      ;;assign:
                                      ((base->ident info) name)
                                      (wrap-as (i386:base->accu))))))
-        
+
         ;; *p = 0;
         ((assn-expr (de-ref (p-expr (ident ,array))) (op ,op) ,b)
          (when (not (equal? op "="))
            (stderr "OOOPS2: op=~s\n" op)
            barf)
-         (let* ((empty (clone info #:text '()))
-                (base ((expr->base empty) b)))
-           (append-text info (append (.text base)
-                                     ;;assign:
+         (let ((info ((expr->base info) b)))
+           (append-text info (append ;;assign:
                                      ((base->ident-address info) array)
                                      (wrap-as (i386:base->accu))))))
 
            (stderr "OOOPS3: op=~s\n" op)
            barf)
          (let* ((info ((expr->accu* info) `(array-ref ,index (p-expr (ident ,array)))))
-                (info ((expr->+base info) b))
+                (info ((expr->base info) b))
                 (type (ident->type info array))
                 (size (type->size info type))
                 (ptr (ident->pointer info array)))
          barf
          info)))))
 
-(define (expr->+base info)
+(define (expr->base info)
   (lambda (o)
     (let* ((info (append-text info (wrap-as (i386:push-accu))))
            (info ((expr->accu info) o))
 (define (binop->accu info)
   (lambda (a b c)
     (let* ((info ((expr->accu info) a))
-           (info ((expr->+base info) b)))
+           (info ((expr->base info) b)))
       (append-text info (wrap-as c)))))
 
 (define (append-text info text)
 (define (wrap-as o)
   (list (lambda (f g ta t d) o)))
 
-(define (expr->base info) ;; JUNKME
-  (lambda (o)
-    (let ((info ((expr->accu info) o)))
-      (clone info
-             #:text (append (wrap-as (i386:push-accu))
-                            (.text info)
-                            (wrap-as (append (i386:accu->base)
-                                             (i386:pop-accu))))))))
-
 (define (expr->accu* info)
   (lambda (o)
     ;; (stderr "expr->accu* o=~s\n" o)