Staging changes

This commit is contained in:
Justin Ethier 2016-08-16 03:54:18 -04:00
parent 5cf0cd048b
commit 6d3e5f041f

View file

@ -61,12 +61,12 @@
letrec->exp letrec->exp
letrec->bound-vars letrec->bound-vars
letrec->args letrec->args
lambda-varargs? ;lambda-varargs?
lambda->formals ;lambda->formals
lambda-varargs? ;lambda-varargs?
lambda-varargs-var ;lambda-varargs-var
lambda-formals-type ;lambda-formals-type
lambda-formals->list ;lambda-formals->list
lambda-num-args lambda-num-args
ast:lambda-formals-type ast:lambda-formals-type
ast:lambda-formals->list ast:lambda-formals->list
@ -325,50 +325,50 @@
(define (letrec->args exp) (define (letrec->args exp)
(map cadr (cadr exp))) (map cadr (cadr exp)))
(define (lambda-varargs? exp) ;(define (lambda-varargs? exp)
(and (lambda? exp) ; (and (lambda? exp)
(or (symbol? (lambda->formals exp)) ; (or (symbol? (lambda->formals exp))
(and (pair? (lambda->formals exp)) ; (and (pair? (lambda->formals exp))
(not (list? (lambda->formals exp))))))) ; (not (list? (lambda->formals exp)))))))
;
; lambda->formals : lambda-exp -> list[symbol] ;; lambda->formals : lambda-exp -> list[symbol]
(define (lambda->formals exp) ;(define (lambda->formals exp)
(cadr exp)) ; (cadr exp))
;
(define (lambda-varargs? exp) ;(define (lambda-varargs? exp)
(let ((type (lambda-formals-type exp))) ; (let ((type (lambda-formals-type exp)))
(or (equal? type 'args:varargs) ; (or (equal? type 'args:varargs)
(equal? type 'args:fixed-with-varargs)))) ; (equal? type 'args:fixed-with-varargs))))
;
(define (lambda-varargs-var exp) ;(define (lambda-varargs-var exp)
(if (lambda-varargs? exp) ; (if (lambda-varargs? exp)
(if (equal? (lambda-formals-type exp) 'args:varargs) ; (if (equal? (lambda-formals-type exp) 'args:varargs)
(lambda->formals exp) ; take symbol directly ; (lambda->formals exp) ; take symbol directly
(car (reverse (lambda-formals->list exp)))) ; Last arg is varargs ; (car (reverse (lambda-formals->list exp)))) ; Last arg is varargs
#f)) ; #f))
(define (ast:lambda-formals-type ast) (define (ast:lambda-formals-type ast)
(lambda-formals-type `(#f ,(ast:lambda-args ast) #f))) (lambda-formals-type `(#f ,(ast:lambda-args ast) #f)))
(define (lambda-formals-type exp) ;(define (lambda-formals-type exp)
(let ((args (lambda->formals exp))) ; (let ((args (lambda->formals exp)))
(cond ; (cond
((symbol? args) 'args:varargs) ; ((symbol? args) 'args:varargs)
((list? args) 'args:fixed) ; ((list? args) 'args:fixed)
((pair? args) 'args:fixed-with-varargs) ; ((pair? args) 'args:fixed-with-varargs)
(else ; (else
(error `(Unexpected formals list in lambda-formals-type: ,args)))))) ; (error `(Unexpected formals list in lambda-formals-type: ,args))))))
(define (ast:lambda-formals->list ast) (define (ast:lambda-formals->list ast)
(lambda-formals->list `(#f ,(ast:lambda-args ast) #f))) (lambda-formals->list `(#f ,(ast:lambda-args ast) #f)))
(define (lambda-formals->list exp) ;(define (lambda-formals->list exp)
(if (lambda-varargs? exp) ; (if (lambda-varargs? exp)
(let ((args (lambda->formals exp))) ; (let ((args (lambda->formals exp)))
(if (symbol? args) ; (if (symbol? args)
(list args) ; (list args)
(pair->list args))) ; (pair->list args)))
(lambda->formals exp))) ; (lambda->formals exp)))
;; Minimum number of required arguments for a lambda ;; Minimum number of required arguments for a lambda
(define (lambda-num-args exp) (define (lambda-num-args exp)