This commit is contained in:
Justin Ethier 2016-08-16 18:14:46 -04:00
parent a91c406020
commit 2499f60730
2 changed files with 12 additions and 4 deletions

View file

@ -9,7 +9,6 @@
(define-library (scheme cyclone util) (define-library (scheme cyclone util)
(import (scheme base) (import (scheme base)
(scheme char)) (scheme char))
; TODO: really need export-all for these cyclone libs!!
(export (export
;; Code analysis ;; Code analysis
tagged-list? tagged-list?
@ -17,6 +16,7 @@
begin? begin?
lambda? lambda?
pair->list pair->list
formals->list
lambda-formals->list lambda-formals->list
lambda-varargs? lambda-varargs?
lambda->formals lambda->formals
@ -96,7 +96,7 @@
; (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)))))))
; Alternate definition: ; Alternate definition, works even if exp is not a lambda (IE, an AST):
(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)
@ -119,6 +119,14 @@
(pair->list args))) (pair->list args)))
(lambda->formals exp))) (lambda->formals exp)))
;; object -> list
;; Accept only args instead of a whole lambda
(define (formals->list args)
(cond
((symbol? args) (list args))
((list? args) args)
(else (pair->list args))))
; char->natural : char -> natural ; char->natural : char -> natural
(define (char->natural c) (define (char->natural c)
(let ((i (char->integer c))) (let ((i (char->integer c)))

View file

@ -486,8 +486,8 @@
;; TODO: need to pass lambdas as a list (depending on type), and ;; TODO: need to pass lambdas as a list (depending on type), and
;; split up args accordingly (create a list for varargs) ;; split up args accordingly (create a list for varargs)
(lambda-formals->list (formals->list
`(lambda ,(procedure-parameters proc) #f)) (procedure-parameters proc))
args args
(procedure-environment proc)))) (procedure-environment proc))))
((procedure? proc) ((procedure? proc)