|
|
@ -91,12 +91,18 @@ Expression::Expression (const Expression &rhs) |
|
|
op = rhs.op; |
|
|
op = rhs.op; |
|
|
arg0 = NULL; |
|
|
arg0 = NULL; |
|
|
arg1 = NULL; |
|
|
arg1 = NULL; |
|
|
|
|
|
v = Value (rhs.v); |
|
|
if (rhs.arg0) |
|
|
if (rhs.arg0) |
|
|
arg0 = rhs.arg0->copy (); |
|
|
{ |
|
|
|
|
|
arg0 = rhs.arg0->copy (); |
|
|
|
|
|
if (v.next) |
|
|
|
|
|
{ |
|
|
|
|
|
assert (arg0 && v.next == &(rhs.arg0->v)); |
|
|
|
|
|
v.next = &(arg0->v); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
if (rhs.arg1) |
|
|
if (rhs.arg1) |
|
|
arg1 = rhs.arg1->copy (); |
|
|
arg1 = rhs.arg1->copy (); |
|
|
v = Value (rhs.v); |
|
|
|
|
|
fixupValues (); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Expression::Expression (const Expression *rhs) |
|
|
Expression::Expression (const Expression *rhs) |
|
|
@ -114,12 +120,18 @@ Expression::copy (const Expression *rhs) |
|
|
delete arg1; |
|
|
delete arg1; |
|
|
arg0 = NULL; |
|
|
arg0 = NULL; |
|
|
arg1 = NULL; |
|
|
arg1 = NULL; |
|
|
|
|
|
v = Value (rhs->v); |
|
|
if (rhs->arg0) |
|
|
if (rhs->arg0) |
|
|
arg0 = rhs->arg0->copy (); |
|
|
{ |
|
|
|
|
|
arg0 = rhs->arg0->copy (); |
|
|
|
|
|
if (v.next) |
|
|
|
|
|
{ |
|
|
|
|
|
assert (arg0 && v.next == &(rhs->arg0->v)); |
|
|
|
|
|
v.next = &(arg0->v); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
if (rhs->arg1) |
|
|
if (rhs->arg1) |
|
|
arg1 = rhs->arg1->copy (); |
|
|
arg1 = rhs->arg1->copy (); |
|
|
v = Value (rhs->v); |
|
|
|
|
|
fixupValues (); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Expression & |
|
|
Expression & |
|
|
@ -131,16 +143,6 @@ Expression::operator= (const Expression &rhs) |
|
|
return *this; |
|
|
return *this; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
Expression::fixupValues () |
|
|
|
|
|
{ |
|
|
|
|
|
if (v.next) |
|
|
|
|
|
{ |
|
|
|
|
|
assert (arg0 && v.next == &(arg0->v)); |
|
|
|
|
|
v.next = &(arg0->v); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool |
|
|
bool |
|
|
Expression::getVal (int propId, Context *ctx) |
|
|
Expression::getVal (int propId, Context *ctx) |
|
|
{ |
|
|
{ |
|
|
|