Author: leo
Date: Wed Aug  3 02:39:30 2005
New Revision: 8771

Added:
   branches/leo-ctx5/languages/lazy-k/cat.lazy   (props changed)
      - copied unchanged from r8770, trunk/languages/lazy-k/cat.lazy
Modified:
   branches/leo-ctx5/MANIFEST
   branches/leo-ctx5/PLATFORMS
   branches/leo-ctx5/dynclasses/pyboolean.pmc
   branches/leo-ctx5/dynclasses/pystring.pmc
   branches/leo-ctx5/languages/lazy-k/lazy.pir
   branches/leo-ctx5/languages/tcl/tcl.pl
Log:
merge -r8764:8770 from trunk

Modified: branches/leo-ctx5/MANIFEST
==============================================================================
--- branches/leo-ctx5/MANIFEST  (original)
+++ branches/leo-ctx5/MANIFEST  Wed Aug  3 02:39:30 2005
@@ -1028,6 +1028,7 @@ languages/jako/t/assign.jako            
 languages/jako/t/data_decl.jako                   [jako]
 languages/lazy-k/README                           [lazy-k]
 languages/lazy-k/calc.lazy                        [lazy-k]
+languages/lazy-k/cat.lazy                         [lazy-k]
 languages/lazy-k/lazy.pir                         [lazy-k]
 languages/lazy-k/powers2.lazy                     [lazy-k]
 languages/lazy-k/test.sh                          [lazy-k]

Modified: branches/leo-ctx5/PLATFORMS
==============================================================================
--- branches/leo-ctx5/PLATFORMS (original)
+++ branches/leo-ctx5/PLATFORMS Wed Aug  3 02:39:30 2005
@@ -35,7 +35,7 @@ win32-bcc
 win32-cygwin_1.5.11_1        Y    Y    -     Y*5 Y   Y    Y        20041006
 win32-icl_8.0.48             -    Y    -     -   -   Y    Y/2
 win32-mingw-gcc3.2.3         Y    Y    Y     -   -   Y    Y/81  Y  20050603
-win32-msvc_7.1               -    Y    -     -   -   Y    Y/77     20050701
+win32-msvc_7.1               -    Y    -     -   -   Y    Y        20050802
 
 -   ... no
 Y   ... yes

