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