From 3d138cbde857df14df424ccd04a56f466924bc09 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 12 Jul 2016 23:06:32 -0400 Subject: [PATCH] Check number of args passed to anonymous lambdas --- scheme/cyclone/transforms.sld | 41 +++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index 53530a14..9268d240 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -1385,13 +1385,40 @@ (let ((fn (app->fun ast))) (cond ((lambda? fn) - (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)))) + ;; Check number of arguments to the lambda + (let ((lam-min-num-args (lambda-num-args fn)) + (num-args (length (app->args ast)))) + (cond + ((< num-args lam-min-num-args) + (error + (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 (cps-list ast ;(ast-subx ast) (lambda (args)