stage3/constant_folding.cc
changeset 783 3bd2704d9ba9
parent 782 c8cd69801b7e
child 786 c370918ca7fb
child 787 6e2671e0f1a8
equal deleted inserted replaced
782:c8cd69801b7e 783:3bd2704d9ba9
   950 /* B 1.4 - Variables */
   950 /* B 1.4 - Variables */
   951 /*********************/
   951 /*********************/
   952 void *constant_folding_c::visit(symbolic_variable_c *symbol) {
   952 void *constant_folding_c::visit(symbolic_variable_c *symbol) {
   953 	std::string varName;
   953 	std::string varName;
   954 
   954 
   955 	varName = convert.toString(symbol->var_name);
   955 	varName = get_var_name_c::get_name(symbol->var_name)->value;
   956 	if (values.count(varName) > 0) {
   956 	if (values.count(varName) > 0) {
   957 		symbol->const_value = values[varName];
   957 		symbol->const_value = values[varName];
   958 	}
   958 	}
   959 	return NULL;
   959 	return NULL;
   960 }
   960 }
   967 
   967 
   968 	values.clear(); /* Clear global map */
   968 	values.clear(); /* Clear global map */
   969 	search_var_instance_decl_c search_var_instance_decl(symbol);
   969 	search_var_instance_decl_c search_var_instance_decl(symbol);
   970 	function_param_iterator_c fpi(symbol);
   970 	function_param_iterator_c fpi(symbol);
   971 	while((var_name = fpi.next()) != NULL) {
   971 	while((var_name = fpi.next()) != NULL) {
   972 		std::string varName = convert.toString(var_name);
   972 		std::string varName = get_var_name_c::get_name(var_name)->value;
   973 		symbol_c   *varDecl = search_var_instance_decl.get_decl(var_name);
   973 		symbol_c   *varDecl = search_var_instance_decl.get_decl(var_name);
   974 		values[varName] = varDecl->const_value;
   974 		values[varName] = varDecl->const_value;
   975 	}
   975 	}
   976 	/* Add all variables declared into Values map and put them to initial value */
   976 	/* Add all variables declared into Values map and put them to initial value */
   977 	symbol->function_block_body->accept(*this);
   977 	symbol->function_block_body->accept(*this);
  1256 void *constant_folding_c::visit(assignment_statement_c *symbol) {
  1256 void *constant_folding_c::visit(assignment_statement_c *symbol) {
  1257 	std::string varName;
  1257 	std::string varName;
  1258 
  1258 
  1259 	symbol->r_exp->accept(*this);
  1259 	symbol->r_exp->accept(*this);
  1260 	symbol->l_exp->const_value = symbol->r_exp->const_value;
  1260 	symbol->l_exp->const_value = symbol->r_exp->const_value;
  1261 	varName = convert.toString(symbol->l_exp);
  1261 	varName = get_var_name_c::get_name(symbol->l_exp)->value;
  1262 	values[varName] = symbol->l_exp->const_value;
  1262 	values[varName] = symbol->l_exp->const_value;
  1263 
  1263 
  1264 	return NULL;
  1264 	return NULL;
  1265 }
  1265 }
  1266 
  1266 
  1318 	std::string varName;
  1318 	std::string varName;
  1319 
  1319 
  1320 	values_incoming = values; /* save incoming status */
  1320 	values_incoming = values; /* save incoming status */
  1321 	symbol->beg_expression->accept(*this);
  1321 	symbol->beg_expression->accept(*this);
  1322 	symbol->end_expression->accept(*this);
  1322 	symbol->end_expression->accept(*this);
  1323 	varName = convert.toString(symbol->control_variable);
  1323 	varName =  get_var_name_c::get_name(symbol->control_variable)->value;
  1324 	values[varName] = symbol->beg_expression->const_value;
  1324 	values[varName] = symbol->beg_expression->const_value;
  1325 
  1325 
  1326 	/* Optimize dead code */
  1326 	/* Optimize dead code */
  1327 	if (VALID_CVALUE(int64, symbol->beg_expression) && VALID_CVALUE(int64, symbol->end_expression) &&
  1327 	if (VALID_CVALUE(int64, symbol->beg_expression) && VALID_CVALUE(int64, symbol->end_expression) &&
  1328 		  GET_CVALUE(int64, symbol->beg_expression) >    GET_CVALUE(int64, symbol->end_expression))
  1328 		  GET_CVALUE(int64, symbol->beg_expression) >    GET_CVALUE(int64, symbol->end_expression))