# 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?

Reply via email to