From 71c1b5c5a4cd6426f5a77c5396d3afbeb6841cd2 Mon Sep 17 00:00:00 2001 From: alex-eg Date: Wed, 1 Oct 2025 12:37:59 +0300 Subject: [PATCH] add support for nested lambdas --- example/lambdas.sex | 7 +++++++ semen.scm | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/example/lambdas.sex b/example/lambdas.sex index acbdfd6..6a0bdcf 100644 --- a/example/lambdas.sex +++ b/example/lambdas.sex @@ -28,4 +28,11 @@ (return (+ a b 100))) a b)) + (var (fn int ((int))) l-1 + (lambda int ((int a)) () + (var (fn int ((int))) l-2 + (lambda int ((int a)) () + (return (+ 60 a)))) + (return (+ 600 (l-2 a))))) + (printf "Calling nested lambdas: %d\n" (l-1 6)) (return 0)) diff --git a/semen.scm b/semen.scm index 4c5a239..8d7d4a3 100644 --- a/semen.scm +++ b/semen.scm @@ -134,8 +134,8 @@ (let ((lambda-name (semen-make-lambda-name (hash-table-ref env :fn-name) (hash-table-ref env :lambda-counter)))) (set! (hash-table-ref env :lambda-aux-code) - (cons (semen-make-aux-lambda-struct lambda-name form) - (hash-table-ref env :lambda-aux-code))) + (append (semen-make-aux-lambda-struct lambda-name form) + (hash-table-ref env :lambda-aux-code))) (set! (hash-table-ref env :lambda-counter) (+ (hash-table-ref env :lambda-counter) 1)) lambda-name) @@ -150,7 +150,7 @@ (('lambda ret-type arglist captures . body) ;; Captures are ignored for now, but ;; we'll need them for TODO: closures support - `(fn ,ret-type ,name ,arglist ,@body)) + (process-fn `(fn ,ret-type ,name ,arglist ,@body) (list))) (else (assert #f (fmt #f "Malformed lambda " form))))) ;;; Struct -- 2.52.0