mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 20:45:06 +02:00
Check number of args passed to anonymous lambdas
This commit is contained in:
parent
7caa67a51c
commit
3d138cbde8
1 changed files with 34 additions and 7 deletions
|
@ -1385,13 +1385,40 @@
|
||||||
(let ((fn (app->fun ast)))
|
(let ((fn (app->fun ast)))
|
||||||
(cond
|
(cond
|
||||||
((lambda? fn)
|
((lambda? fn)
|
||||||
(cps-list (app->args ast)
|
;; Check number of arguments to the lambda
|
||||||
(lambda (vals)
|
(let ((lam-min-num-args (lambda-num-args fn))
|
||||||
(cons (ast:make-lambda
|
(num-args (length (app->args ast))))
|
||||||
(lambda->formals fn)
|
(cond
|
||||||
(list (cps-seq (cddr fn) ;(ast-subx fn)
|
((< num-args lam-min-num-args)
|
||||||
cont-ast)))
|
(error
|
||||||
vals))))
|
(string-append
|
||||||
|
"Not enough arguments passed to anonymous lambda. "
|
||||||
|
"Expected "
|
||||||
|
(number->string lam-min-num-args)
|
||||||
|
" but received "
|
||||||
|
(number->string num-args)
|
||||||
|
":")
|
||||||
|
fn))
|
||||||
|
((and (> num-args lam-min-num-args)
|
||||||
|
(equal? 'args:fixed (lambda-formals-type fn)))
|
||||||
|
(error
|
||||||
|
(string-append
|
||||||
|
"Too many arguments passed to anonymous lambda. "
|
||||||
|
"Expected "
|
||||||
|
(number->string lam-min-num-args)
|
||||||
|
" but received "
|
||||||
|
(number->string num-args)
|
||||||
|
":")
|
||||||
|
fn))
|
||||||
|
))
|
||||||
|
;; Do conversion
|
||||||
|
(cps-list (app->args ast)
|
||||||
|
(lambda (vals)
|
||||||
|
(cons (ast:make-lambda
|
||||||
|
(lambda->formals fn)
|
||||||
|
(list (cps-seq (cddr fn) ;(ast-subx fn)
|
||||||
|
cont-ast)))
|
||||||
|
vals))))
|
||||||
(else
|
(else
|
||||||
(cps-list ast ;(ast-subx ast)
|
(cps-list ast ;(ast-subx ast)
|
||||||
(lambda (args)
|
(lambda (args)
|
||||||
|
|
Loading…
Add table
Reference in a new issue