std::string AbstractExpression::debug() const { std::ostringstream buffer; //buffer << "Expression[" << expressionutil::getTypeName(getExpressionType()) << "]"; buffer << "Expression[" << expressionToString(getExpressionType()) << ", " << getExpressionType() << "]"; return (buffer.str()); }
boost::optional<VariableDecl> Builder::buildVariableDecl(const cst::VariableDecl& vd, SharedScope scope) { if (!vd.value) { logger_->log(error::Message::uninitializedVariable(vd.name.position, vd.name.value)); return boost::none; } boost::optional<Expression> expr = buildExpression(*vd.value, scope); if (!expr) return boost::none; VariableDecl decl(variableFactory_->createVariable(vd.name, getExpressionType(*expr)), *expr); scope->addVariable(decl.var()); return decl; }
Expression *Expression::readExpression(Scanner& scanner) { if (!scanner.hasMoreTokens()) return NULL; string lookahead = scanner.nextToken(); scanner.saveToken(lookahead); ExpressionType type = getExpressionType(lookahead); switch (type) { case Boolean: return new BooleanExpression(scanner); case Rational: return new RationalExpression(scanner); case String: return new StringExpression(scanner); case Symbol: return new SymbolExpression(scanner); case List: return new ListExpression(scanner); default: Error("Expression type not supported."); } // never gets here, but compilers aren't always smart enough to figure that out return NULL; }
std::string SubqueryExpression::debugInfo(const std::string &spacer) const { std::ostringstream buffer; buffer << spacer << expressionToString(getExpressionType()) << ": subqueryId: " << m_subqueryId; return (buffer.str()); }