From f4b8dbc8a1fc0767b308e2c37d81876ab8c93b15 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sat, 11 Jun 2016 01:27:50 -0400 Subject: [PATCH] Added a special case to set num_args to 0 for call/cc This fixes validation later on for call/cc's internal lambda function. When we eval it we only want to validate 1 arg, not 2. --- scheme/cyclone/cgen.sld | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scheme/cyclone/cgen.sld b/scheme/cyclone/cgen.sld index 64badb44..de825f8c 100644 --- a/scheme/cyclone/cgen.sld +++ b/scheme/cyclone/cgen.sld @@ -925,6 +925,11 @@ (cv-name (mangle (gensym 'c))) (lid (allocate-lambda (c-compile-lambda lam trace))) (macro? (assoc (st:->var trace) (get-macros))) + (num-args-str + (if (and (equal? (car trace) "scheme/base.sld") + (equal? (st:->var trace) 'call/cc)) + "1" ;; Special case, need to change runtime checks for call/cc + (number->string (compute-num-args lam)))) (create-nclosure (lambda () (string-append "closureN_type " cv-name ";\n" @@ -932,7 +937,7 @@ cv-name ".hdr.grayed = 0;\n" cv-name ".tag = closureN_tag;\n " cv-name ".fn = (function_type)__lambda_" (number->string lid) ";\n" - cv-name ".num_args = " (number->string (compute-num-args lam)) ";\n" + cv-name ".num_args = " num-args-str ";\n" cv-name ".num_elements = " (number->string (length free-vars)) ";\n" cv-name ".elements = (object *)alloca(sizeof(object) * " (number->string (length free-vars)) ");\n"