Update of /cvsroot/monetdb/pathfinder/compiler/mil
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv20105/compiler/mil

Modified Files:
      Tag: PF_ROX
        mil.c milgen.brg milprint.c 
Log Message:
propagated changes of Monday May 19 2008 - Thursday May 22 2008
from the development trunk to the PF_ROX branch



U milprint.c
Index: milprint.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint.c,v
retrieving revision 1.62.2.6
retrieving revision 1.62.2.7
diff -u -d -r1.62.2.6 -r1.62.2.7
--- milprint.c  8 May 2008 07:45:30 -0000       1.62.2.6
+++ milprint.c  22 May 2008 08:48:39 -0000      1.62.2.7
@@ -117,6 +117,7 @@
                  | '[-](' expression ')'                    <m_mneg>
                  | 'isnil(' expression ')'                  <m_isnil>
                  | '[isnil](' expression ')'                <m_misnil>
+                 | 'and(' expression ',' expression ')'     <m_and>
                  | '[and](' expression ',' expression ')'   <m_mand>
                  | '[or](' expression ',' expression ')'    <m_mor>
                  | '[ifthenelse](' exp ',' exp ',' exp ')'  <m_ifthenelse>
@@ -170,6 +171,7 @@
                  | 'ws_docname('exp','exp','exp','exp')'   <m_ws_docname>
                  | 'ws_collections('exp','exp')'           <m_ws_collections>
                  | 'ws_docavailable('exp','exp')'          <m_ws_docavailable>
+                 | 'ws_findnodes('e','e','e','e','e','e','e')' <m_ws_findnodes>
 
    args          : args ',' args                            <m_arg>
                  | expression                               <otherwise>
@@ -301,6 +303,7 @@
     , [m_not]          = "not"
     , [m_mnot]         = "[not]"
     , [m_mneg]         = "[-]"
+    , [m_and]          = "and"
     , [m_mand]         = "[and]"
     , [m_mor]          = "[or]"
     , [m_mifthenelse]  = "[ifthenelse]"
@@ -340,6 +343,7 @@
     , [m_ws_docname]         = "ws_docname"
     , [m_ws_collections]     = "ws_collections"
     , [m_ws_docavailable]    = "ws_docavailable"
+    , [m_ws_findnodes]       = "ws_findnodes"
 
     , [m_merge_adjacent]   = "merge_adjacent_text_nodes"
     , [m_string_join]      = "string_join"
@@ -842,6 +846,8 @@
         case m_mle:
         /* expression : '[!=](' expression ',' expression ')' */
         case m_mne:
+        /* expression : 'and(' expression ',' expression ')' */
+        case m_and:
         /* expression : '[and](' expression ',' expression ')' */
         case m_mand:
         /* expression : '[or](' expression ',' expression ')' */
@@ -1039,6 +1045,26 @@
             milprintf (")");
             break;
 
+        /* expression : 'ws_findnodes (' e ',' e ',' e ',' e ','
+                                        e ',' e ',' e ')' */
+        case m_ws_findnodes:
+            milprintf ("%s (", ID[n->kind]);
+            print_expression (n->child[0]);
+            milprintf (", ");
+            print_expression (n->child[1]);
+            milprintf (", ");
+            print_expression (n->child[2]);
+            milprintf (", ");
+            print_expression (n->child[3]);
+            milprintf (", ");
+            print_expression (n->child[4]);
+            milprintf (", ");
+            print_expression (n->child[5]);
+            milprintf (", ");
+            print_expression (n->child[6]);
+            milprintf (", ");
+            break;
+
         /* expression : 'htordered_unique_thetajoin (' exp ',' exp ','
                                                        exp ', nil, nil)' */
         case m_unq2_tjoin:

U mil.c
Index: mil.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/mil.c,v
retrieving revision 1.49.2.9
retrieving revision 1.49.2.10
diff -u -d -r1.49.2.9 -r1.49.2.10
--- mil.c       8 May 2008 07:45:27 -0000       1.49.2.9
+++ mil.c       22 May 2008 08:48:35 -0000      1.49.2.10
@@ -1319,6 +1319,15 @@
 }
 
 /**
+ * Boolean operator `and'
+ */
+PFmil_t *
+PFmil_and (const PFmil_t *a, const PFmil_t *b)
+{
+    return wire2 (m_and, a, b);
+}
+
+/**
  * Multiplexed boolean operator `and'
  */
 PFmil_t *
