runcall.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "__run.h"
  2. Result setFunction(INTER_FUNCTIONSIG) {
  3. Result result;
  4. Result tmp;
  5. setResultOperation(&tmp, inter);
  6. tmp.value->value = makeFunctionValue(st->u.set_function.function, st->u.set_function.parameter, var_list, inter);
  7. result = assCore(st->u.set_function.name, tmp.value, CALL_INTER_FUNCTIONSIG_CORE(var_list));
  8. return result;
  9. }
  10. Result callFunction(INTER_FUNCTIONSIG) {
  11. Result result;
  12. Result call_function;
  13. if (operationSafeInterStatement(&call_function, CALL_INTER_FUNCTIONSIG(st->u.call_function.function, var_list)))
  14. return call_function;
  15. if (call_function.value->value->type != function){
  16. writeLog_(inter->debug, WARNING, "call not function[%d]\n", call_function.type);
  17. setResultError(&result, inter);
  18. result.type = error_return;
  19. goto return_;
  20. }
  21. VarList *function_var = call_function.value->value->data.function.var;
  22. Result set_tmp;
  23. set_tmp = setParameter(st->u.call_function.parameter, call_function.value->value->data.function.pt, function_var, CALL_INTER_FUNCTIONSIG_CORE(var_list));
  24. if (set_tmp.type == error_return)
  25. return set_tmp;
  26. function_var = pushVarList(function_var, inter);
  27. functionSafeInterStatement(&result,
  28. CALL_INTER_FUNCTIONSIG(call_function.value->value->data.function.function, function_var));
  29. popVarList(function_var);
  30. return_:
  31. return result;
  32. }