55
66using namespace std ;
77
8- vector<Operation> Generator::codegen (Node* node)
8+ void Generator::gen (Node* node)
99{
1010 switch (node->kind ){
1111 case ND_NUM:
1212 operations.push_back ( Operation{ OP_PUSH, node->val } );
1313 break ;
1414
1515 case ND_ADD:
16- codegen (node->left );
17- codegen (node->right );
16+ gen (node->left );
17+ gen (node->right );
1818
1919 operations.push_back ( Operation{ OP_POP, REG_GR0 } );
2020 operations.push_back ( Operation{ OP_POP, REG_GR1 } );
@@ -23,8 +23,8 @@ vector<Operation> Generator::codegen(Node* node)
2323 break ;
2424
2525 case ND_SUB:
26- codegen (node->left );
27- codegen (node->right );
26+ gen (node->left );
27+ gen (node->right );
2828
2929 operations.push_back ( Operation{ OP_POP, REG_GR0 } );
3030 operations.push_back ( Operation{ OP_POP, REG_GR1 } );
@@ -33,8 +33,8 @@ vector<Operation> Generator::codegen(Node* node)
3333 break ;
3434
3535 case ND_MUL:
36- codegen (node->left );
37- codegen (node->right );
36+ gen (node->left );
37+ gen (node->right );
3838
3939 operations.push_back ( Operation{ OP_POP, REG_GR0 } );
4040 operations.push_back ( Operation{ OP_POP, REG_GR1 } );
@@ -43,8 +43,8 @@ vector<Operation> Generator::codegen(Node* node)
4343 break ;
4444
4545 case ND_DIV:
46- codegen (node->left );
47- codegen (node->right );
46+ gen (node->left );
47+ gen (node->right );
4848
4949 operations.push_back ( Operation{ OP_POP, REG_GR0 } );
5050 operations.push_back ( Operation{ OP_POP, REG_GR1 } );
@@ -55,6 +55,16 @@ vector<Operation> Generator::codegen(Node* node)
5555 default :
5656 break ;
5757 }
58+ };
59+
60+ vector<Operation> Generator::codegen (vector<Node*> &nodes)
61+ {
62+ vector<Node*>::iterator node;
63+
64+ for (node = nodes.begin (); node != nodes.end (); node++){
65+ gen (*node);
66+ operations.push_back ( Operation{ OP_POP, REG_GR0 } );
67+ }
5868
5969 return operations;
6070};
0 commit comments