# New Ticket Created by Andreas Rottmann # Please include the string: [perl #52662] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=52662 >
The attached patch implements the BEGIN Scheme syntax.
Implement BEGIN From: Andreas Rottmann <[EMAIL PROTECTED]> --- MANIFEST | 2 ++ languages/eclectus/compiler.scm | 8 ++++++++ languages/eclectus/t/begin.pl | 3 +++ languages/eclectus/t/begin.t | 12 ++++++++++++ 4 files changed, 25 insertions(+), 0 deletions(-) create mode 100644 languages/eclectus/t/begin.pl create mode 100644 languages/eclectus/t/begin.t diff --git a/MANIFEST b/MANIFEST index b029f4f..5a50f1f 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1312,6 +1312,8 @@ languages/eclectus/src/pmc/eclectusfixnum.pmc [eclectus] languages/eclectus/src/pmc/eclectuspair.pmc [eclectus] languages/eclectus/src/pmc/eclectusstring.pmc [eclectus] languages/eclectus/src/pmc/eclectusvector.pmc [eclectus] +languages/eclectus/t/begin.pl [eclectus] +languages/eclectus/t/begin.t [eclectus] languages/eclectus/t/binary_primitives.pl [eclectus] languages/eclectus/t/binary_primitives.t [eclectus] languages/eclectus/t/booleans.pl [eclectus] diff --git a/languages/eclectus/compiler.scm b/languages/eclectus/compiler.scm index 0ca9778..db7a069 100644 --- a/languages/eclectus/compiler.scm +++ b/languages/eclectus/compiler.scm @@ -145,6 +145,9 @@ (define lambda? (make-combination-predicate 'lambda)) +(define begin? + (make-combination-predicate 'begin)) + (define if-test (lambda (form) (car (cdr form)))) @@ -452,6 +455,10 @@ (emit-expr stmt)) (cddr x)))))) +(define emit-begin + (lambda (x) + (past::stmts (map emit-expr (cdr x))))) + ; emir PIR for an expression (define emit-expr (lambda (x) @@ -460,6 +467,7 @@ ((atom? x) (emit-atom x)) ((let? x) (emit-let (bindings x) (body x))) ((if? x) (emit-if x)) + ((begin? x) (emit-begin x)) ((lambda? x) (emit-lambda x)) ((primcall? x) (emit-primcall x)) (else (emit-functional-application x))))) diff --git a/languages/eclectus/t/begin.pl b/languages/eclectus/t/begin.pl new file mode 100644 index 0000000..8969ec0 --- /dev/null +++ b/languages/eclectus/t/begin.pl @@ -0,0 +1,3 @@ +#!/usr/bin/env perl + +do 'eclectus/test-wrapper.pl'; diff --git a/languages/eclectus/t/begin.t b/languages/eclectus/t/begin.t new file mode 100644 index 0000000..7984fd8 --- /dev/null +++ b/languages/eclectus/t/begin.t @@ -0,0 +1,12 @@ +; $Id$ + +(load "tests-driver.scm") ; this should come first + +(add-tests-with-string-output "begin" + ((begin) => "\n") + ((begin 42) => "42\n") + ((begin 1 2 3) => "3\n") +) + +(load "compiler.scm") +(test-all)
Regards, Rotty -- Andreas Rottmann | [EMAIL PROTECTED] | [EMAIL PROTECTED] | [EMAIL PROTECTED] http://rotty.uttx.net | GnuPG Key: http://rotty.uttx.net/gpg.asc Fingerprint | C38A 39C5 16D7 B69F 33A3 6993 22C8 27F7 35A9 92E7 v2sw7MYChw5pr5OFma7u7Lw2m5g/l7Di6e6t5BSb7en6g3/5HZa2Xs6MSr1/2p7 hackerkey.com A. Because it breaks the logical sequence of discussion Q. Why is top posting bad?