Changeset: c8fc927411d5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c8fc927411d5
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/mal/mal.c
        monetdb5/mal/mal_builder.c
        monetdb5/mal/mal_builder.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_type.c
Branch: int128
Log Message:

added int128 / "hge" support in monetdb5/mal/

TODO (?):

add support for parsing 128-bit integers (":hge")
in monetdb5/mal/mal_parser.c (?)


diffs (186 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2926,6 +2926,7 @@ InstrPtr pushDbl(MalBlkPtr mb, InstrPtr 
 InstrPtr pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe);
 void pushEndInstruction(MalBlkPtr mb);
 InstrPtr pushFlt(MalBlkPtr mb, InstrPtr q, flt val);
+InstrPtr pushHge(MalBlkPtr mb, InstrPtr q, hge val);
 void pushInstruction(MalBlkPtr mb, InstrPtr p);
 InstrPtr pushInt(MalBlkPtr mb, InstrPtr q, int val);
 InstrPtr pushLng(MalBlkPtr mb, InstrPtr q, lng val);
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -226,6 +226,9 @@ void tstAligned(void)
        val= (ptr) & v.val.fval; if(val != base){ allAligned = -1; }
        val= (ptr) & v.val.dval; if(val != base){ allAligned = -1; }
        val= (ptr) & v.val.lval; if(val != base){ allAligned = -1; }
+#ifdef HAVE_HGE
+       val= (ptr) & v.val.hval; if(val != base){ allAligned = -1; }
+#endif
        val= (ptr) & v.val.sval; if(val != base){ allAligned = -1; }
        if(allAligned<0)
            GDKfatal("Recompile with STRUCT_ALIGNED flag disabled\n");
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -246,6 +246,20 @@ pushLng(MalBlkPtr mb, InstrPtr q, lng va
        return pushArgument(mb, q, _t);
 }
 
+#ifdef HAVE_HGE
+InstrPtr
+pushHge(MalBlkPtr mb, InstrPtr q, hge val)
+{
+       int _t;
+       ValRecord cst;
+
+       cst.vtype= TYPE_hge;
+       cst.val.hval= val;
+       _t = defConstant(mb,TYPE_hge,&cst);
+       return pushArgument(mb, q, _t);
+}
+#endif
+
 InstrPtr
 pushDbl(MalBlkPtr mb, InstrPtr q, dbl val)
 {
diff --git a/monetdb5/mal/mal_builder.h b/monetdb5/mal/mal_builder.h
--- a/monetdb5/mal/mal_builder.h
+++ b/monetdb5/mal/mal_builder.h
@@ -42,6 +42,9 @@ mal_export InstrPtr pushBte(MalBlkPtr mb
 mal_export InstrPtr pushOid(MalBlkPtr mb, InstrPtr q, oid val);
 mal_export InstrPtr pushVoid(MalBlkPtr mb, InstrPtr q);
 mal_export InstrPtr pushLng(MalBlkPtr mb, InstrPtr q, lng val);
+#ifdef HAVE_HGE
+mal_export InstrPtr pushHge(MalBlkPtr mb, InstrPtr q, hge val);
+#endif
 mal_export InstrPtr pushDbl(MalBlkPtr mb, InstrPtr q, dbl val);
 mal_export InstrPtr pushFlt(MalBlkPtr mb, InstrPtr q, flt val);
 mal_export InstrPtr pushStr(MalBlkPtr mb, InstrPtr q, const char *val);
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -1321,6 +1321,9 @@ convertConstant(int type, ValPtr vr)
        case TYPE_dbl:
        case TYPE_wrd:
        case TYPE_lng:
+#ifdef HAVE_HGE
+       case TYPE_hge:
+#endif
                VALconvert(type, vr);
                if (vr->vtype != type)
                        throw(SYNTAX, "convertConstant", "coercion failed");
@@ -1884,6 +1887,12 @@ varGetPropStr(MalBlkPtr mb, int var)
 
                        ATOMformat(v->type, VALptr(&v->value), &t);
                        switch (v->type) {
+#ifdef HAVE_HGE
+                       case TYPE_hge:
+                               assert(0);
+                               sprintf(s, "%s%s%s:hge", nme, op, t);
+                               break;
+#endif
                        case TYPE_oid:
                                sprintf(s, "%s%s%s:oid", nme, op, t);
                                break;
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -59,6 +59,9 @@ ptr getArgReference(MalStkPtr stk, Instr
        case TYPE_flt: ret = (ptr) & v->val.fval; break;
        case TYPE_dbl: ret = (ptr) & v->val.dval; break;
        case TYPE_lng: ret = (ptr) & v->val.lval; break;
+#ifdef HAVE_HGE
+       case TYPE_hge: ret = (ptr) & v->val.hval; break;
+#endif
        case TYPE_str: ret = (ptr) & v->val.sval; break;
        default:
                ret = (ptr) & v->val.pval;
@@ -954,6 +957,12 @@ str runMALsequence(Client cntxt, MalBlkP
                                if (v->val.lval == lng_nil)
                                        stkpc = pci->jump;
                                break;
+#ifdef HAVE_HGE
+                       case TYPE_hge:
+                               if (v->val.hval == hge_nil)
+                                       stkpc = pci->jump;
+                               break;
+#endif
                        case TYPE_flt:
                                if (v->val.fval == flt_nil)
                                        stkpc = pci->jump;
@@ -1026,6 +1035,14 @@ str runMALsequence(Client cntxt, MalBlkP
                                else
                                        stkpc++;
                                break;
+#ifdef HAVE_HGE
+                       case TYPE_hge:
+                               if (v->val.hval != hge_nil)
+                                       stkpc = pci->jump;
+                               else
+                                       stkpc++;
+                               break;
+#endif
                        case TYPE_flt:
                                if (v->val.fval != flt_nil)
                                        stkpc = pci->jump;
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -517,6 +517,9 @@ cstToken(Client cntxt, ValPtr cst)
                        return i;
                }
                if (*s == 'L') {
+#ifdef HAVE_HGE
+                       assert(cst->vtype != TYPE_hge);
+#endif
                        if (cst->vtype == TYPE_int)
                                cst->vtype = TYPE_lng;
                        if (cst->vtype == TYPE_flt)
@@ -549,6 +552,9 @@ cstToken(Client cntxt, ValPtr cst)
                        return i;
                }
 handleInts:
+#ifdef HAVE_HGE
+               assert(cst->vtype != TYPE_hge);
+#endif
                if (cst->vtype == TYPE_int || cst->vtype == TYPE_lng) {
                        int len = (int) sizeof(lng);
                        lng *pval = &l;
diff --git a/monetdb5/mal/mal_type.c b/monetdb5/mal/mal_type.c
--- a/monetdb5/mal/mal_type.c
+++ b/monetdb5/mal/mal_type.c
@@ -159,6 +159,12 @@ getTypeIndex(str nme, int len, int defty
                        if (qt("lng"))
                                return TYPE_lng;
                        break;
+#ifdef HAVE_HGE
+               case 'h':
+                       if (qt("hge"))
+                               return TYPE_hge;
+                       break;
+#endif
                case 'o':
                        if (qt("oid"))
                                return TYPE_oid;
@@ -196,7 +202,7 @@ getTypeIndex(str nme, int len, int defty
 /*
  * @-
  * Literal constants are not necessarily type specific, e.g.
- * the value '0' could represent bte,sht,wrd,int,lng.
+ * the value '0' could represent bte,sht,wrd,int,lng,hge.
  * If the value is potentially ambiguous, it should
  * be made type specific in listings
  */
@@ -204,6 +210,9 @@ int
 isAmbiguousType(int type){
        switch(type){
                case TYPE_bte: case TYPE_sht: case TYPE_wrd: case TYPE_int: 
case TYPE_lng:
+#ifdef HAVE_HGE
+               case TYPE_hge:
+#endif
                return type != TYPE_int;
                case TYPE_flt: case TYPE_dbl:
                return type != TYPE_flt;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to