|
@@ -1,39 +1,10 @@
|
|
|
#include "__run.h"
|
|
|
-/**
|
|
|
- * operation.c中是用于数学计算的函数
|
|
|
- */
|
|
|
|
|
|
-#define getresult(base, var, inter) do{ \
|
|
|
-if (operationSafeInterStatement(&var, CALL_INTER_FUNCTIONSIG(st->u.operation.base, var_list))){ return var; }} while (0)
|
|
|
-
|
|
|
-#define getresultFree(base, var, other, inter) do{ \
|
|
|
-if (operationSafeInterStatement(&var, CALL_INTER_FUNCTIONSIG(st->u.operation.base, var_list))){ \
|
|
|
-freeResult(&other); \
|
|
|
-return var; \
|
|
|
-} \
|
|
|
-}while(0)
|
|
|
-#define viewtype_core(a, b, valuetype_a, valuetype_a_b) a .value->value->type == valuetype_a && b.value->value->type == valuetype_a_b
|
|
|
-#define viewtype(a, b, valuetype) viewtype_core(a, b, valuetype, valuetype)
|
|
|
-#define operationValue(a, b, type, symbol) a.value->value->data.type symbol b.value->value->data.type
|
|
|
-#define valueToResult(result, result_value, type, inter) result.value->value = make##type##Value(result_value, inter)
|
|
|
-#define noneOperation(left, right, result, st) \
|
|
|
-else if (left.value->value->type == none){ \
|
|
|
-result = right; \
|
|
|
-gcAddTmp(&result.value->gc_status); \
|
|
|
-} \
|
|
|
-else if (right.value->value->type == none){ \
|
|
|
-result = left; \
|
|
|
-gcAddTmp(&result.value->gc_status); \
|
|
|
-} \
|
|
|
-else{ \
|
|
|
-setResultError(&result, inter, "TypeException", "Get Not Support Value", st, true); \
|
|
|
-}PASS
|
|
|
-
|
|
|
-Result addOperation(INTER_FUNCTIONSIG);
|
|
|
-Result subOperation(INTER_FUNCTIONSIG);
|
|
|
-Result mulOperation(INTER_FUNCTIONSIG);
|
|
|
-Result divOperation(INTER_FUNCTIONSIG);
|
|
|
-Result assOperation(INTER_FUNCTIONSIG);
|
|
|
+enum ResultType addOperation(INTER_FUNCTIONSIG);
|
|
|
+enum ResultType subOperation(INTER_FUNCTIONSIG);
|
|
|
+enum ResultType mulOperation(INTER_FUNCTIONSIG);
|
|
|
+enum ResultType divOperation(INTER_FUNCTIONSIG);
|
|
|
+enum ResultType assOperation(INTER_FUNCTIONSIG);
|
|
|
|
|
|
/**
|
|
|
* operation的整体操作
|
|
@@ -42,179 +13,172 @@ Result assOperation(INTER_FUNCTIONSIG);
|
|
|
* @param var_list
|
|
|
* @return
|
|
|
*/
|
|
|
-Result operationStatement(INTER_FUNCTIONSIG) {
|
|
|
- Result result;
|
|
|
- setResultCore(&result);
|
|
|
+ResultType operationStatement(INTER_FUNCTIONSIG) {
|
|
|
+ setResultCore(result);
|
|
|
switch (st->u.operation.OperationType) {
|
|
|
case OPT_ADD:
|
|
|
- result = addOperation(CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
+ addOperation(CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
break;
|
|
|
case OPT_SUB:
|
|
|
- result = subOperation(CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
+ subOperation(CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
break;
|
|
|
case OPT_MUL:
|
|
|
- result = mulOperation(CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
+ mulOperation(CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
break;
|
|
|
case OPT_DIV:
|
|
|
- result = divOperation(CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
+ divOperation(CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
break;
|
|
|
case OPT_ASS:
|
|
|
- result = assOperation(CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
+ assOperation(CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
break;
|
|
|
default:
|
|
|
- setResult(&result, inter);
|
|
|
+ setResult(result, inter);
|
|
|
break;
|
|
|
}
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
+}
|
|
|
+
|
|
|
+bool getLeftRightValue(Result *left, Result *right, INTER_FUNCTIONSIG){
|
|
|
+ if (operationSafeInterStatement(CALL_INTER_FUNCTIONSIG(st->u.operation.left, var_list, result)) || result->value->value->type == none)
|
|
|
+ return true;
|
|
|
+ *left = *result;
|
|
|
+ setResultCore(result);
|
|
|
+
|
|
|
+ if (operationSafeInterStatement(CALL_INTER_FUNCTIONSIG(st->u.operation.right, var_list, result)) || result->value->value->type == none)
|
|
|
+ return true;
|
|
|
+ *right = *result;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
-Result addOperation(INTER_FUNCTIONSIG) {
|
|
|
+ResultType addOperation(INTER_FUNCTIONSIG) {
|
|
|
Result left;
|
|
|
Result right;
|
|
|
- Result result;
|
|
|
setResultCore(&left);
|
|
|
setResultCore(&right);
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- getresult(left, left, inter);
|
|
|
- getresultFree(right, right, left, inter);
|
|
|
+ if (getLeftRightValue(&left, &right, CALL_INTER_FUNCTIONSIG(st, var_list, result)))
|
|
|
+ return result->type;
|
|
|
|
|
|
- setResultOperationBase(&result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
- if (viewtype(left, right, number))
|
|
|
- valueToResult(result, (operationValue(left, right, num.num, +)), Number, inter);
|
|
|
- else if(viewtype(left, right, string)){
|
|
|
+ setResultOperationBase(result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
+ if (left.value->value->type == number && right.value->value->type == number)
|
|
|
+ result->value->value = makeNumberValue(left.value->value->data.num.num + right.value->value->data.num.num, inter);
|
|
|
+ else if(left.value->value->type == string && right.value->value->type == string){
|
|
|
char *new_string = memStrcat(left.value->value->data.str.str, right.value->value->data.str.str, false);
|
|
|
- valueToResult(result, new_string, String, inter);
|
|
|
+ result->value->value = makeStringValue(new_string, inter);
|
|
|
memFree(new_string);
|
|
|
}
|
|
|
- noneOperation(left, right, result, st);
|
|
|
+ else
|
|
|
+ setResultError(result, inter, "TypeException", "Get Not Support Value", st, true);
|
|
|
+
|
|
|
freeResult(&left);
|
|
|
freeResult(&right);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result subOperation(INTER_FUNCTIONSIG) {
|
|
|
+ResultType subOperation(INTER_FUNCTIONSIG) {
|
|
|
Result left;
|
|
|
Result right;
|
|
|
- Result result;
|
|
|
setResultCore(&left);
|
|
|
setResultCore(&right);
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- getresult(left, left, inter);
|
|
|
- getresultFree(right, right, left, inter);
|
|
|
+ if (getLeftRightValue(&left, &right, CALL_INTER_FUNCTIONSIG(st, var_list, result)))
|
|
|
+ return result->type;
|
|
|
|
|
|
- setResultOperationBase(&result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
- if (viewtype(left, right, number))
|
|
|
- valueToResult(result, (operationValue(left, right, num.num, -)), Number, inter);
|
|
|
+ setResultOperationBase(result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
+ if (left.value->value->type == number && right.value->value->type == number)
|
|
|
+ result->value->value = makeNumberValue(left.value->value->data.num.num - right.value->value->data.num.num, inter);
|
|
|
+ else
|
|
|
+ setResultError(result, inter, "TypeException", "Get Not Support Value", st, true);
|
|
|
|
|
|
- noneOperation(left, right, result, st);
|
|
|
freeResult(&left);
|
|
|
freeResult(&right);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result mulOperation(INTER_FUNCTIONSIG) {
|
|
|
+ResultType mulOperation(INTER_FUNCTIONSIG) {
|
|
|
Result left;
|
|
|
Result right;
|
|
|
- Result result;
|
|
|
setResultCore(&left);
|
|
|
setResultCore(&right);
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- getresult(left, left, inter);
|
|
|
- getresultFree(right, right, left, inter);
|
|
|
+ if (getLeftRightValue(&left, &right, CALL_INTER_FUNCTIONSIG(st, var_list, result)))
|
|
|
+ return result->type;
|
|
|
|
|
|
- setResultOperationBase(&result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
- if (viewtype(left, right, number))
|
|
|
- valueToResult(result, (operationValue(left, right, num.num, *)), Number, inter);
|
|
|
- else if(viewtype_core(left, right, number, string)){
|
|
|
+ setResultOperationBase(result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
+ if (left.value->value->type == number && right.value->value->type == number)
|
|
|
+ result->value->value = makeNumberValue(left.value->value->data.num.num * right.value->value->data.num.num, inter);
|
|
|
+ else if(left.value->value->type == number && right.value->value->type == string){
|
|
|
Result tmp = left;
|
|
|
left = right;
|
|
|
right = tmp;
|
|
|
goto mul_str;
|
|
|
}
|
|
|
- else if(viewtype_core(left, right, string, number)){
|
|
|
- mul_str:
|
|
|
- {
|
|
|
- char *new_string = memStrcpySelf(left.value->value->data.str.str, right.value->value->data.num.num);
|
|
|
- valueToResult(result, new_string, String, inter);
|
|
|
- memFree(new_string);
|
|
|
- }
|
|
|
+ else if(left.value->value->type == string && right.value->value->type == number) mul_str: {
|
|
|
+ char *new_string = memStrcpySelf(left.value->value->data.str.str, right.value->value->data.num.num);
|
|
|
+ result->value->value = makeStringValue(new_string, inter);
|
|
|
+ memFree(new_string);
|
|
|
}
|
|
|
- noneOperation(left, right, result, st);
|
|
|
+ else
|
|
|
+ setResultError(result, inter, "TypeException", "Get Not Support Value", st, true);
|
|
|
|
|
|
freeResult(&left);
|
|
|
freeResult(&right);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result divOperation(INTER_FUNCTIONSIG) {
|
|
|
+ResultType divOperation(INTER_FUNCTIONSIG) {
|
|
|
Result left;
|
|
|
Result right;
|
|
|
- Result result;
|
|
|
setResultCore(&left);
|
|
|
setResultCore(&right);
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- getresult(left, left, inter);
|
|
|
- getresultFree(right, right, left, inter);
|
|
|
+ if (getLeftRightValue(&left, &right, CALL_INTER_FUNCTIONSIG(st, var_list, result)))
|
|
|
+ return result->type;
|
|
|
+
|
|
|
+ setResultOperationBase(result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
+ if (left.value->value->type == number && right.value->value->type == number)
|
|
|
+ result->value->value = makeNumberValue(left.value->value->data.num.num / right.value->value->data.num.num, inter);
|
|
|
+ else
|
|
|
+ setResultError(result, inter, "TypeException", "Get Not Support Value", st, true);
|
|
|
|
|
|
- setResultOperationBase(&result, makeLinkValue(NULL, NULL, inter), inter);
|
|
|
- if (viewtype(left, right, number))
|
|
|
- valueToResult(result, (operationValue(left, right, num.num, /)), Number, inter);
|
|
|
- noneOperation(left, right, result, st);
|
|
|
freeResult(&left);
|
|
|
freeResult(&right);
|
|
|
- printf("result.tmp = %ld, %p\n", result.value->gc_status.tmp_link, result.value);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result assOperation(INTER_FUNCTIONSIG) {
|
|
|
- Result result;
|
|
|
- Result times;
|
|
|
- setResultCore(&result);
|
|
|
- setResultCore(×);
|
|
|
-
|
|
|
- getresult(right, result, inter);
|
|
|
- times = assCore(st->u.operation.left, result.value, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
- if (is_error(times)) {
|
|
|
- freeResult(&result);
|
|
|
- return times;
|
|
|
- }
|
|
|
- freeResult(×);
|
|
|
- return result;
|
|
|
-}
|
|
|
+ResultType assOperation(INTER_FUNCTIONSIG) {
|
|
|
+ if (operationSafeInterStatement(CALL_INTER_FUNCTIONSIG(st->u.operation.right, var_list, result)))
|
|
|
+ return result->type;
|
|
|
+ assCore(st->u.operation.left, result->value, CALL_INTER_FUNCTIONSIG_NOT_ST(var_list, result));
|
|
|
|
|
|
-Result assCore(Statement *name, LinkValue *value, INTER_FUNCTIONSIG_CORE){
|
|
|
- Result result;
|
|
|
- Result tmp_result;
|
|
|
- setResultCore(&result);
|
|
|
- setResultCore(&tmp_result);
|
|
|
+ return result->type;
|
|
|
+}
|
|
|
|
|
|
+ResultType assCore(Statement *name, LinkValue *value, INTER_FUNCTIONSIG_NOT_ST){
|
|
|
int int_times;
|
|
|
+ setResultCore(result);
|
|
|
+ gcAddTmp(&value->gc_status);
|
|
|
+
|
|
|
if (name->type == base_list && name->u.base_list.type == value_tuple){
|
|
|
Parameter *pt = NULL;
|
|
|
Argument *call = NULL;
|
|
|
Statement *tmp_st = makeBaseLinkValueStatement(value, name->line, name->code_file);
|
|
|
|
|
|
pt = makeArgsParameter(tmp_st);
|
|
|
- call = getArgument(pt, &tmp_result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
- if (!run_continue(tmp_result)) {
|
|
|
+ call = getArgument(pt, result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
+ if (!run_continue(result)) {
|
|
|
freeArgument(call, false);
|
|
|
freeParameter(pt, true);
|
|
|
- return tmp_result;
|
|
|
+ goto return_;
|
|
|
}
|
|
|
|
|
|
- freeResult(&tmp_result);
|
|
|
- tmp_result = setParameterCore(call, name->u.base_list.list, var_list, name, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
- if (!run_continue(tmp_result))
|
|
|
- result = tmp_result;
|
|
|
- else{
|
|
|
+ freeResult(result);
|
|
|
+ setParameterCore(call, name->u.base_list.list, var_list, name, CALL_INTER_FUNCTIONSIG_NOT_ST(var_list, result));
|
|
|
+ if (run_continue(result)){
|
|
|
Argument *tmp = call;
|
|
|
LinkValue *new_value = makeLinkValue(makeListValue(&tmp, inter, value_tuple), NULL, inter);
|
|
|
- freeResult(&tmp_result);
|
|
|
- setResultOperation(&result, new_value, inter);
|
|
|
+ freeResult(result);
|
|
|
+ setResultOperation(result, new_value, inter);
|
|
|
}
|
|
|
freeArgument(call, false);
|
|
|
freeParameter(pt, true);
|
|
@@ -222,113 +186,112 @@ Result assCore(Statement *name, LinkValue *value, INTER_FUNCTIONSIG_CORE){
|
|
|
else{
|
|
|
char *str_name = NULL;
|
|
|
|
|
|
- tmp_result = getVarInfo(&str_name, &int_times, CALL_INTER_FUNCTIONSIG(name, var_list));
|
|
|
- if (!run_continue(tmp_result)) {
|
|
|
+ getVarInfo(&str_name, &int_times, CALL_INTER_FUNCTIONSIG(name, var_list, result));
|
|
|
+ if (!run_continue(result)) {
|
|
|
memFree(str_name);
|
|
|
- return tmp_result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
- addFromVarList(str_name, var_list, int_times, value, tmp_result.value);
|
|
|
+ addFromVarList(str_name, var_list, int_times, value, result->value);
|
|
|
memFree(str_name);
|
|
|
- freeResult(&tmp_result);
|
|
|
+ freeResult(result);
|
|
|
|
|
|
- setResultCore(&result);
|
|
|
- result.type = operation_return;
|
|
|
- result.value = value;
|
|
|
- gcAddTmp(&result.value->gc_status);
|
|
|
+ result->type = operation_return;
|
|
|
+ result->value = value;
|
|
|
+ gcAddTmp(&result->value->gc_status);
|
|
|
}
|
|
|
- return result;
|
|
|
+
|
|
|
+ return_:
|
|
|
+ gcFreeTmpLink(&value->gc_status);
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result getVar(INTER_FUNCTIONSIG, VarInfo var_info) {
|
|
|
+ResultType getVar(INTER_FUNCTIONSIG, VarInfo var_info) {
|
|
|
int int_times = 0;
|
|
|
char *name = NULL;
|
|
|
- Result result;
|
|
|
- Result tmp;
|
|
|
- setResultCore(&result);
|
|
|
- setResultCore(&tmp);
|
|
|
|
|
|
- tmp = var_info(&name, &int_times, CALL_INTER_FUNCTIONSIG(st, var_list));
|
|
|
- if (!run_continue(tmp)) {
|
|
|
+ freeResult(result);
|
|
|
+ var_info(&name, &int_times, CALL_INTER_FUNCTIONSIG(st, var_list, result));
|
|
|
+ if (!run_continue(result)) {
|
|
|
memFree(name);
|
|
|
- return tmp;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
- freeResult(&tmp);
|
|
|
|
|
|
- setResultCore(&result);
|
|
|
- result.type = operation_return;
|
|
|
- result.value = findFromVarList(name, var_list, int_times, false);
|
|
|
- memFree(name);
|
|
|
+ freeResult(result);
|
|
|
+ result->type = operation_return;
|
|
|
+ result->value = findFromVarList(name, var_list, int_times, false);
|
|
|
|
|
|
- if (result.value == NULL){
|
|
|
- char *info = memStrcat("Name Not Found: ", st->u.base_var.name, false);
|
|
|
- setResultError(&result, inter, "NameException", info, st, true);
|
|
|
+ if (result->value == NULL){
|
|
|
+ char *info = memStrcat("Name Not Found: ", name, false);
|
|
|
+ setResultError(result, inter, "NameException", info, st, true);
|
|
|
memFree(info);
|
|
|
}
|
|
|
else
|
|
|
- gcAddTmp(&result.value->gc_status);
|
|
|
+ gcAddTmp(&result->value->gc_status);
|
|
|
|
|
|
- return result;
|
|
|
+ memFree(name);
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result getBaseValue(INTER_FUNCTIONSIG) {
|
|
|
- Result result;
|
|
|
- setResultCore(&result);
|
|
|
+ResultType getBaseValue(INTER_FUNCTIONSIG) {
|
|
|
+ freeResult(result);
|
|
|
if (st->u.base_value.type == link_value) {
|
|
|
- result.value = st->u.base_value.value;
|
|
|
+ result->value = st->u.base_value.value;
|
|
|
}
|
|
|
else if (st->u.base_value.type == number_str){
|
|
|
char *stop = NULL;
|
|
|
- result.value = makeLinkValue(makeNumberValue(strtol(st->u.base_value.str, &stop, 10), inter), NULL, inter);
|
|
|
+ result->value = makeLinkValue(makeNumberValue(strtol(st->u.base_value.str, &stop, 10), inter), NULL, inter);
|
|
|
}
|
|
|
else
|
|
|
- result.value = makeLinkValue(makeStringValue(st->u.base_value.str, inter), NULL, inter);
|
|
|
- result.type = operation_return;
|
|
|
- gcAddTmp(&result.value->gc_status);
|
|
|
- return result;
|
|
|
+ result->value = makeLinkValue(makeStringValue(st->u.base_value.str, inter), NULL, inter);
|
|
|
+
|
|
|
+ result->type = operation_return;
|
|
|
+ gcAddTmp(&result->value->gc_status);
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result getList(INTER_FUNCTIONSIG) {
|
|
|
+ResultType getList(INTER_FUNCTIONSIG) {
|
|
|
Argument *at = NULL;
|
|
|
Argument *at_tmp = NULL;
|
|
|
- Result result;
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- at = getArgument(st->u.base_list.list, &result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
+ freeResult(result);
|
|
|
+ at = getArgument(st->u.base_list.list, result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
at_tmp = at;
|
|
|
if (!run_continue(result)){
|
|
|
freeArgument(at_tmp, true);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
LinkValue *value = makeLinkValue(makeListValue(&at, inter, st->u.base_list.type), NULL, inter);
|
|
|
- setResultOperation(&result, value, inter);
|
|
|
+ setResultOperation(result, value, inter);
|
|
|
freeArgument(at_tmp, false);
|
|
|
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
-Result getDict(INTER_FUNCTIONSIG) {
|
|
|
+// TODO-szh 设置字典key为变量时直接取值
|
|
|
+ResultType getDict(INTER_FUNCTIONSIG) {
|
|
|
Argument *at = NULL;
|
|
|
Argument *at_tmp = NULL;
|
|
|
- Result result;
|
|
|
- setResultCore(&result);
|
|
|
|
|
|
- at = getArgument(st->u.base_dict.dict, &result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
+ freeResult(result);
|
|
|
+ at = getArgument(st->u.base_dict.dict, result, CALL_INTER_FUNCTIONSIG_CORE(var_list));
|
|
|
at_tmp = at;
|
|
|
if (!run_continue(result)){
|
|
|
freeArgument(at_tmp, false);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
|
|
|
- Value *tmp_value = makeDictValue(&at, true, &result, inter, var_list);
|
|
|
+ freeResult(result);
|
|
|
+ Value *tmp_value = makeDictValue(&at, true, result, inter, var_list);
|
|
|
if (!run_continue(result)) {
|
|
|
freeArgument(at_tmp, false);
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|
|
|
- freeResult(&result);
|
|
|
+
|
|
|
+ freeResult(result);
|
|
|
LinkValue *value = makeLinkValue(tmp_value, NULL, inter);
|
|
|
- setResultOperation(&result, value, inter);
|
|
|
+ setResultOperation(result, value, inter);
|
|
|
freeArgument(at_tmp, false);
|
|
|
|
|
|
- return result;
|
|
|
+ return result->type;
|
|
|
}
|