diff --git a/scheme/cyclone/util.sld b/scheme/cyclone/util.sld index 7eb3d89a..d5a58096 100644 --- a/scheme/cyclone/util.sld +++ b/scheme/cyclone/util.sld @@ -9,7 +9,6 @@ (define-library (scheme cyclone util) (import (scheme base) (scheme char)) - ; TODO: really need export-all for these cyclone libs!! (export ;; Code analysis tagged-list? @@ -17,6 +16,7 @@ begin? lambda? pair->list + formals->list lambda-formals->list lambda-varargs? lambda->formals @@ -96,7 +96,7 @@ ; (or (symbol? (lambda->formals exp)) ; (and (pair? (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) (let ((type (lambda-formals-type exp))) (or (equal? type 'args:varargs) @@ -119,6 +119,14 @@ (pair->list args))) (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 (define (char->natural c) (let ((i (char->integer c))) diff --git a/scheme/eval.sld b/scheme/eval.sld index 87ddf35f..c3b3e2f5 100644 --- a/scheme/eval.sld +++ b/scheme/eval.sld @@ -486,8 +486,8 @@ ;; TODO: need to pass lambdas as a list (depending on type), and ;; split up args accordingly (create a list for varargs) - (lambda-formals->list - `(lambda ,(procedure-parameters proc) #f)) + (formals->list + (procedure-parameters proc)) args (procedure-environment proc)))) ((procedure? proc)