(spar-push-elt-if r4rs-lambda-list? spar-arg:form)
(spar-push-elt spar-arg:form)
(spar+ (spar-push-elt spar-arg:form))
- spar-match-null))
+ (spar-match-null)))
system-global-environment))
(define-syntax :define-record-type
(spar-push-elt-if identifier? spar-arg:form)
(spar-or (spar-push-elt spar-arg:form)
(spar-push-value unassigned-expression)))
- spar-match-null))
- spar-match-null))
+ (spar-match-null)))
+ (spar-match-null)))
(spar+ (spar-push-elt spar-arg:form))
- spar-match-null))
+ (spar-match-null)))
system-global-environment))
(define named-let-strategy 'internal-definition)
deferred-items)))
(spar-elt)
(spar* (spar-elt spar-push-deferred-classified))
- spar-match-null))))
+ (spar-match-null)))))
(define :if
(spar-classifier->runtime
(spar-elt spar-push-classified)
(spar-or (spar-elt spar-push-classified)
(spar-push-value unspecific-item))
- spar-match-null))))
+ (spar-match-null)))))
(define :quote
(spar-classifier->runtime
(spar-call-with-values constant-item
(spar-elt)
(spar-elt (spar-push-value strip-syntactic-closures spar-arg:form))
- spar-match-null))))
+ (spar-match-null)))))
(define :quote-identifier
(spar-classifier->runtime
(spar-or (spar-match var-item? spar-arg:value)
(spar-error "Can't quote a keyword identifier:"
spar-arg:form)))
- spar-match-null))))
+ (spar-match-null)))))
\f
(define :set!
(spar-classifier->runtime
spar-arg:form)))
(spar-or (spar-elt spar-push-classified)
(spar-push-value unassigned-item))
- spar-match-null))))
+ (spar-match-null)))))
;; TODO: this is a classifier rather than a macro because it uses the
;; special OUTPUT/DISJUNCTION. Unfortunately something downstream in
(spar-encapsulate-values or-item
(spar-elt)
(spar* (spar-elt spar-push-classified))
- spar-match-null))))
+ (spar-match-null)))))
(define :delay
(spar-classifier->runtime
(spar-call-with-values delay-item
(spar-elt)
(spar-elt spar-push-deferred-classified)
- spar-match-null))))
+ (spar-match-null)))))
\f
;;;; Definitions
(spar-match identifier? spar-arg:form)
(spar-push-value bind-variable spar-arg:form spar-arg:senv))
(spar-elt spar-push-classified)
- spar-match-null))))
+ (spar-match-null)))))
(define :define-syntax
(spar-classifier->runtime
(spar-or (spar-match keyword-item? spar-arg:value)
(spar-error "Keyword binding value must be a keyword:"
spar-arg:form)))
- spar-match-null))))
+ (spar-match-null)))))
;;;; Lambdas
(spar-call-with-values cons
(spar-elt (spar-push-elt-if identifier? spar-arg:form)
(spar-elt spar-push-classified)
- spar-match-null))))
- spar-match-null)
+ (spar-match-null)))))
+ (spar-match-null))
spar-push-body)))
(define :let-syntax
(spar-call-with-values cons
(spar-elt (spar-push-elt-if identifier? spar-arg:form)
(spar-elt spar-push-open-classified)
- spar-match-null))))
- spar-match-null)
+ (spar-match-null)))))
+ (spar-match-null))
spar-push-body))))
\f
;;;; MIT-specific syntax
(spar-elt)
(spar-push-elt-if identifier? spar-arg:form)
(spar-elt spar-push-classified)
- spar-match-null))))
+ (spar-match-null)))))
(define-expr-item-compiler access-item?
(lambda (item)
(spar-error "This form allowed only at top level:"
spar-arg:form spar-arg:senv))
(spar-elt)
- spar-match-null
+ (spar-match-null)
(spar-push-value the-environment-item)))))
(define keyword:unspecific
(delay
(spar-seq
(spar-elt)
- spar-match-null
+ (spar-match-null)
(spar-push-value unspecific-item)))))
(define keyword:unassigned
(delay
(spar-seq
(spar-elt)
- spar-match-null
+ (spar-match-null)
(spar-push-value unassigned-item)))))
\f
;;;; Declarations
(identifier? (car form))
(list? (cdr form))))
spar-arg:form)))
- spar-match-null))))
+ (spar-match-null)))))
(define (classify-id id senv hist)
(let ((item (classify-form id senv hist)))
(define (spar-push-elt-if predicate . args)
(spar-elt (apply spar-push-if predicate args)))
-(define-deferred spar-match-null
+(define (spar-match-null)
(spar-match null? spar-arg:form))
;;;; Environment combinators
(map-in-order (lambda (elt) (elt body-senv))
elts))))
(spar+ (spar-elt spar-push-open-classified))
- spar-match-null)
+ (spar-match-null))
(spar-push spar-arg:senv)))
\ No newline at end of file