From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Ian Price Newsgroups: gmane.lisp.guile.devel Subject: Re: lua branch Date: Tue, 26 Mar 2013 05:50:11 +0000 Message-ID: <87boa6pv58.fsf@Kagami.home> References: <87fvzipxn7.fsf@Kagami.home> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1364277027 10212 80.91.229.3 (26 Mar 2013 05:50:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 26 Mar 2013 05:50:27 +0000 (UTC) To: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Tue Mar 26 06:50:52 2013 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UKMmY-0002aC-Of for guile-devel@m.gmane.org; Tue, 26 Mar 2013 06:50:50 +0100 Original-Received: from localhost ([::1]:51861 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UKMmA-000549-Us for guile-devel@m.gmane.org; Tue, 26 Mar 2013 01:50:26 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:45550) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UKMm5-000543-Ej for guile-devel@gnu.org; Tue, 26 Mar 2013 01:50:22 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UKMm3-0006ar-TW for guile-devel@gnu.org; Tue, 26 Mar 2013 01:50:21 -0400 Original-Received: from mail-we0-x22a.google.com ([2a00:1450:400c:c03::22a]:37927) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UKMm3-0006aY-I0 for guile-devel@gnu.org; Tue, 26 Mar 2013 01:50:19 -0400 Original-Received: by mail-we0-f170.google.com with SMTP id z2so4504379wey.1 for ; Mon, 25 Mar 2013 22:50:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=x-received:from:to:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=Fy+9LJ9FlmJQhGtNkpCmyL7XOCjoAglgHX5GthDAqcM=; b=R5coJGLN4XVINt5xfG1QBwkMicc0FWVW3BaDGcAQ9nwfCSb5RJGrkb7HuBQRqzmQj0 CzjhqQljkrwD94ZJuOPc8cpMwu6lv/ntUXYlNBN/Adocj2Av+YH5H5iHax24boz8Ayh2 4QQaTk3aMk2ogUEh1WreIVWpfPcIlaezy0mmE56oT30tTaUXPoOQV1GMBm5ieBG9OMMP o4xtzIHcDG1rpwq6+BP7AiY42BP8zmhdWqBYX7h671Zsyem5JmrsnDtJg0K1OOfSvnXV NvhcAMu18ZjsO/0phOFapXCckNTow93dKfPRKXrJOUvnp3eQFqbNQYZRJhR7sLSoKVHe VwHg== X-Received: by 10.180.79.6 with SMTP id f6mr828438wix.26.1364277017937; Mon, 25 Mar 2013 22:50:17 -0700 (PDT) Original-Received: from Kagami.home (host81-159-127-244.range81-159.btcentralplus.com. [81.159.127.244]) by mx.google.com with ESMTPS id bq19sm462344wib.7.2013.03.25.22.50.15 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 25 Mar 2013 22:50:16 -0700 (PDT) In-Reply-To: <87fvzipxn7.fsf@Kagami.home> (Ian Price's message of "Tue, 26 Mar 2013 04:56:12 +0000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c03::22a X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:15992 Archived-At: --=-=-= Ian Price writes: > I don't know much about Lua, but I think I could do the following. > 1. Fix the lua-lexer failure. > 2. Disable or fix[1] the variable-arguments functionality. > 3. Rebase or merge with modern stable or master > 4. Fix the errors that arise as a result of 3. I have patches for 1 & 2. -- Ian Price -- shift-reset.com "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled" --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Fix-typo-in-lua-lexer-test.patch Content-Description: typo patch >From de139a394dbf4984b6006646a2bd648a1257a01b Mon Sep 17 00:00:00 2001 From: Ian Price Date: Tue, 26 Mar 2013 03:52:40 +0000 Subject: [PATCH 1/2] Fix typo in lua lexer test. * test-suite/tests/lua-lexer.test ("lua-lexer"): #:vararg -> #:varargs --- test-suite/tests/lua-lexer.test | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/test-suite/tests/lua-lexer.test b/test-suite/tests/lua-lexer.test index 51e9efa..7b916be 100644 --- a/test-suite/tests/lua-lexer.test +++ b/test-suite/tests/lua-lexer.test @@ -62,7 +62,7 @@ comment]]")) (test "name" 'name) (test "return" #:return) (test ".." #:concat) - (test "..." #:vararg) + (test "..." #:varargs) (test ";" #\;) (test "-" #\-) (test "+" #\+) -- 1.7.7.6 --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0002-Compile-Lua-s-.-form.patch Content-Description: compile patch >From beb958de895fccd5f81ce2064050ef624a409104 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Tue, 26 Mar 2013 05:41:32 +0000 Subject: [PATCH 2/2] Compile Lua's ... form. * module/language/lua/compile-tree-il.scm (compile): Add clause for ast-variable-arguments. * module/language/lua/parser.scm (define-ast, make-parser): Add vararg-gensym field to functions, gensym field to variable-arguments. Propagate *vararg-gensym* from functions to variable-arguments. * test-suite/tests/lua-eval-2.test ("lua-eval"): Check for #nil --- module/language/lua/compile-tree-il.scm | 11 ++++++++--- module/language/lua/parser.scm | 15 +++++++++++---- test-suite/tests/lua-eval-2.test | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/module/language/lua/compile-tree-il.scm b/module/language/lua/compile-tree-il.scm index 48c1a58..72c0d1b 100644 --- a/module/language/lua/compile-tree-il.scm +++ b/module/language/lua/compile-tree-il.scm @@ -156,7 +156,7 @@ dropped silently" src (make-primitive-ref src 'return/values) (if (list? exp) (map-compile exp #t) (list (compile exp)))))) - ((ast-function src name arguments argument-gensyms variable-arguments? body) + ((ast-function src name arguments argument-gensyms variable-arguments? vararg-gensym body) ;; ... is always attached because lua functions must ignore ;; variable arguments; the parser will catch it if ... is used in a ;; function that doesn't have ... in the parameter list @@ -165,7 +165,7 @@ dropped silently" src meta (make-lambda-case src '() arguments '... #f (map (lambda (x) (make-const src #nil)) arguments) - (append argument-gensyms (list (gensym "..."))) + (append argument-gensyms (list vararg-gensym)) (compile body) #f)))) @@ -476,7 +476,12 @@ dropped silently" (make-lexical-ref src 'and-tmp tmp) right (make-lexical-ref src 'and-tmp tmp))))) - (else (error #:COMPILE "unknown binary operator" operator))))))) + (else (error #:COMPILE "unknown binary operator" operator))))) + ((ast-variable-arguments src gensym) + (make-application src + (make-primitive-ref src 'apply) + (list (make-primitive-ref src 'values) + (make-lexical-ref src '... gensym)))))) ;; exported compiler function (define (compile-tree-il exp env opts) diff --git a/module/language/lua/parser.scm b/module/language/lua/parser.scm index dbe73f6..2ee81ce 100644 --- a/module/language/lua/parser.scm +++ b/module/language/lua/parser.scm @@ -106,10 +106,10 @@ (numeric-for-loop named initial limit step body) (list-for-loop names gs-names exps body) (break) - (function name arguments argument-gensyms variable-arguments? body) + (function name arguments argument-gensyms variable-arguments? vararg-gensym body) (function-call operator operands) (binary-operation operator left right) - (variable-arguments)) + (variable-arguments gensym)) ) ; letrec-syntax @@ -219,6 +219,9 @@ ;; True if inside a function and the function accepts variable arguments (define *vararg-function* #f) + ;; refers to the gensym for '...' in a function that accepts variable arguments + (define *vararg-gensym* #f) + ;;;;; ENVIRONMENTS (define (enter-environment!) "Create a new environment, and set ENVIRONMENT to it" @@ -482,8 +485,10 @@ (enforce-next! #\() ;; parameter-list (receive (parameters variable-arguments?) (parameter-list name) - (let* ((old-vararg-function *vararg-function*)) + (let* ((old-vararg-function *vararg-function*) + (old-vararg-gensym *vararg-gensym*)) (set! *vararg-function* variable-arguments?) + (set! *vararg-gensym* (and variable-arguments? (gensym "..."))) (enforce-next! #\)) ;; create function (enter-environment!) @@ -504,11 +509,13 @@ (list (environment-lookup-gensym 'self))) parameter-gensyms) variable-arguments? + *vararg-gensym* (if (null? body) *void-literal* body)))) (leave-environment!) ;; END (enforce-next! #:end) (set! *vararg-function* old-vararg-function) + (set! *vararg-gensym* old-vararg-gensym) result)))) ;; expression-list -> expression { ',' expression } @@ -535,7 +542,7 @@ ((#:varargs) (unless *vararg-function* (syntax-error src "cannot use '...' outside of a variable arguments function")) - (advance! (make-ast-variable-arguments src))) + (advance! (make-ast-variable-arguments src *vararg-gensym*))) ;; FUNCTION function-body ((#:function) (advance!) (function-body src)) ;; primary-expression diff --git a/test-suite/tests/lua-eval-2.test b/test-suite/tests/lua-eval-2.test index 0787a3f..e07e827 100644 --- a/test-suite/tests/lua-eval-2.test +++ b/test-suite/tests/lua-eval-2.test @@ -99,7 +99,7 @@ (test "print \"hello world\"; return true") ;; variable arguments - (test "function test(...) print(...) end test(1,2)") + (test "function test(...) print(...) end return test(1,2)" #nil) ;; numeric for loop (test "for x = 1,2,1 do print(true) end return true") -- 1.7.7.6 --=-=-=--