#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/cfg1.scm,v 4.2 1987/12/30 06:57:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/cfg1.scm,v 4.3 1987/12/31 10:01:31 cph Rel $
Copyright (c) 1987 Massachusetts Institute of Technology
(define snode? (tagged-vector/subclass-predicate snode-tag))
(define-vector-slots snode 4 next-edge)
-(define (make-snode tag . extra)
- (list->vector (cons* tag false '() '() false extra)))
+;;; converted to a macro.
+;;; (define (make-snode tag . extra)
+;;; (list->vector (cons* tag false '() '() false extra)))
(set-vector-tag-description!
snode-tag
(define pnode? (tagged-vector/subclass-predicate pnode-tag))
(define-vector-slots pnode 4 consequent-edge alternative-edge)
-(define (make-pnode tag . extra)
- (list->vector (cons* tag false '() '() false false extra)))
+;;; converted to a macro.
+;;; (define (make-pnode tag . extra)
+;;; (list->vector (cons* tag false '() '() false false extra)))
(set-vector-tag-description!
pnode-tag
(define (delete-node-previous-edge! node edge)
(set-node-previous-edges! node (delq! edge (node-previous-edges node))))
+\f
+;;;; Edge Datatype
+
+(define-structure (edge (type vector)) left-node left-connect right-node)
(define (edge-next-node edge)
(and edge (edge-right-node edge)))
(define-integrable (pnode-alternative pnode)
(edge-next-node (pnode-alternative-edge pnode)))
-\f
-;;;; Edge Datatype
-
-(define-structure (edge (type vector)) left-node left-connect right-node)
(define (create-edge! left-node left-connect right-node)
(let ((edge (make-edge left-node left-connect right-node)))
(begin
(set-edge-right-node! edge right-node)
(add-node-previous-edge! right-node edge))))
-
+\f
(define (edge-disconnect-left! edge)
(let ((left-node (edge-left-node edge))
(left-connect (edge-left-connect edge)))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/lvalue.scm,v 4.2 1987/12/30 06:58:51 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/lvalue.scm,v 4.3 1987/12/31 10:01:42 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define *lvalues*)
-(define (make-lvalue tag . extra)
- (let ((lvalue
- (list->vector
- (cons* tag '() '() '() 'NOT-CACHED false '() false false '()
- extra))))
- (set! *lvalues* (cons lvalue *lvalues*))
- lvalue))
+;;; converted to a macro.
+;;; (define (make-lvalue tag . extra)
+;;; (let ((lvalue
+;;; (list->vector
+;;; (cons* tag '() '() '() 'NOT-CACHED false '() false false '()
+;;; extra))))
+;;; (set! *lvalues* (cons lvalue *lvalues*))
+;;; lvalue))
(define (add-lvalue-application! lvalue application)
(set-lvalue-applications! lvalue
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/macros.scm,v 4.2 1987/12/30 06:58:58 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/macros.scm,v 4.3 1987/12/31 10:00:54 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
,tag-name
(LAMBDA (,type)
(DESCRIPTOR-LIST ,type ,@slots)))))))
+
+(syntax-table-define compiler-syntax-table 'DESCRIPTOR-LIST
+ (macro (type . slots)
+ (let ((ref-name (lambda (slot) (symbol-append type '- slot))))
+ `(LIST ,@(map (lambda (slot)
+ (if (pair? slot)
+ (let ((ref-names (map ref-name slot)))
+ ``(,',ref-names ,(,(car ref-names) ,type)))
+ (let ((ref-name (ref-name slot)))
+ ``(,',ref-name ,(,ref-name ,type)))))
+ slots)))))
\f
(let-syntax
((define-type-definition
(define-type-definition rvalue 2 rvalue-types)
(define-type-definition lvalue 10 false))
-(syntax-table-define compiler-syntax-table 'DESCRIPTOR-LIST
- (macro (type . slots)
- (let ((ref-name (lambda (slot) (symbol-append type '- slot))))
- `(LIST ,@(map (lambda (slot)
- (if (pair? slot)
- (let ((ref-names (map ref-name slot)))
- ``(,',ref-names ,(,(car ref-names) ,type)))
- (let ((ref-name (ref-name slot)))
- ``(,',ref-name ,(,ref-name ,type)))))
- slots)))))
+;;; Kludge to make these compile efficiently.
+
+(syntax-table-define compiler-syntax-table 'MAKE-SNODE
+ (macro (tag . extra)
+ `((ACCESS VECTOR SYSTEM-GLOBAL-ENVIRONMENT)
+ ,tag FALSE '() '() FALSE ,@extra)))
+
+(syntax-table-define compiler-syntax-table 'MAKE-PNODE
+ (macro (tag . extra)
+ `((ACCESS VECTOR SYSTEM-GLOBAL-ENVIRONMENT)
+ ,tag FALSE '() '() FALSE FALSE ,@extra)))
+
+(syntax-table-define compiler-syntax-table 'MAKE-RVALUE
+ (macro (tag . extra)
+ `((ACCESS VECTOR SYSTEM-GLOBAL-ENVIRONMENT)
+ ,tag FALSE ,@extra)))
+
+(syntax-table-define compiler-syntax-table 'MAKE-LVALUE
+ (macro (tag . extra)
+ (let ((result (generate-uninterned-symbol)))
+ `(let ((,result
+ ((ACCESS VECTOR SYSTEM-GLOBAL-ENVIRONMENT)
+ ,tag '() '() '() 'NOT-CACHED FALSE '() FALSE FALSE '()
+ ,@extra)))
+ (SET! *LVALUES* (CONS ,result *LVALUES*))
+ ,result))))
\f
(let ((rtl-common
(lambda (type prefix components wrap-constructor)
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/rvalue.scm,v 4.1 1987/12/04 20:04:48 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/rvalue.scm,v 4.2 1987/12/31 10:01:50 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define-root-type rvalue
%passed-out?)
-(define (make-rvalue tag . extra)
- (list->vector (cons* tag false extra)))
+;;; converted to a macro.
+;;; (define (make-rvalue tag . extra)
+;;; (list->vector (cons* tag false extra)))
(define-enumeration rvalue-type
(block