123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #include "__run.h"
- Result getBaseVarInfo(char **name, int *times, INTER_FUNCTIONSIG){
- Result result;
- Result times_tmp;
- *name = setStrVarName(st->u.base_var.name, false, inter, var_list);
- *times = 0;
- if (st->u.base_var.times == NULL){
- *times = 0;
- goto not_times;
- }
- if (operationSafeInterStatement(×_tmp, CALL_INTER_FUNCTIONSIG(st->u.base_var.times, var_list)))
- return times_tmp;
- *times = (int)times_tmp.value->value->data.num.num; // TODO-szh 类型检查
- not_times:
- setResultOperation(&result, inter);
- result.value->value = makeStringValue(st->u.base_var.name, inter);
- return result;
- }
- Result getBaseSVarInfo(char **name, int *times, INTER_FUNCTIONSIG){
- Result result;
- Result times_tmp;
- if (operationSafeInterStatement(&result, CALL_INTER_FUNCTIONSIG(st->u.base_svar.name, var_list)))
- return result;
- *name = getNameFromValue(result.value->value, CALL_INTER_FUNCTIONSIG_CORE(var_list));
- if (st->u.base_svar.times == NULL){
- *times = 0;
- goto not_times;
- }
- if (operationSafeInterStatement(×_tmp, CALL_INTER_FUNCTIONSIG(st->u.base_svar.times, var_list)))
- return times_tmp;
- *times = (int)times_tmp.value->value->data.num.num; // TODO-szh 类型检查
- not_times:
- result.type = operation_return;
- return result;
- }
- Result getVarInfo(char **name, int *times, INTER_FUNCTIONSIG){
- Result result;
- if (st->type == base_var)
- result = getBaseVarInfo(name, times, CALL_INTER_FUNCTIONSIG(st, var_list));
- else if (st->type == base_svar)
- result = getBaseSVarInfo(name, times, CALL_INTER_FUNCTIONSIG(st, var_list));
- else{
- if (operationSafeInterStatement(&result, CALL_INTER_FUNCTIONSIG(st, var_list)))
- return result;
- *name = getNameFromValue(result.value->value, CALL_INTER_FUNCTIONSIG_CORE(var_list));
- *times = 0;
- }
- return result;
- }
- char *setStrVarName(char *old, bool free_old, INTER_FUNCTIONSIG_CORE) {
- char *name = memStrcat(inter->data.var_str_prefix, old);
- if (free_old)
- memFree(old);
- return name;
- }
- char *setNumVarName(NUMBER_TYPE num, INTER_FUNCTIONSIG_CORE) {
- char name[50];
- snprintf(name, 50, "%"NUMBER_FORMAT, num);
- return memStrcat(inter->data.var_num_prefix, name);
- }
- char *getNameFromValue(Value *value, INTER_FUNCTIONSIG_CORE) {
- switch (value->type){
- case string:
- return setStrVarName(value->data.str.str, false, CALL_INTER_FUNCTIONSIG_CORE(var_list));
- case number:
- return setNumVarName(value->data.num.num, CALL_INTER_FUNCTIONSIG_CORE(var_list));
- default:
- return memStrcpy(inter->data.var_defualt, 0, false, false);
- }
- }
|