parameter.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. struct ArgumentParser{
  35. struct LinkValue *value;
  36. struct Argument *arg;
  37. char *name;
  38. enum ArgumentParserType{
  39. only_value,
  40. name_value,
  41. only_name,
  42. } type;
  43. int must;
  44. bool long_arg;
  45. int c_count;
  46. };
  47. typedef struct Parameter Parameter;
  48. typedef struct Argument Argument;
  49. typedef struct ArgumentParser ArgumentParser;
  50. Argument *makeArgument(void);
  51. Argument *makeValueArgument(LinkValue *value);
  52. Argument *makeStatementNameArgument(LinkValue *value, struct Statement *name);
  53. Argument *makeCharNameArgument(LinkValue *value, LinkValue *name_value, char *name);
  54. Argument *connectArgument(Argument *new, Argument *base);
  55. Argument *connectValueArgument(LinkValue *value, Argument *base);
  56. Argument *connectStatementNameArgument(LinkValue *value, struct Statement *name, Argument *base);
  57. Argument *connectCharNameArgument(LinkValue *value, LinkValue *name_value, char *name, Argument *base);
  58. void freeArgument(Argument *at, bool free_st);
  59. Parameter *makeParameter(void);
  60. Parameter *copyParameter(Parameter *base);
  61. Parameter *makeValueParameter(struct Statement *st);
  62. Parameter *makeNameParameter(struct Statement *value, struct Statement *name);
  63. Parameter *makeArgsParameter(struct Statement *st);
  64. Parameter *makeKwrgsParameter(struct Statement *st);
  65. Parameter *connectParameter(Parameter *new, Parameter *base);
  66. Parameter *connectValueParameter(struct Statement *st, Parameter *base);
  67. Parameter *connectNameParameter(struct Statement *value, struct Statement *name, Parameter *base);
  68. Parameter *connectArgsParameter(struct Statement *st, Parameter *base);
  69. Parameter *connectKwargsParameter(struct Statement *st, Parameter *base);
  70. void freeParameter(Parameter *pt, bool free_st);
  71. Argument *listToArgument(LinkValue *list_value, long line, char *file, INTER_FUNCTIONSIG_NOT_ST);
  72. Argument *dictToArgument(LinkValue *dict_value, long line, char *file, INTER_FUNCTIONSIG_NOT_ST);
  73. ResultType setParameterCore(fline line, char *file, Argument *call, Parameter *function_base, VarList *function_var, INTER_FUNCTIONSIG_NOT_ST);
  74. ResultType setParameter(fline line, char *file, Parameter *call_base, Parameter *function_base, VarList *function_var, LinkValue *function_father, INTER_FUNCTIONSIG_NOT_ST);
  75. ResultType iterParameter(Parameter *call, Argument **base_ad, bool is_dict, INTER_FUNCTIONSIG_NOT_ST);
  76. Argument *getArgument(Parameter *call, bool is_dict, INTER_FUNCTIONSIG_NOT_ST);
  77. ResultType defaultParameter(Parameter **function_ad, vnum *num, INTER_FUNCTIONSIG_NOT_ST);
  78. ResultType argumentToVar(Argument **call_ad, vnum *num, INTER_FUNCTIONSIG_NOT_ST);
  79. ResultType parameterFromVar(Parameter **function_ad, VarList *function_var, vnum *num, vnum max, bool *status,
  80. INTER_FUNCTIONSIG_NOT_ST);
  81. ResultType argumentToParameter(Argument **call_ad, Parameter **function_ad, VarList *function_var, INTER_FUNCTIONSIG_NOT_ST);
  82. Inherit *setFatherCore(Inherit *father_tmp);
  83. Inherit *setFather(Argument *call);
  84. bool checkFormal(Parameter *pt);
  85. Argument *parserValueArgument(ArgumentParser *ap, Argument *arg, int *status, ArgumentParser **bak);
  86. int parserNameArgument(ArgumentParser ap[], Argument *arg, ArgumentParser **bak, INTER_FUNCTIONSIG_NOT_ST);
  87. int parserArgumentUnion(ArgumentParser ap[], Argument *arg, INTER_FUNCTIONSIG_NOT_ST);
  88. Argument *parserArgumentValueCore(Argument *arg, ArgumentParser *ap);
  89. ArgumentParser *parserArgumentNameDefault(ArgumentParser *ap);
  90. ArgumentParser *parserArgumentValueDefault(ArgumentParser *ap);
  91. int parserArgumentVar(ArgumentParser *ap, Inter *inter, VarList *var_list);
  92. #endif //VIRTUALMATH_PARAMETER_H