stage3/constant_folding.cc
changeset 981 aad6aa35ce60
parent 974 a47c2df5ae3d
child 982 760b26477193
equal deleted inserted replaced
980:9ed5aff159db 981:aad6aa35ce60
   986 }
   986 }
   987 
   987 
   988 /*********************/
   988 /*********************/
   989 /* B 1.4 - Variables */
   989 /* B 1.4 - Variables */
   990 /*********************/
   990 /*********************/
   991 // #if DO_CONSTANT_PROPAGATION__
   991 #if DO_CONSTANT_PROPAGATION__
   992 void *constant_folding_c::visit(symbolic_variable_c *symbol) {
   992 void *constant_folding_c::visit(symbolic_variable_c *symbol) {
   993 	std::string varName = get_var_name_c::get_name(symbol->var_name)->value;
   993 	std::string varName = get_var_name_c::get_name(symbol->var_name)->value;
   994 	if (values.count(varName) > 0) 
   994 	if (values.count(varName) > 0) 
   995 		symbol->const_value = values[varName];
   995 		symbol->const_value = values[varName];
   996 	return NULL;
   996 	return NULL;
   997 }
   997 }
   998 // #endif  // DO_CONSTANT_PROPAGATION__
   998 #endif  // DO_CONSTANT_PROPAGATION__
   999 
   999 
  1000 void *constant_folding_c::visit(symbolic_constant_c *symbol) {
  1000 void *constant_folding_c::visit(symbolic_constant_c *symbol) {
  1001 	std::string varName = get_var_name_c::get_name(symbol->var_name)->value;
  1001 	std::string varName = get_var_name_c::get_name(symbol->var_name)->value;
  1002 	if (values.count(varName) > 0) 
  1002 	if (values.count(varName) > 0) 
  1003 		symbol->const_value = values[varName];
  1003 		symbol->const_value = values[varName];
  1709 /* TODO: handle function invocations... */
  1709 /* TODO: handle function invocations... */
  1710 // void *fill_candidate_datatypes_c::visit(function_invocation_c *symbol) {}
  1710 // void *fill_candidate_datatypes_c::visit(function_invocation_c *symbol) {}
  1711 
  1711 
  1712 
  1712 
  1713 
  1713 
       
  1714 #if DO_CONSTANT_PROPAGATION__
  1714 /*********************************/
  1715 /*********************************/
  1715 /* B 3.2.1 Assignment Statements */
  1716 /* B 3.2.1 Assignment Statements */
  1716 /*********************************/
  1717 /*********************************/
  1717 void *constant_folding_c::visit(assignment_statement_c *symbol) {
  1718 void *constant_folding_c::visit(assignment_statement_c *symbol) {
  1718 	std::string varName;
  1719 	std::string varName;
  1722 	symbol->l_exp->const_value = symbol->r_exp->const_value;
  1723 	symbol->l_exp->const_value = symbol->r_exp->const_value;
  1723 	values[get_var_name_c::get_name(symbol->l_exp)->value] = symbol->l_exp->const_value;
  1724 	values[get_var_name_c::get_name(symbol->l_exp)->value] = symbol->l_exp->const_value;
  1724 	return NULL;
  1725 	return NULL;
  1725 }
  1726 }
  1726 
  1727 
  1727 #if DO_CONSTANT_PROPAGATION__
       
  1728 /********************************/
  1728 /********************************/
  1729 /* B 3.2.3 Selection Statements */
  1729 /* B 3.2.3 Selection Statements */
  1730 /********************************/
  1730 /********************************/
  1731 void *constant_folding_c::visit(if_statement_c *symbol) {
  1731 void *constant_folding_c::visit(if_statement_c *symbol) {
  1732 	map_values_t values_incoming;
  1732 	map_values_t values_incoming;