/// Initialize the Repository to a clean slate. int ACE_Service_Repository::open (size_t size) { ACE_TRACE ("ACE_Service_Repository::open"); // Create a new array and swap it with the local array array_type local_array (size); this->service_array_.swap (local_array); return 0; }
void local_define(int start)//局部变量定义,变量,数组,结构体 { char op[expr_size],fuc1[expr_size],fuc2[expr_size]; int i=0; num_p=0; num_v=0; char v1[expr_size],v2[expr_size]; int t1,t2,reg1,reg2; for(i=start;i<num_inst;i++) { sscanf(inst[i],"%s %s %s",op,fuc1,fuc2); if(strcmp(op,"ret")==0) break; if(judge_two_op(op))//双操作数,其中也可能包含变量,需要检测是否有局部变量 { t1=get_op(fuc1,v1,reg1); t2=get_op(fuc2,v2,reg2); if(t1==3) { if(reg1>0) { param_place[num_p]=reg1; strcpy(param_name[num_p++],v1); } else strcpy(var_name[num_v++],v1); } if(t2==3) { if(reg2>0) { param_place[num_p]=reg1; strcpy(param_name[num_p++],v2); } else strcpy(var_name[num_v++],v2); } } else if(strcmp(op,"neg")==0||strcmp(op,"var")==0||strcmp(op,"param")==0||strcmp(op,"write")==0)//单操作数,其中可能包含变量,需要检测 { t1=get_op(fuc1,v1,reg1); if(t1==3) { if(reg1>0) { param_place[num_p]=reg1; strcpy(param_name[num_p++],v1); } else strcpy(var_name[num_v++],v1); } if(strcmp(op,"var")==0) sprintf(inst[i]," nop "); } else if(strcmp(op,"struct")==0&&strcmp(fuc2,"FP")==0)//结构体定义 { strcpy(var_name[num_v++],fuc1); } } int list[1000],num=0; define_var(param_name,num_p,list,num);//定义函数调用参数 sort_list(list,num); for(i=0;i<num-1;i++) fprintf(fw,"long %s,",param_name[list[i]]); if(num-1>=0) fprintf(fw,"long %s",param_name[list[num-1]]); fprintf(fw,") \n{ \n"); num_big++; num=0; define_var(var_name,num_v,list,num);//局部变量定义 for(i=0;i<num;i++) { add_tab(); fprintf(fw,"long %s; \n",var_name[list[i]]); } local_array2(start); local_array(start);//局部数组定义 }