equal
deleted
inserted
replaced
30 */ |
30 */ |
31 |
31 |
32 |
32 |
33 #define INLINE_RESULT_TEMP_VAR "__res" |
33 #define INLINE_RESULT_TEMP_VAR "__res" |
34 |
34 |
35 class generate_c_inline_c: public generate_c_typedecl_c { |
35 class generate_c_inlinefcall_c: public generate_c_typedecl_c { |
36 |
36 |
37 public: |
37 public: |
38 typedef enum { |
38 typedef enum { |
39 expression_vg, |
39 expression_vg, |
40 assignment_vg, |
40 assignment_vg, |
64 search_base_type_c search_base_type; |
64 search_base_type_c search_base_type; |
65 |
65 |
66 variablegeneration_t wanted_variablegeneration; |
66 variablegeneration_t wanted_variablegeneration; |
67 |
67 |
68 public: |
68 public: |
69 generate_c_inline_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL) |
69 generate_c_inlinefcall_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL) |
70 : generate_c_typedecl_c(s4o_ptr), |
70 : generate_c_typedecl_c(s4o_ptr), |
71 default_variable_name(IL_DEFVAR, NULL) |
71 default_variable_name(IL_DEFVAR, NULL) |
72 { |
72 { |
73 search_expression_type = new search_expression_type_c(scope); |
73 search_expression_type = new search_expression_type_c(scope); |
74 search_varfb_instance_type = new search_varfb_instance_type_c(scope); |
74 search_varfb_instance_type = new search_varfb_instance_type_c(scope); |
76 fcall_number = 0; |
76 fcall_number = 0; |
77 fbname = name; |
77 fbname = name; |
78 wanted_variablegeneration = expression_vg; |
78 wanted_variablegeneration = expression_vg; |
79 } |
79 } |
80 |
80 |
81 virtual ~generate_c_inline_c(void) { |
81 virtual ~generate_c_inlinefcall_c(void) { |
|
82 delete search_expression_type; |
82 delete search_varfb_instance_type; |
83 delete search_varfb_instance_type; |
83 } |
84 } |
84 |
85 |
85 void *generate_inline(symbol_c *function_name, |
86 void print(symbol_c* symbol) { |
86 symbol_c *return_data_type, |
87 function_call_iterator_c fc_iterator(symbol); |
87 std::list<FUNCTION_PARAM*> param_list) { |
88 symbol_c* function_call; |
88 std::list<FUNCTION_PARAM*>::iterator pt; |
89 while ((function_call = fc_iterator.next()) != NULL) { |
|
90 function_call->accept(*this); |
|
91 } |
|
92 } |
|
93 |
|
94 void generate_inline(symbol_c *function_name, |
|
95 symbol_c *return_data_type, |
|
96 std::list<FUNCTION_PARAM*> param_list) { |
|
97 std::list<FUNCTION_PARAM*>::iterator pt; |
89 |
98 |
90 fcall_number++; |
99 fcall_number++; |
91 |
100 |
92 s4o.print(s4o.indent_spaces); |
101 s4o.print(s4o.indent_spaces); |
93 s4o.print("inline "); |
102 s4o.print("inline "); |
174 s4o.print(INLINE_RESULT_TEMP_VAR); |
183 s4o.print(INLINE_RESULT_TEMP_VAR); |
175 s4o.print(";\n"); |
184 s4o.print(";\n"); |
176 |
185 |
177 s4o.indent_left(); |
186 s4o.indent_left(); |
178 s4o.print(s4o.indent_spaces + "}\n\n"); |
187 s4o.print(s4o.indent_spaces + "}\n\n"); |
179 |
|
180 return NULL; |
|
181 } |
188 } |
182 |
189 |
183 private: |
190 private: |
184 |
191 |
185 void *print_getter(symbol_c *symbol) { |
192 void *print_getter(symbol_c *symbol) { |
579 CLEAR_PARAM_LIST() |
586 CLEAR_PARAM_LIST() |
580 } |
587 } |
581 return NULL; |
588 return NULL; |
582 } |
589 } |
583 |
590 |
584 }; /* generate_c_inline_c */ |
591 }; /* generate_c_inlinefcall_c */ |
585 |
592 |
586 |
593 |
587 /***********************************************************************/ |
|
588 /***********************************************************************/ |
|
589 /***********************************************************************/ |
|
590 /***********************************************************************/ |
|
591 |
|
592 |
|
593 class generate_c_inlinefcall_c: public iterator_visitor_c { |
|
594 |
|
595 private: |
|
596 generate_c_inline_c *generate_c_inline; |
|
597 |
|
598 public: |
|
599 generate_c_inlinefcall_c(stage4out_c *s4o_ptr, symbol_c *name, symbol_c *scope, const char *variable_prefix = NULL) { |
|
600 generate_c_inline = new generate_c_inline_c(s4o_ptr, name, scope, variable_prefix); |
|
601 } |
|
602 |
|
603 virtual ~generate_c_inlinefcall_c(void) { |
|
604 delete generate_c_inline; |
|
605 } |
|
606 |
|
607 private: |
|
608 |
|
609 void *visit(function_invocation_c *symbol) { |
|
610 return symbol->accept(*generate_c_inline); |
|
611 } |
|
612 |
|
613 void *visit(il_function_call_c *symbol) { |
|
614 return symbol->accept(*generate_c_inline); |
|
615 } |
|
616 |
|
617 void *visit(il_formal_funct_call_c *symbol) { |
|
618 return symbol->accept(*generate_c_inline); |
|
619 } |
|
620 }; /* generate_c_inlinefcall_c */ |
|
621 |
|
622 |
|
623 |
|