Modified: branches/leo-ctx5/dynclasses/pyboolean.pmc
==============================================================================
--- branches/leo-ctx5/dynclasses/pyboolean.pmc  (original)
+++ branches/leo-ctx5/dynclasses/pyboolean.pmc  Wed Aug  3 02:39:30 2005
@@ -159,6 +159,18 @@ Returns the negated value of the boolean
 
 /*
 
+=item C<void set_bool (INTVAL value)>
+
+=cut
+
+*/
+
+    void set_bool (INTVAL value) {
+        PMC_int_val(SELF) = (value != 0);
+    }
+
+/*
+
 =item C<void set_integer_native (INTVAL value)>
 
 =cut

Modified: branches/leo-ctx5/dynclasses/pystring.pmc
==============================================================================
--- branches/leo-ctx5/dynclasses/pystring.pmc   (original)
+++ branches/leo-ctx5/dynclasses/pystring.pmc   Wed Aug  3 02:39:30 2005
@@ -304,7 +304,7 @@ Returns pythons string repr (w/o any esc
             i_q = -1;
         }
 
-        if (PObj_get_FLAGS(s) & PObj_private7_FLAG)
+        if (s->charset == Parrot_binary_charset_ptr)
             repr = string_copy(INTERP, const_string(INTERP, "u'"));
         else
             repr = string_copy(INTERP, q);

Modified: branches/leo-ctx5/languages/lazy-k/lazy.pir
==============================================================================
--- branches/leo-ctx5/languages/lazy-k/lazy.pir (original)
+++ branches/leo-ctx5/languages/lazy-k/lazy.pir Wed Aug  3 02:39:30 2005
@@ -23,11 +23,27 @@ And a lot of comments in the source - so
 
 =cut
 
+
 .sub _main @MAIN
     .param pmc argv
     .local int argc
     .local pmc in
+
+    # define constants for he various kinds of expressions
+    .globalconst int expA   =  1
+    .globalconst int expI   =  2
+    .globalconst int expI1  =  3
+    .globalconst int expK   =  4
+    .globalconst int expK1  =  5
+    .globalconst int expS   =  6
+    .globalconst int expS1  =  7
+    .globalconst int expS2  =  8
+    .globalconst int expLR  =  9
+    .globalconst int expInc = 10
+    .globalconst int expNum = 11
+
     argc = argv
+    # TODO -e, chained arguments
     if argc > 1 goto open_file
     in = getstdin
     goto run
@@ -42,7 +58,7 @@ open_file:
     exit 1
 run:
     .local pmc prog, e
-    $P0 = getinterp
+
     create_globals()
     e = global "I"
     prog = parse(in)
@@ -51,10 +67,13 @@ run:
 
     .local pmc lr, NUL
     null NUL
-    lr = new_expr('LR', NUL, NUL)
+    lr = new_expr(expLR, NUL, NUL)
     e = new_apply(e, lr)
     ## deparse_e(e)
     ## trace 15
+
+    # convert results from a list of church numbers to 8-bit chars
+    # cchar >= 256 means exit = ccchar - 256
 loop:
     $P0 = car(e)
     $I0 = church2int($P0)
@@ -67,13 +86,14 @@ put:
     goto loop
 .end
 
+# append expressions so that they are run in sequence
 .sub compose
     .param pmc f
     .param pmc g
     .local pmc k1f,  NUL
     null NUL
-    k1f = new_expr('K1', f, NUL)
-    .return  new_expr('S2', k1f, g)
+    k1f = new_expr(expK1, f, NUL)
+    .return  new_expr(expS2, k1f, g)
 .end
 
 .sub append
@@ -82,6 +102,8 @@ put:
     .return compose(n, old)
 .end
 
+# convert expression (which sould be a churn numeral to a native int
+# this is done by evaluating lambda (n) (Inc n 0)
 .sub church2int
     .param pmc church
 
@@ -99,6 +121,7 @@ err:
     exit 3
 .end
 
+# get head of list
 .sub car
     .param pmc list
     .local pmc k
@@ -106,6 +129,7 @@ err:
     .return new_apply(list, k)
 .end
 
+# get tail of list
 .sub cdr
     .param pmc list
     .local pmc ki
@@ -113,32 +137,34 @@ err:
     .return new_apply(list, ki)
 .end
 
+# create globals for commonly used expressions and
+# initialize the first 2 church numerals
 .sub create_globals
     .local pmc e, NUL, K, S, KS, I, KI
     null NUL
-    K = new_expr('K', NUL, NUL)
+    K = new_expr(expK, NUL, NUL)
     global "K" = K
-    S = new_expr('S', NUL, NUL)
+    S = new_expr(expS, NUL, NUL)
     global "S" = S
-    I = new_expr('I', NUL, NUL)
+    I = new_expr(expI, NUL, NUL)
     global "I" = I
-    KI = new_expr('K1', I, NUL)
+    KI = new_expr(expK1, I, NUL)
     global "KI" = KI
-    e = new_expr('S1', I, NUL)
+    e = new_expr(expS1, I, NUL)
     global "SI" = e
-    KS = new_expr('K1', S, NUL)
+    KS = new_expr(expK1, S, NUL)
     global "KS" = KS
-    e = new_expr('K1', K, NUL)
+    e = new_expr(expK1, K, NUL)
     global "KK" = e
-    e = new_expr('S2', KS, K)
+    e = new_expr(expS2, KS, K)
     global "SKSK" = e
-    e = new_expr('S2', I, KS)
+    e = new_expr(expS2, I, KS)
     global "SIKS" = e
 
-    e = new_expr('Inc', NUL, NUL)
+    e = new_expr(expInc, NUL, NUL)
     global "Inc" = e
     $P0 = new .Integer
-    e = new_expr('Num', $P0, NUL)
+    e = new_expr(expNum, $P0, NUL)
     global "Zero" = e
 
     .local pmc cache
@@ -150,8 +176,9 @@ err:
 
 .end
 
+# create a new expression of the given type
 .sub new_expr
-    .param string type
+    .param int type
     .param pmc lhs
     .param pmc rhs
     .local pmc expr
@@ -163,12 +190,15 @@ err:
     .return (expr)
 .end
 
+# create a new apply expr
 .sub new_apply
     .param pmc lhs
     .param pmc rhs
-    .return new_expr('A', lhs, rhs)
+    .return new_expr(expA, lhs, rhs)
 .end
 
+# parse from an IO handle
+# only 'ski currently
 .sub parse
     .param pmc io
 
@@ -195,7 +225,6 @@ not_k:
     unless ch == 's' goto not_s
        .return (S)
 not_s:
-not_e:
     unless ch == '#' goto not_comment
     swallow:
        ch = read io, 1
@@ -212,20 +241,25 @@ not_comment:
     exit 1
 .end
 
+# apply identy which just returns it's rhs
+# this can be done in a loop, if we have a sequence of I1
 .sub drop_i1
     .param pmc expr
-    .local pmc type
-    .local string ts
+    .local int type
 loop:
     type = expr[0]
-    ts = type
-    if ts != 'I1' goto ret_e
+    if type != expI1 goto ret_e
        expr = expr[1]
     goto loop
 ret_e:
     .return (expr)
 .end
 
+# convert a native int to a church numeral expression
+# the first 2 are pregenerated, the next ones are created
+# recursively by prepending ``s``s`ksk
+# we could of course create short sequences with multiplication
+# and powers of n
 .sub int2church
     .param int i
 
@@ -243,19 +277,19 @@ ok:
        sksk = global "SKSK"
        $I0 = i - 1
        cm1 = int2church($I0)
-       e = new_expr('S2', sksk, cm1)
+       e = new_expr(expS2, sksk, cm1)
        cached[i] = e
 ret:
     .return (e)
 .end
 
+# return native integer of a Num expression or -1 on error
 .sub to_number
     .param pmc expr
-    .local pmc type, arg1
-    .local string ts
+    .local pmc arg1
+    .local int type
     type = expr[0]
-    ts = type
-    if ts != 'Num' goto ret1
+    if type != expNum goto ret1
     $P0 = expr[1]
     $I0 = $P0
     .return ($I0)
@@ -263,52 +297,53 @@ ret1:
     .return (-1)
 .end
 
+# apply (f g)
+# this works inplace using the fact of referential integrity of Lazy-k
 .sub apply
     .param pmc expr
 
-    .local pmc type, lhs, rhs, arg1, arg2, NUL
-    .local string ts
+    .local pmc lhs, rhs, arg1, arg2, NUL
+    .local int type
     arg1 = expr[1]
     arg2 = expr[2]
     lhs = arg1
     rhs = drop_i1(arg2)
     null NUL
     type = lhs[0]
-    ts = type
-    unless ts == 'K' goto not_k
-       expr[0] = 'K1'
+    unless type == expK goto not_k
+       expr[0] = expK1
        expr[1] = rhs
        expr[2] = NUL
        .return()
 not_k:
-    unless ts == 'K1' goto not_k1
-       expr[0] = 'I1'
+    unless type == expK1 goto not_k1
+       expr[0] = expI1
        $P0 = lhs[1]
        expr[1] = $P0
        expr[2] = NUL
        .return()
 not_k1:
-    unless ts == 'I' goto not_i
-       expr[0] = 'I1'
+    unless type == expI goto not_i
+       expr[0] = expI1
        expr[1] = rhs
        expr[2] = NUL
        .return()
 not_i:
-    unless ts == 'S' goto not_s
-       expr[0] = 'S1'
+    unless type == expS goto not_s
+       expr[0] = expS1
        expr[1] = rhs
        expr[2] = NUL
        .return()
 not_s:
-    unless ts == 'S1' goto not_s1
-       expr[0] = 'S2'
+    unless type == expS1 goto not_s1
+       expr[0] = expS2
        $P0 = lhs[1]
        expr[1] = $P0
        expr[2] = rhs
        .return()
 not_s1:
-    unless ts == 'LR' goto not_lr
-       lhs[0] = 'S2'
+    unless type == expLR goto not_lr
+       lhs[0] = expS2
        .local pmc cc, k1c, s2ik1, i, io
        .local string s
        io = getstdin
@@ -320,17 +355,17 @@ not_s1:
     eof:
        cc = int2church($I0)
        i = global "I"
-       k1c = new_expr('K1', cc, NUL)
-       s2ik1 = new_expr('S2', i, k1c)
+       k1c = new_expr(expK1, cc, NUL)
+       s2ik1 = new_expr(expS2, i, k1c)
        lhs[1] = s2ik1
-       $P0 = new_expr('LR', NUL, NUL)
-       $P1 = new_expr('K1', $P0)
+       $P0 = new_expr(expLR, NUL, NUL)
+       $P1 = new_expr(expK1, $P0)
        lhs[2] = $P1
        goto s2
 not_lr:
-    unless ts == 'S2' goto not_s2
+    unless type == expS2 goto not_s2
 s2:
-       ## expr[0] = 'A'
+       ## expr[0] = expA
        $P0 = lhs[1]
        $P1     = new_apply( $P0, rhs)
        expr[1] = $P1
@@ -339,7 +374,7 @@ s2:
        expr[2] = $P2
        .return()
 not_s2:
-    unless ts == 'Inc' goto not_inc
+    unless type == expInc goto not_inc
        rhs = eval(rhs)
        $I0 = to_number(rhs)
        inc $I0
@@ -349,29 +384,63 @@ not_s2:
 num_ok:
        $P0 = new Integer
        $P0 = $I0
-       expr[0] = 'Num'
+       expr[0] = expNum
        expr[1] = $P0
        expr[2] = NUL
        .return()
 not_inc:
-    unless ts == 'Num' goto not_num
+    unless type == expNum goto not_num
        printerr "invalid apply of number\n"
        exit 1
 not_num:
     printerr "unknown expression: '"
-    printerr ts
+    printerr type
     printerr "'\n"
     exit 1
     .return()
 .end
 
+# evaluate expression
+# this works inplace using the fact of referential integrity of Lazy-k
+.sub eval
+    .param pmc expr
+    .local pmc cur, arg1, next, prev, NUL
+    .local int type
+    ##deparse_e(expr)
+    cur = expr
+    null prev
+    null NUL
+loop:
+    cur = drop_i1(cur)
+lpa:
+    type = cur[0]
+    if type != expA goto not_a
+       next = cur[1]
+       next = drop_i1(next)
+       cur[1] = prev
+       prev = cur
+       cur = next
+       goto lpa
+not_a:
+    unless_null prev, isnt_nul
+       .return (cur)
+isnt_nul:
+    next = cur
+    cur = prev
+    prev = cur[1]
+    cur[1] = next
+    apply(cur)
+    goto loop
+    .return (NUL)
+.end
+
+# debug helper - print string rep of expr
 .sub deparse
     .param pmc expr
-    .local pmc type, arg1, arg2
-    .local string ts
+    .local pmc arg1, arg2
+    .local int type
     type = expr[0]
-    ts = type
-    unless ts == 'A' goto not_a
+    unless type == expA goto not_a
        print "("
        arg1 = expr[1]
        deparse(arg1)
@@ -381,33 +450,33 @@ not_num:
        print ")"
        .return()
 not_a:
-    unless ts == 'K' goto not_k
+    unless type == expK goto not_k
        print "K"
        .return()
 not_k:
-    unless ts == 'I' goto not_i
+    unless type == expI goto not_i
        print "I"
        .return()
 not_i:
-    unless ts == 'K1' goto not_k1
+    unless type == expK1 goto not_k1
        print "[K"
        arg1 = expr[1]
        deparse(arg1)
        print "]"
        .return()
 not_k1:
-    unless ts == 'I1' goto not_i1
+    unless type == expI1 goto not_i1
        print "[I"
        arg1 = expr[1]
        deparse(arg1)
        print "]"
        .return()
 not_i1:
-    unless ts == 'S' goto not_s
+    unless type == expS goto not_s
        print "S"
        .return()
 not_s:
-    unless ts == 'S1' goto not_s1
+    unless type == expS1 goto not_s1
        print "[S"
        arg1 = expr[1]
        deparse(arg1)
@@ -415,7 +484,7 @@ not_s:
        .return()
 
 not_s1:
-    unless ts == 'S2' goto not_s2
+    unless type == expS2 goto not_s2
        print "[s"
        arg1 = expr[1]
        deparse(arg1)
@@ -425,64 +494,32 @@ not_s1:
        print "]"
        .return()
 not_s2:
-    unless ts == 'LR' goto not_lr
+    unless type == expLR goto not_lr
        print "R"
        .return()
 not_lr:
-    unless ts == 'Inc' goto not_inc
+    unless type == expInc goto not_inc
        print "I"
        .return()
 not_inc:
-    unless ts == 'Num' goto not_num
+    unless type == expNum goto not_num
        $I0 = expr[1]
        print $I0
        .return()
 not_num:
     printerr "unknown expression: '"
-    printerr ts
+    printerr type
     printerr "'\n"
     exit 1
     .return()
 .end
 
+# debug print string rep of expr
 .sub deparse_e
     .param pmc expr
     deparse(expr)
     print "\n"
 .end
 
-.sub eval
-    .param pmc expr
-    .local pmc cur, arg1, type, next, prev, NUL
-    .local string ts
-    ##deparse_e(expr)
-    cur = expr
-    null prev
-    null NUL
-loop:
-    cur = drop_i1(cur)
-lpa:
-    type = cur[0]
-    ts = type
-    if ts != 'A' goto not_a
-       next = cur[1]
-       next = drop_i1(next)
-       cur[1] = prev
-       prev = cur
-       cur = next
-       goto lpa
-not_a:
-    unless_null prev, isnt_nul
-       .return (cur)
-isnt_nul:
-    next = cur
-    cur = prev
-    prev = cur[1]
-    cur[1] = next
-    apply(cur)
-    goto loop
-    .return (NUL)
-.end
-
 .include "library/dumper.imc"
 # vim: ft=imc sw=4:

Modified: branches/leo-ctx5/languages/tcl/tcl.pl
==============================================================================
--- branches/leo-ctx5/languages/tcl/tcl.pl      (original)
+++ branches/leo-ctx5/languages/tcl/tcl.pl      Wed Aug  3 02:39:30 2005
@@ -58,19 +58,18 @@ $rules = <<'EOH';
 .sub "_load_grammar"
   .local pmc p6rule_compile
   p6rule_compile = find_global "PGE", "p6rule"
-  
-  .local string grammar 
+
+  .local string grammar
   grammar = "_Tcl_Rules" #xxx should probably not hardcode this.
 EOH
 
 my $rule = join("",<RULES>);
 $rule =~ s/\n//g;
 
-$rule =~ s/\#rule\s+(\w+)\s*{(.*?)};//g;
-
-while ($rule =~ m/rule\s+(\w+)\s*{(.*?)};/g) {
+while ($rule =~ m/rule\s+(\w+)\s*{\s*(.*?)\s*};?/g) {
   my $rule_name = $1;
   my $rule_def = $2;
+  $rule_def =~ s:\s+: :g;    # remove extra whitespace
   $rule_def =~ s:\\:\\\\:g;
   $rule_def =~ s:":\\":g;
 

Reply via email to