--- parser3/src/main/execute.C 2001/03/07 08:27:10 1.57 +++ parser3/src/main/execute.C 2001/03/07 10:35:41 1.60 @@ -1,5 +1,5 @@ /* - $Id: execute.C,v 1.57 2001/03/07 08:27:10 paf Exp $ + $Id: execute.C,v 1.60 2001/03/07 10:35:41 paf Exp $ */ #include "pa_array.h" @@ -80,6 +80,7 @@ void dump(int level, const Array& ops) { dump(level+1, *local_ops); } } + fflush(stderr); } void Request::execute(const Array& ops) { @@ -94,7 +95,7 @@ void Request::execute(const Array& ops) for(int i=0; i(operand->get_double())); + Value *value=NEW VDouble(pool(), ~static_cast(operand->get_double())); PUSH(value); break; } @@ -497,18 +497,63 @@ void Request::execute(const Array& ops) PUSH(value); break; } - case OP_STR_LT: - case OP_STR_GT: + case OP_STR_LT: + { + Value *b=POP(); + Value *a=POP(); + Value *value=NEW VBool(pool(), + a->as_string() < + b->as_string()); + PUSH(value); + break; + } + case OP_STR_GT: + { + Value *b=POP(); + Value *a=POP(); + Value *value=NEW VBool(pool(), + a->as_string() > + b->as_string()); + PUSH(value); + break; + } case OP_STR_LE: + { + Value *b=POP(); + Value *a=POP(); + Value *value=NEW VBool(pool(), + a->as_string() <= + b->as_string()); + PUSH(value); + break; + } case OP_STR_GE: - case OP_STR_EQ: - case OP_STR_NE: { Value *b=POP(); Value *a=POP(); Value *value=NEW VBool(pool(), - /*a->get_string() @ - b->get_string()*/false); + a->as_string() >= + b->as_string()); + PUSH(value); + break; + } + case OP_STR_EQ: + { + Value *b=POP(); + Value *a=POP(); + Value *value=NEW VBool(pool(), + a->as_string() == + b->as_string()); + PUSH(value); + break; + } + case OP_STR_NE: + { + Value *b=POP(); + Value *a=POP(); + Value *value=NEW VBool(pool(), + a->as_string() != + b->as_string()); PUSH(value); break; }