aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src/function.cpp
blob: 420c7828fa28aad2a728df4af4ca9e29c35b3a50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "ast.hpp"

Function::Function(const std::string& _id, const BaseList* _param_list,
		   const BaseNode* _comp_statement)
    : BaseNode(_param_list, _comp_statement), id(_id) {}

void Function::printxml() const {
    std::cout << "<Function id=\"" << id << "\">" << std::endl;
    leftNode->printxml();
    rightNode->printxml();
    std::cout << "</Function>" << std::endl;
}

void Function::printasm() const {
    std::cout << id << ":\n\taddiu\t$sp,$sp,-24\n\tsw\t$fp,20($sp)\n\tmove\t$fp,$sp" << std::endl;
    rightNode->printasm();
    std::cout << "\tmove\t$sp,$fp\n\tlw\t$fp,20($sp)\n\taddiu\t$sp,$sp,24\n\tjr\t$31\n\tnop" << std::endl;
}