diff options
Diffstat (limited to 'c_compiler/src')
-rw-r--r-- | c_compiler/src/c_lexer.flex | 4 | ||||
-rw-r--r-- | c_compiler/src/c_parser.y | 34 | ||||
-rw-r--r-- | c_compiler/src/compiler_main.cpp | 6 | ||||
-rw-r--r-- | c_compiler/src/declaration.cpp | 8 | ||||
-rw-r--r-- | c_compiler/src/expression.cpp | 97 | ||||
-rw-r--r-- | c_compiler/src/function.cpp | 7 | ||||
-rw-r--r-- | c_compiler/src/statement.cpp | 24 | ||||
-rw-r--r-- | c_compiler/src/translation_unit.cpp | 4 | ||||
-rw-r--r-- | c_compiler/src/type.cpp | 2 |
9 files changed, 103 insertions, 83 deletions
diff --git a/c_compiler/src/c_lexer.flex b/c_compiler/src/c_lexer.flex index 716e1ac..6f0262e 100644 --- a/c_compiler/src/c_lexer.flex +++ b/c_compiler/src/c_lexer.flex @@ -55,8 +55,8 @@ ALL . [|] { return T_OR; } [\^] { return T_XOR; } [&] { return T_AND; } -[=][=] { return T_EQUALITY_OP; } -[!][=] { return T_EQUALITY_OP; } +[=][=] { yylval.string = new std::string(yytext); return T_EQUALITY_OP; } +[!][=] { yylval.string = new std::string(yytext); return T_EQUALITY_OP; } ([<>][=])|[<>] { return T_REL_OP; } [<>][<>] { return T_SHIFT_OP; } [*] { yylval.string = new std::string(yytext); return T_MULT; } diff --git a/c_compiler/src/c_parser.y b/c_compiler/src/c_parser.y index 1ee7966..3342f2a 100644 --- a/c_compiler/src/c_parser.y +++ b/c_compiler/src/c_parser.y @@ -71,7 +71,7 @@ void yyerror(const char *); %type <number> T_INT_CONST %type <string> T_IDENTIFIER ASSIGN_OPER T_ASSIGN_OPER T_EQ T_AND T_ADDSUB_OP T_TILDE T_NOT - T_MULT T_DIV T_REM MultDivRemOP UnaryOperator + T_MULT T_DIV T_REM T_EQUALITY_OP MultDivRemOP UnaryOperator %start ROOT @@ -96,8 +96,8 @@ ExternalDeclaration: // FUNCTION DEFINITION FunctionDefinition: - DeclarationSpec Declarator CompoundStatement { - $$ = new Function($2->getId(), $3, $2->getNext()); } + DeclarationSpec Declarator CompoundStatement + { $$ = new Function($2->getId(), $3, $2->getNext()); } ; ParameterList: @@ -225,56 +225,60 @@ ASSIGN_OPER: T_ASSIGN_OPER { ; } ConditionalExpression: LogicalOrExpression { $$ = $1; } - | LogicalOrExpression T_QU Expression T_COL ConditionalExpression { $$ = $1; } + | LogicalOrExpression T_QU Expression T_COL ConditionalExpression + { $$ = new ConditionalExpression($1, $3, $5); } ; LogicalOrExpression: LogicalAndExpression { $$ = $1; } - | LogicalOrExpression T_LOG_OR LogicalAndExpression { $$ = $3; } + | LogicalOrExpression T_LOG_OR LogicalAndExpression { $$ = new LogicalOrExpression($1, $3); } ; LogicalAndExpression: InclusiveOrExpression { $$ = $1; } - | LogicalAndExpression T_LOG_AND InclusiveOrExpression { $$ = $3; } + | LogicalAndExpression T_LOG_AND InclusiveOrExpression { $$ = new LogicalAndExpression($1, $3); } ; InclusiveOrExpression: ExclusiveOrExpression { $$ = $1; } - | InclusiveOrExpression T_OR ExclusiveOrExpression { $$ = $3; } + | InclusiveOrExpression T_OR ExclusiveOrExpression { $$ = new InclusiveOrExpression($1, $3); } ; ExclusiveOrExpression: AndExpression { $$ = $1; } - | ExclusiveOrExpression T_XOR AndExpression { $$ = $3; } + | ExclusiveOrExpression T_XOR AndExpression { $$ = new ExclusiveOrExpression($1, $3); } ; AndExpression: EqualityExpression { $$ = $1; } - | AndExpression T_AND EqualityExpression { $$ = $3; } + | AndExpression T_AND EqualityExpression { $$ = new AndExpression($1, $3); } ; EqualityExpression: RelationalExpression { $$ = $1; } - | EqualityExpression T_EQUALITY_OP RelationalExpression { $$ = $3; } + | EqualityExpression T_EQUALITY_OP RelationalExpression + { $$ = new EqualityExpression($1, *$2, $3); delete $2; } ; RelationalExpression: ShiftExpression { $$ = $1; } - | RelationalExpression T_REL_OP ShiftExpression { $$ = $3; } + | RelationalExpression T_REL_OP ShiftExpression { $$ = new RelationalExpression($1, $3); } ; ShiftExpression: AdditiveExpression { $$ = $1; } - | ShiftExpression T_SHIFT_OP AdditiveExpression { $$ = $3; } + | ShiftExpression T_SHIFT_OP AdditiveExpression { $$ = new ShiftExpression($1, $3); } ; AdditiveExpression: MultiplicativeExpression { $$ = $1; } - | AdditiveExpression T_ADDSUB_OP MultiplicativeExpression { $$ = new AdditiveExpression($1, *$2, $3); delete $2; } + | AdditiveExpression T_ADDSUB_OP MultiplicativeExpression + { $$ = new AdditiveExpression($1, *$2, $3); delete $2; } ; MultiplicativeExpression: CastExpression { $$ = $1; } - | MultiplicativeExpression MultDivRemOP CastExpression { $$ = new MultiplicativeExpression($1, *$2, $3); delete $2; } + | MultiplicativeExpression MultDivRemOP CastExpression + { $$ = new MultiplicativeExpression($1, *$2, $3); delete $2; } ; MultDivRemOP: T_MULT { $$ = $1; } @@ -283,7 +287,7 @@ MultDivRemOP: T_MULT { $$ = $1; } ; CastExpression: UnaryExpression { $$ = $1; } - | T_LRB DeclarationSpec T_RRB CastExpression { $$ = $4; } + | T_LRB DeclarationSpec T_RRB CastExpression { $$ = new CastExpression($2, $4); } ; UnaryExpression: diff --git a/c_compiler/src/compiler_main.cpp b/c_compiler/src/compiler_main.cpp index 0805de3..15276dd 100644 --- a/c_compiler/src/compiler_main.cpp +++ b/c_compiler/src/compiler_main.cpp @@ -7,11 +7,13 @@ Node* parseAST(); int main(int argc, char *argv[]) { + (void)argc, (void)argv; std::unique_ptr<Node> ast(parseAST()); VariableStackBindings bindings; + unsigned label_count = 0; - ast->printAsm(bindings); - + ast->printAsm(bindings, label_count); + return 0; } diff --git a/c_compiler/src/declaration.cpp b/c_compiler/src/declaration.cpp index 353b470..b25ece4 100644 --- a/c_compiler/src/declaration.cpp +++ b/c_compiler/src/declaration.cpp @@ -34,7 +34,7 @@ void Declaration::printXml() const std::cout << "<Variable id=\""<< id_ << "\" />" << std::endl; } -VariableStackBindings Declaration::printAsm(VariableStackBindings bindings) const +VariableStackBindings Declaration::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // if(init == nullptr) // std::cout << "\t.comm\t" << id << ",4,4" << std::endl; @@ -46,14 +46,14 @@ VariableStackBindings Declaration::printAsm(VariableStackBindings bindings) cons // return bindings; if(next_declaration_ != nullptr) - bindings = next_declaration_->printAsm(bindings); + bindings = next_declaration_->printAsm(bindings, label_count); if(next_list_declaration_ != nullptr) - bindings = next_list_declaration_->printAsm(bindings); + bindings = next_list_declaration_->printAsm(bindings, label_count); if(id_ != "") { if(initializer_ != nullptr) - initializer_->printAsm(bindings); + initializer_->printAsm(bindings, label_count); else std::cout << "\tmove\t$2,$0" << std::endl; diff --git a/c_compiler/src/expression.cpp b/c_compiler/src/expression.cpp index 55ecb54..43230c6 100644 --- a/c_compiler/src/expression.cpp +++ b/c_compiler/src/expression.cpp @@ -62,9 +62,8 @@ OperationExpression::OperationExpression(Expression* lhs, Expression* rhs) PostfixExpression::PostfixExpression() {} -VariableStackBindings PostfixExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings PostfixExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { - return bindings; } @@ -74,7 +73,7 @@ VariableStackBindings PostfixExpression::printAsm(VariableStackBindings bindings PostfixArrayElement::PostfixArrayElement() {} -VariableStackBindings PostfixArrayElement::printAsm(VariableStackBindings bindings) const +VariableStackBindings PostfixArrayElement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -86,7 +85,7 @@ PostfixFunctionCall::PostfixFunctionCall(Expression* argument_expression_list) : argument_expression_list_(argument_expression_list) {} -VariableStackBindings PostfixFunctionCall::printAsm(VariableStackBindings bindings) const +VariableStackBindings PostfixFunctionCall::printAsm(VariableStackBindings bindings, unsigned& label_count) const { std::vector<ExpressionPtr> argument_vector; ExpressionPtr current_argument = argument_expression_list_; @@ -98,7 +97,7 @@ VariableStackBindings PostfixFunctionCall::printAsm(VariableStackBindings bindin } for(auto itr = argument_vector.rbegin(); itr != argument_vector.rend(); ++itr) { - (*itr)->printAsm(bindings); + (*itr)->printAsm(bindings, label_count); if(argument_counter < 4) std::cout << "\tmove\t$" << 4+argument_counter << ",$2\n"; @@ -137,7 +136,7 @@ void PostfixFunctionCall::setPostfixExpression(Expression* postfix_expression) UnaryExpression::UnaryExpression() {} -VariableStackBindings UnaryExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings UnaryExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -149,7 +148,7 @@ CastExpression::CastExpression(Type* type, Expression* expression) : type_(type), expression_(expression) {} -VariableStackBindings CastExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings CastExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -157,21 +156,21 @@ VariableStackBindings CastExpression::printAsm(VariableStackBindings bindings) c // Additive Expression definition -AdditiveExpression::AdditiveExpression(Expression* lhs, const std::string& operation, Expression* rhs) - : OperationExpression(lhs, rhs), operation_(operation) +AdditiveExpression::AdditiveExpression(Expression* lhs, const std::string& _operator, Expression* rhs) + : OperationExpression(lhs, rhs), operator_(_operator) {} -VariableStackBindings AdditiveExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings AdditiveExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // I can just evaluate the lhs with the same entry stack position - lhs_->printAsm(bindings); + lhs_->printAsm(bindings, label_count); // store this stack position int lhs_stack_position = bindings.currentExpressionStackPosition(); // now have to increase the expression stack position for the rhs bindings.nextExpressionStackPosition(); - rhs_->printAsm(bindings); + rhs_->printAsm(bindings, label_count); // now I have them evaluated at two positions in the stack and can load both into registers // $2 and $3 @@ -181,12 +180,12 @@ VariableStackBindings AdditiveExpression::printAsm(VariableStackBindings binding // TODO currently using signed and sub because I only have signed numbers implemented // must update this as I add more types - if(operation_ == "+") + if(operator_ == "+") std::cout << "\tadd\t$2,$2,$3" << std::endl; - else if(operation_ == "-") + else if(operator_ == "-") std::cout << "\tsub\t$2,$2,$3" << std::endl; else - std::cerr << "Don't recognize symbol: '" << operation_ << "'" << std::endl; + std::cerr << "Don't recognize symbol: '" << operator_ << "'" << std::endl; // now I have to store it back into the original stack position std::cout << "\tsw\t$2," << lhs_stack_position << "($fp)" << std::endl; @@ -198,36 +197,36 @@ VariableStackBindings AdditiveExpression::printAsm(VariableStackBindings binding // Multiplicative Expression definition -MultiplicativeExpression::MultiplicativeExpression(Expression* lhs, const std::string& operation, Expression* rhs) - : OperationExpression(lhs, rhs), operation_(operation) +MultiplicativeExpression::MultiplicativeExpression(Expression* lhs, const std::string& _operator, Expression* rhs) + : OperationExpression(lhs, rhs), operator_(_operator) {} -VariableStackBindings MultiplicativeExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings MultiplicativeExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // I can just evaluate lhs without increasing stack count - lhs_->printAsm(bindings); + lhs_->printAsm(bindings, label_count); // store current stack position int lhs_stack_position = bindings.currentExpressionStackPosition(); // increase stack position to store next result in bindings.nextExpressionStackPosition(); - rhs_->printAsm(bindings); + rhs_->printAsm(bindings, label_count); std::cout << "\tlw\t$2," << lhs_stack_position << "($fp)" << std::endl; std::cout << "\tlw\t$3," << bindings.currentExpressionStackPosition() << "($fp)" << std::endl; // then perform the right operation - if(operation_ == "*") + if(operator_ == "*") std::cout << "\tmul\t$2,$2,$3" << std::endl; - else if(operation_ == "/" || operation_ == "%") { + else if(operator_ == "/" || operator_ == "%") { std::cout << "\tdiv\t$2,$3" << std::endl; - if(operation_ == "/") + if(operator_ == "/") std::cout << "\tmflo\t$2" << std::endl; else std::cout << "\tmfhi\t$2" << std::endl; } else - std::cerr << "Don't recognize symbol '" << operation_ << "'" << std::endl; + std::cerr << "Don't recognize symbol '" << operator_ << "'" << std::endl; // finally store result back into the stack position std::cout << "\tsw\t$2," << lhs_stack_position << "($fp)" << std::endl; @@ -242,7 +241,7 @@ ShiftExpression::ShiftExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings ShiftExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings ShiftExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -254,7 +253,7 @@ RelationalExpression::RelationalExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings RelationalExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings RelationalExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -262,12 +261,26 @@ VariableStackBindings RelationalExpression::printAsm(VariableStackBindings bindi // EqualityExpression definition -EqualityExpression::EqualityExpression(Expression* lhs, Expression* rhs) - : OperationExpression(lhs, rhs) +EqualityExpression::EqualityExpression(Expression* lhs, const std::string& _operator, Expression* rhs) + : OperationExpression(lhs, rhs), operator_(_operator) {} -VariableStackBindings EqualityExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings EqualityExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { + (void)label_count; + + // I can just evaluate lhs without increasing stack count + lhs_->printAsm(bindings, label_count); + + // store current stack position + int lhs_stack_position = bindings.currentExpressionStackPosition(); + + // increase stack position to store next result in + bindings.nextExpressionStackPosition(); + rhs_->printAsm(bindings, label_count); + + std::cout << "\txor\t$2,$2,$3\n"; + return bindings; } @@ -278,7 +291,7 @@ AndExpression::AndExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings AndExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings AndExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -290,7 +303,7 @@ ExclusiveOrExpression::ExclusiveOrExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings ExclusiveOrExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings ExclusiveOrExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -302,7 +315,7 @@ InclusiveOrExpression::InclusiveOrExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings InclusiveOrExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings InclusiveOrExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -314,7 +327,7 @@ LogicalAndExpression::LogicalAndExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings LogicalAndExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings LogicalAndExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -326,7 +339,7 @@ LogicalOrExpression::LogicalOrExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings LogicalOrExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings LogicalOrExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -341,7 +354,7 @@ ConditionalExpression::ConditionalExpression(Expression* logical_or, conditional_expression_(conditional_expression) {} -VariableStackBindings ConditionalExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings ConditionalExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -353,7 +366,7 @@ AssignmentExpression::AssignmentExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} -VariableStackBindings AssignmentExpression::printAsm(VariableStackBindings bindings) const +VariableStackBindings AssignmentExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // TODO add stack and store results in there, also for addition and multiplication. @@ -365,7 +378,7 @@ VariableStackBindings AssignmentExpression::printAsm(VariableStackBindings bindi // evaluate rhs and get the result back at the stack position I assigned // don't have to change the stack position as there is no lhs to evaluate - rhs_->printAsm(bindings); + rhs_->printAsm(bindings, label_count); // now the result of the rhs will be in that stack position, so we can load it into $2 std::cout << "\tlw\t$2," << expression_stack_position << "($fp)" << std::endl; @@ -382,11 +395,12 @@ Identifier::Identifier(const std::string& id) : id_(id) {} -VariableStackBindings Identifier::printAsm(VariableStackBindings bindings) const +VariableStackBindings Identifier::printAsm(VariableStackBindings bindings, unsigned& label_count) const { - if(bindings.bindingExists(id_)) + (void)label_count; + if(bindings.bindingExists(id_)) { std::cout << "\tlw\t$2," << bindings.stackPosition(id_) << "($fp)" << std::endl; - else + } else std::cerr << "Can't find identifier '" << id_ << "' in current scope binding" << std::endl; std::cout << "\tsw\t$2," << bindings.currentExpressionStackPosition() << "($fp)" << std::endl; @@ -415,8 +429,9 @@ Constant::Constant(const int32_t& constant) : constant_(constant) {} -VariableStackBindings Constant::printAsm(VariableStackBindings bindings) const +VariableStackBindings Constant::printAsm(VariableStackBindings bindings, unsigned& label_count) const { + (void)label_count; // constant only has to load to $2 because the other expression will take care of the rest std::cout << "\tli\t$2," << constant_ << std::endl; std::cout << "\tsw\t$2," << bindings.currentExpressionStackPosition() << "($fp)" << std::endl; diff --git a/c_compiler/src/function.cpp b/c_compiler/src/function.cpp index 6f5ba7d..c979277 100644 --- a/c_compiler/src/function.cpp +++ b/c_compiler/src/function.cpp @@ -29,8 +29,7 @@ void Function::printXml() const std::vector<std::string> parameter_vec; while(parameter != nullptr) { - if(parameter->getId() != "") - parameter_vec.push_back(parameter->getId()); + parameter_vec.push_back(parameter->getId()); parameter = parameter->getNext(); } @@ -46,7 +45,7 @@ void Function::printXml() const std::cout << "</Function>" << std::endl; } -VariableStackBindings Function::printAsm(VariableStackBindings bindings) const +VariableStackBindings Function::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // Counting all the variables being declared in the function unsigned variable_count = 0; @@ -81,7 +80,7 @@ VariableStackBindings Function::printAsm(VariableStackBindings bindings) const bindings.setStackPosition((max_argument_count+parameter_count)*4); // Prints the asm for the compound statement in the function - statement_->printAsm(bindings); + statement_->printAsm(bindings, label_count); std::cout << "0:\n\tmove\t$sp,$fp\n\tlw\t$31," << memory_needed-4 << "($sp)\n\tlw\t$fp," << memory_needed-8 << "($sp)\n\taddiu\t$sp,$sp," << memory_needed diff --git a/c_compiler/src/statement.cpp b/c_compiler/src/statement.cpp index 9c0db49..52803c1 100644 --- a/c_compiler/src/statement.cpp +++ b/c_compiler/src/statement.cpp @@ -51,18 +51,18 @@ void CompoundStatement::printXml() const std::cout << "</Scope>" << std::endl; } -VariableStackBindings CompoundStatement::printAsm(VariableStackBindings bindings) const +VariableStackBindings CompoundStatement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { VariableStackBindings outer_scope_bindings = bindings; if(next_statement_ != nullptr) - next_statement_->printAsm(bindings); + next_statement_->printAsm(bindings, label_count); if(declaration_ != nullptr) - bindings = declaration_->printAsm(bindings); + bindings = declaration_->printAsm(bindings, label_count); if(statement_ != nullptr) - statement_->printAsm(bindings); + statement_->printAsm(bindings, label_count); return outer_scope_bindings; } @@ -125,7 +125,7 @@ void SelectionStatement::printXml() const else_->printXml(); } -VariableStackBindings SelectionStatement::printAsm(VariableStackBindings bindings) const +VariableStackBindings SelectionStatement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } @@ -167,13 +167,13 @@ void ExpressionStatement::print() const void ExpressionStatement::printXml() const {} -VariableStackBindings ExpressionStatement::printAsm(VariableStackBindings bindings) const +VariableStackBindings ExpressionStatement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { if(next_statement_ != nullptr) - next_statement_->printAsm(bindings); + next_statement_->printAsm(bindings, label_count); if(expression_ != nullptr) - expression_->printAsm(bindings); + expression_->printAsm(bindings, label_count); return bindings; } @@ -214,13 +214,13 @@ void JumpStatement::printXml() const next_statement_->printXml(); } -VariableStackBindings JumpStatement::printAsm(VariableStackBindings bindings) const +VariableStackBindings JumpStatement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { if(next_statement_ != nullptr) - next_statement_->printAsm(bindings); + next_statement_->printAsm(bindings, label_count); if(expression_ != nullptr) - expression_->printAsm(bindings); + expression_->printAsm(bindings, label_count); std::cout << "\tj\t0f\n"; @@ -266,7 +266,7 @@ void IterationStatement::printXml() const statement_->printXml(); } -VariableStackBindings IterationStatement::printAsm(VariableStackBindings bindings) const +VariableStackBindings IterationStatement::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } diff --git a/c_compiler/src/translation_unit.cpp b/c_compiler/src/translation_unit.cpp index a671851..cb581d3 100644 --- a/c_compiler/src/translation_unit.cpp +++ b/c_compiler/src/translation_unit.cpp @@ -25,10 +25,10 @@ void TranslationUnit::printXml() const std::cout << "</Program>" << std::endl; } -VariableStackBindings TranslationUnit::printAsm(VariableStackBindings bindings) const +VariableStackBindings TranslationUnit::printAsm(VariableStackBindings bindings, unsigned& label_count) const { for(auto& node : translation_unit_) { - node->printAsm(bindings); + node->printAsm(bindings, label_count); } return bindings; diff --git a/c_compiler/src/type.cpp b/c_compiler/src/type.cpp index feda3a5..44c4ddb 100644 --- a/c_compiler/src/type.cpp +++ b/c_compiler/src/type.cpp @@ -13,7 +13,7 @@ void Type::print() const void Type::printXml() const {} -VariableStackBindings Type::printAsm(VariableStackBindings bindings) const +VariableStackBindings Type::printAsm(VariableStackBindings bindings, unsigned& label_count) const { return bindings; } |