parameter.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. kwargs_par,
  10. } type;
  11. struct ParameterData{
  12. struct Statement *value;
  13. struct Statement *name; // 仅在name-value模式生效
  14. } data;
  15. struct Parameter *next;
  16. };
  17. struct Argument{
  18. enum ArgumentType{
  19. value_arg,
  20. name_arg,
  21. } type;
  22. enum ArgumentNameType{
  23. name_st,
  24. name_char,
  25. } name_type;
  26. struct ArgumentData{
  27. struct LinkValue *value;
  28. struct Statement *name; // 仅在name-value模式生效
  29. char *name_;
  30. struct LinkValue *name_value;
  31. } data;
  32. struct Argument *next;
  33. };
  34. typedef struct Parameter Parameter;
  35. typedef struct Argument Argument;
  36. Argument *makeArgument(void);
  37. Argument *makeValueArgument(LinkValue *value);
  38. Argument *makeStatementNameArgument(LinkValue *value, struct Statement *name);
  39. Argument *makeCharNameArgument(LinkValue *value, LinkValue *name_value, char *name);
  40. Argument *connectArgument(Argument *new, Argument *base);
  41. Argument *connectValueArgument(LinkValue *value, Argument *base);
  42. Argument *connectStatementNameArgument(LinkValue *value, struct Statement *name, Argument *base);
  43. Argument *connectCharNameArgument(LinkValue *value, LinkValue *name_value, char *name, Argument *base);
  44. void freeArgument(Argument *at, bool free_st);
  45. Parameter *makeParameter(void);
  46. Parameter *copyParameter(Parameter *base);
  47. Parameter *makeValueParameter(struct Statement *st);
  48. Parameter *makeNameParameter(struct Statement *value, struct Statement *name);
  49. Parameter *makeArgsParameter(struct Statement *st);
  50. Parameter *makeKwrgsParameter(struct Statement *st);
  51. Parameter *connectParameter(Parameter *new, Parameter *base);
  52. Parameter *connectValueParameter(struct Statement *st, Parameter *base);
  53. Parameter *connectNameParameter(struct Statement *value, struct Statement *name, Parameter *base);
  54. Parameter *connectArgsParameter(struct Statement *st, Parameter *base);
  55. Parameter *connectKwargsParameter(struct Statement *st, Parameter *base);
  56. void freeParameter(Parameter *pt, bool free_st);
  57. Argument *listToArgument(LinkValue *list_value, INTER_FUNCTIONSIG_CORE);
  58. Argument *dictToArgument(LinkValue *dict_value, INTER_FUNCTIONSIG_CORE);
  59. Result setParameterCore(Argument *call, Parameter *function_base, VarList *function_var, struct Statement *base,
  60. struct Inter *inter, struct VarList *var_list);
  61. Result setParameter(Parameter *call_base, Parameter *function_base, VarList *function_var, struct Statement *base,
  62. struct Inter *inter, struct VarList *var_list);
  63. Result iterParameter(Parameter *call, Argument **base_ad, INTER_FUNCTIONSIG_CORE);
  64. Argument *getArgument(Parameter *call, Result *result, INTER_FUNCTIONSIG_CORE);
  65. Result defaultParameter(Parameter **function_ad, Inter *inter, VarList *var_list, int *num);
  66. Result
  67. argumentToVar(Argument **call_ad, struct Inter *inter, struct VarList *var_list, NUMBER_TYPE *num);
  68. Result parameterFromVar(Parameter **function_ad, VarList *function_var, struct Inter *inter, struct VarList *var_list,
  69. NUMBER_TYPE *num, NUMBER_TYPE max, bool *status);
  70. Result argumentToParameter(Argument **call_ad, Parameter **function_ad, VarList *function_var, INTER_FUNCTIONSIG_CORE);
  71. #endif //VIRTUALMATH_PARAMETER_H