parameter.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef VIRTUALMATH_PARAMETER_H
  2. #define VIRTUALMATH_PARAMETER_H
  3. #include "__macro.h"
  4. struct Parameter{
  5. enum ParameterType{
  6. value_par,
  7. name_par,
  8. args_par,
  9. } type;
  10. struct ParameterData{
  11. struct Statement *value;
  12. struct Statement *name; // 仅在name-value模式生效
  13. } data;
  14. struct Parameter *next;
  15. };
  16. struct Argument{
  17. enum ArgumentType{
  18. value_arg,
  19. name_arg,
  20. } type;
  21. struct ArgumentData{
  22. struct LinkValue *value;
  23. struct Statement *name; // 仅在name-value模式生效
  24. } data;
  25. struct Argument *next;
  26. };
  27. typedef struct Parameter Parameter;
  28. typedef struct Argument Argument;
  29. Argument *makeArgument();
  30. Argument *makeOnlyValueArgument(LinkValue *value);
  31. Argument *makeNameValueArgument(LinkValue *value, struct Statement *name);
  32. Argument *connectArgument(Argument *new, Argument *base);
  33. Argument *connectOnlyValueArgument(LinkValue *value, Argument *base);
  34. Argument *connectNameValueArgument(LinkValue *value, struct Statement *name, Argument *base);
  35. void freeArgument(Argument *pt, bool free_st);
  36. Parameter *makeParameter();
  37. Parameter *copyParameter(Parameter *base);
  38. Parameter *makeOnlyValueParameter(struct Statement *st);
  39. Parameter *makeNameValueParameter(struct Statement *value, struct Statement *name);
  40. Parameter *makeOnlyArgsParameter(struct Statement *st);
  41. Parameter *connectParameter(Parameter *new, Parameter *base);
  42. Parameter *connectOnlyValueParameter(struct Statement *st, Parameter *base);
  43. Parameter *connectNameValueParameter(struct Statement *value, struct Statement *name, Parameter *base);
  44. Parameter *connectOnlyArgsParameter(struct Statement *st, Parameter *base);
  45. void freeParameter(Parameter *pt, bool free_st);
  46. Result setParameterCore(Argument *call, Parameter *function_base, VarList *function_var, INTER_FUNCTIONSIG_CORE);
  47. Result setParameter(Parameter *call, Parameter *function, VarList *function_var, INTER_FUNCTIONSIG_CORE);
  48. Result iterParameter(Parameter *call, Argument **base_ad, INTER_FUNCTIONSIG_CORE);
  49. Argument *getArgument(Parameter *call, Result *result, INTER_FUNCTIONSIG_CORE);
  50. Result defaultParameter(Parameter **function_ad, Inter *inter, VarList *var_list, int *num);
  51. Result argumentToVar(Argument **call_ad, struct Inter *inter, struct VarList *var_list, NUMBER_TYPE *num);
  52. Result parameterFromVar(Parameter **function_ad, VarList *function_var, INTER_FUNCTIONSIG_CORE, NUMBER_TYPE *num);
  53. Result argumentToParameter(Argument **call_ad, Parameter **function_ad, VarList *function_var, INTER_FUNCTIONSIG_CORE);
  54. #endif //VIRTUALMATH_PARAMETER_H