00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "comma/ast/Expr.h"
00010 #include "comma/ast/Stmt.h"
00011 #include <iostream>
00012
00013 using namespace comma;
00014
00015
00016
00017 ProcedureCallStmt::ProcedureCallStmt(ProcedureDecl *connective,
00018 Expr **args,
00019 unsigned numArgs,
00020 Location loc)
00021 : Stmt(AST_ProcedureCallStmt),
00022 connective(connective),
00023 arguments(0),
00024 numArgs(numArgs),
00025 location(loc)
00026 {
00027 if (numArgs) {
00028 arguments = new Expr*[numArgs];
00029 std::copy(args, args + numArgs, arguments);
00030 }
00031 }
00032
00033 ProcedureCallStmt::~ProcedureCallStmt()
00034 {
00035 if (arguments) delete[] arguments;
00036 }
00037
00038
00039
00040 ReturnStmt::~ReturnStmt()
00041 {
00042 if (returnExpr) delete returnExpr;
00043 }
00044
00045
00046
00047 void IfStmt::dump(unsigned depth)
00048 {
00049 dumpSpaces(depth++);
00050 std::cerr << '<' << getKindString()
00051 << ' ' << std::hex << uintptr_t(this) << '\n';
00052
00053 condition->dump(depth);
00054 std::cerr << '\n';
00055 consequent->dump(depth);
00056
00057 iterator endIter = endElsif();
00058 for (iterator iter = beginElsif(); iter != endIter; ++iter) {
00059 Elsif &elsif = *iter;
00060 std::cerr << '\n';
00061 dumpSpaces(depth);
00062 std::cerr << "elsif:\n";
00063 elsif.getCondition()->dump(depth + 1);
00064
00065 std::cerr << '\n';
00066 elsif.getConsequent()->dump(depth + 1);
00067 }
00068
00069 if (hasAlternate()) {
00070 std::cerr << '\n';
00071 alternate->dump(depth);
00072 }
00073 std::cerr << '>';
00074 }