ExpOperation* ExpEvaluator::popOne(ObjList& stack) { ExpOperation* o = 0; for (;;) { o = static_cast<ExpOperation*>(stack.get()); if (o || !stack.next()) break; // non-terminal NULL - remove the list entry stack.remove(); } if (o && o->barrier()) { XDebug(DebugInfo,"Not popping barrier %u: '%s'='%s'",o->opcode(),o->name().c_str(),o->c_str()); return 0; } stack.remove(o,false); #ifdef DEBUG #ifdef XDEBUG Debug(DebugAll,"popOne: %p%s%s",o, (YOBJECT(ExpFunction,o) ? " function" : ""), (YOBJECT(ExpWrapper,o) ? " wrapper" : "")); #else Debug(DebugAll,"popOne: %p",o); #endif #endif return o; }
bool ExpEvaluator::runAssign(ObjList& stack, const ExpOperation& oper, GenObject* context) const { DDebug(this,DebugAll,"runAssign('%s'='%s',%p) ext=%p", oper.name().c_str(),oper.c_str(),context,(void*)m_extender); return m_extender && m_extender->runAssign(stack,oper,context); }