parameter.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef VIRTUALMATH_PARAMETER_H
  2. #define VIRTUALMATH_PARAMETER_H
  3. #include "__macro.h"
  4. typedef 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. } Parameter;
  16. typedef 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. } Argument;
  27. Argument *makeArgument();
  28. Argument *makeOnlyValueArgument(LinkValue *value);
  29. Argument *makeNameValueArgument(LinkValue *value, struct Statement *name);
  30. Argument *connectArgument(Argument *new, Argument *base);
  31. Argument *connectOnlyValueArgument(LinkValue *value, Argument *base);
  32. Argument *connectNameValueArgument(LinkValue *value, struct Statement *name, Argument *base);
  33. void freeArgument(Argument *pt, bool free_st);
  34. Parameter *makeParameter();
  35. Parameter *copyParameter(Parameter *base);
  36. Parameter *makeOnlyValueParameter(struct Statement *st);
  37. Parameter *makeNameValueParameter(struct Statement *value, struct Statement *name);
  38. Parameter *makeOnlyArgsParameter(struct Statement *st);
  39. Parameter *connectParameter(Parameter *new, Parameter *base);
  40. Parameter *connectOnlyValueParameter(struct Statement *st, Parameter *base);
  41. Parameter *connectNameValueParameter(struct Statement *value, struct Statement *name, Parameter *base);
  42. Parameter *connectOnlyArgsParameter(struct Statement *st, Parameter *base);
  43. void freeParameter(Parameter *pt, bool free_st);
  44. Result setParameter(Parameter *call, Parameter *function, VarList *function_var, INTER_FUNCTIONSIG_CORE);
  45. Result iterParameter(Parameter *call, Argument **base_ad, INTER_FUNCTIONSIG_CORE);
  46. Argument *getArgument(Parameter *call, Result *result, INTER_FUNCTIONSIG_CORE);
  47. #endif //VIRTUALMATH_PARAMETER_H