@@ -1770,6 +1779,15 @@
     return wire2 (m_ws_docavailable, a, b);
 }
 
+/** function ws_findnodes(a,b,c,d,e,f,g) */
+PFmil_t *
+PFmil_ws_findnodes (const PFmil_t *a, const PFmil_t *b, const PFmil_t *c,
+                    const PFmil_t *d, const PFmil_t *e, const PFmil_t *f,
+                    const PFmil_t *g)
+{
+    return wire7 (m_ws_findnodes, a, b, c, d, e, f, g);
+}
+
 #ifdef HAVE_PFTIJAH
 
 PFmil_t *

U milgen.brg
Index: milgen.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milgen.brg,v
retrieving revision 1.103.2.13
retrieving revision 1.103.2.14
diff -u -d -r1.103.2.13 -r1.103.2.14
--- milgen.brg  14 May 2008 20:10:05 -0000      1.103.2.13
+++ milgen.brg  22 May 2008 08:48:35 -0000      1.103.2.14
@@ -174,6 +174,8 @@
 %term type           =  63
 %term type_assert    =  64
 %term cast           =  65
+%term seqty1         =  66
+%term all            =  67
 %term llscjoin       = 100
 %term doc_tbl        = 120
 %term doc_access     = 121
@@ -254,8 +256,10 @@
 Rel:      type (Rel)                                               =  76 (10);
 Rel:      type_assert (Rel)                                        =  77 (10);
 Rel:      cast (Rel)                                               =  78 (10);
+Rel:      seqty1 (Rel)                                             =  79 (10);
+Rel:      all (Rel)                                                =  80 (10);
 
-Rel:      llscjoin (Rel)                                           =  80 (10);
+Rel:      llscjoin (Rel)                                           =  90 (10);
 Rel:      doc_tbl (Rel)                                            = 100 (10);
 Rel:      doc_access (Rel)                                         = 101 (10);
 Rel:      twig (Twig)                                              = 102 (10);
@@ -5774,7 +5778,7 @@
                 type = mnot (misnil (VAR (L(p)->env, att, aat_qname_id)));
             else
                 /* we have one simple type */
-                type = not (misnil (VAR (L(p)->env, att, req_ty)));
+                type = mnot (misnil (VAR (L(p)->env, att, req_ty)));
 
             execute (assgn (var (res->name), type));
         }   break; /* fold) */
@@ -6050,8 +6054,133 @@
                         "cast to polymorphic type not allowed.");
         }   break; /* fold) */
 
