Bug fix for cloning ...
[satune.git] / src / AST / element.cc
index 62e0c4c111af9f5112ca4674c8de79e77c3c8a64..565187afc1ab5996f85be63b8a4c8a79790b2223 100644 (file)
@@ -43,7 +43,7 @@ Element *ElementSet::clone(CSolver *solver, CloneMap *map) {
        if (e != NULL)
                return e;
        e = solver->getElementVar(set->clone(solver, map));
-       map->put(e, e);
+       map->put(this, e);
        return e;
 }
 
@@ -52,7 +52,8 @@ Element *ElementFunction::clone(CSolver *solver, CloneMap *map) {
        for (uint i = 0; i < inputs.getSize(); i++) {
                array[i] = inputs.get(i)->clone(solver, map);
        }
-       Element *e = solver->applyFunction(function->clone(solver, map), array, inputs.getSize(), overflowstatus->clone(solver, map));
+       BooleanEdge ofstatus = overflowstatus ? cloneEdge(solver, map, overflowstatus) : BooleanEdge();
+       Element *e = solver->applyFunction(function->clone(solver, map), array, inputs.getSize(), ofstatus);
        return e;
 }
 
@@ -78,7 +79,7 @@ void ElementSet::serialize(Serializer *serializer) {
 }
 
 void ElementSet::print() {
-       model_print("{ElementSet:");
+       model_print("{ElementSet<%p>:", this);
        set->print();
        model_print(" %p ", this);
        getElementEncoding()->print();
@@ -101,7 +102,7 @@ void ElementConst::serialize(Serializer *serializer) {
 }
 
 void ElementConst::print() {
-       model_print("{ElementConst: %lu}\n", value);
+       model_print("{ElementConst<%p>: %" PRIu64 "}\n", this, value);
 }
 
 void ElementFunction::serialize(Serializer *serializer) {
@@ -131,8 +132,12 @@ void ElementFunction::serialize(Serializer *serializer) {
 }
 
 void ElementFunction::print() {
-       model_print("{ElementFunction:\n");
+       model_print("{ElementFunction<%p>:\n", this);
        function->print();
+       model_print("OverFlow Boolean Flag:\n");
+       overflowstatus.getBoolean()->print();
+       model_print("Range:\n");
+       getRange()->print();
        model_print("Elements:\n");
        uint size = inputs.getSize();
        for (uint i = 0; i < size; i++) {