-        /* Rel:      llscjoin (Rel) */
+        /* Rel:      seqty1 (Rel) */
+        case 79: /* fold( */
+        {
+             PFalg_att_t         part    = p->sem.aggr.part,
+                                 att     = p->sem.aggr.att,
+                                 res     = p->sem.aggr.res;
+             PFalg_simple_type_t part_ty;
+
+             assert (type_of (L(p), att) == aat_bln &&
+                     type_of (p, res) == aat_bln);
+
+             if (part != att_NULL) {
+                 mvar_t *v    = new_var (1);
+                 mvar_t *res_var  = new_var (p->refctr);
+                 mvar_t *part_var = new_var (p->refctr);
+
+                 part_ty = type_of (L(p), part);
+
+                 execute (
+                      /* v :=
+                         (att.reverse().join(part).reverse()) */
+                      assgn (var (v->name),
+                             reverse (
+                                 join (reverse (VAR (L(p)->env, att, aat_bln)),
+                                       VAR (L(p)->env, part, part_ty)))),
+                      /* v := [and]([=](1,{sum}(v)),[=](1,{count}(v))); */
+                      assgn (var (v->name),
+                             PFmil_mand (
+                                 meq (lit_int (1),
+                                      PFmil_gsum (mcast (type (mty_int),
+                                                         var (v->name)))),
+                                 meq (lit_int (1), gcount (var (v->name))))),
+                      /* res := v.reverse ().mark ([EMAIL PROTECTED]).reverse 
(); */
+                      assgn (var (res_var->name),
+                             reverse (mark (reverse (var (v->name)), lit_oid 
(0)))),
+                      /* part := v.mark ([EMAIL PROTECTED]).reverse (); */
+                      assgn (var (part_var->name),
+                             reverse (mark (var (v->name), lit_oid (0)))));
+
+                 env_add (p->env, res, aat_bln, res_var);
+                 env_add (p->env, part, part_ty, part_var);
+
+                 unpin (v, 1);
+             }
+             else {
+                  mvar_t *v = new_var (p->refctr);
+                  execute (
+                      assgn (var (v->name), VAR (L(p)->env, att, aat_bln)),
+                      assgn (var (v->name),
+                             PFmil_and (
+                                 eq (lit_int (1),
+                                     PFmil_sum (mcast (type (mty_int),
+                                                       var (v->name)))),
+                                 eq (lit_int (1), count (var (v->name))))),
+                      assgn (var (v->name),
+                             append (
+                                  seqbase (
+                                       new (type (mty_void), implty (aat_bln)),
+                                       lit_oid (0)),
+                                  var (v->name))));
+                  env_add (p->env, res, aat_bln, v);
+             }
+        }    break; /* fold) */
+
+        /* Rel:      all (Rel) */
         case 80: /* fold( */
+        {
+             PFalg_att_t         part    = p->sem.aggr.part,
+                                 att     = p->sem.aggr.att,
+                                 res     = p->sem.aggr.res;
+             PFalg_simple_type_t part_ty;
+
+             assert (type_of (L(p), att) == aat_bln &&
+                     type_of (p, res) == aat_bln);
+
+             if (part != att_NULL) {
+                 mvar_t *v    = new_var (1);
+                 mvar_t *res_var  = new_var (p->refctr);
+                 mvar_t *part_var = new_var (p->refctr);
+
+                 part_ty = type_of (L(p), part);
+
+                 execute (
+                      /* v :=
+                         (att.reverse().join(part).reverse()) */
+                      assgn (var (v->name),
+                             reverse (
+                                 join (reverse (VAR (L(p)->env, att, aat_bln)),
+                                       VAR (L(p)->env, part, part_ty)))),
+                      /* v := [=]({sum}(v),{count}(v)); */
+                      assgn (var (v->name),
+                             meq (PFmil_gsum (mcast (type (mty_int),
+                                                     var (v->name))),
+                                  gcount (var (v->name)))),
+                      /* res := v.reverse ().mark ([EMAIL PROTECTED]).reverse 
(); */
+                      assgn (var (res_var->name),
+                             reverse (mark (reverse (var (v->name)),
+                                            lit_oid (0)))),
+                      /* part := v.mark ([EMAIL PROTECTED]).reverse (); */
+                      assgn (var (part_var->name),
+                             reverse (mark (var (v->name), lit_oid (0)))));
+
+                 env_add (p->env, res, aat_bln, res_var);
+                 env_add (p->env, part, part_ty, part_var);
+
+                 unpin (v, 1);
+             }
+             else {
+                  mvar_t *v = new_var (p->refctr);
+                  execute (
+                      assgn (var (v->name), VAR (L(p)->env, att, aat_bln)),
+                      assgn (var (v->name),
+                             eq (PFmil_sum (mcast (type (mty_int),
+                                                   var (v->name))),
+                                 count (var (v->name)))),
+                      assgn (var (v->name),
+                             append (
+                                  seqbase (
+                                       new (type (mty_void), implty (aat_bln)),
+                                       lit_oid (0)),
+                                  var (v->name))));
+                  env_add (p->env, res, aat_bln, v);
+             }
+        }    break; /* fold) */
+            
+        /* Rel:      llscjoin (Rel) */
+        case 90: /* fold( */
             llscj (p);
             break; /* fold) */
 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to