value.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #ifndef VIRTUALMATH_VALUE_H
  2. #define VIRTUALMATH_VALUE_H
  3. typedef struct Value{
  4. enum ValueType{
  5. none=0,
  6. number=1,
  7. string,
  8. function,
  9. list,
  10. } type;
  11. union data{
  12. struct Number{
  13. NUMBER_TYPE num;
  14. } num;
  15. struct String{
  16. char *str;
  17. } str;
  18. struct {
  19. struct Statement *function;
  20. struct VarList *var;
  21. struct Parameter *pt;
  22. } function;
  23. struct {
  24. enum ListType{
  25. value_tuple,
  26. value_list,
  27. } type;
  28. struct LinkValue **list;
  29. long int size;
  30. } list;
  31. }data;
  32. struct Value *next;
  33. struct Value *last;
  34. } Value;
  35. typedef struct LinkValue{
  36. struct Value *value;
  37. struct LinkValue *father;
  38. struct LinkValue *next;
  39. struct LinkValue *last;
  40. } LinkValue;
  41. typedef struct Result{
  42. enum ResultType{
  43. not_return = 1, // 无返回值
  44. function_return, // 函数返回值
  45. operation_return, // 表达式返回值
  46. error_return, // 错误
  47. break_return,
  48. continue_return,
  49. rego_return,
  50. restart_return,
  51. } type;
  52. struct LinkValue *value;
  53. int times;
  54. } Result;
  55. struct VarList;
  56. struct Argument;
  57. Value *makeValue(Inter *inter);
  58. void freeValue(Value *value, Inter *inter);
  59. LinkValue *makeLinkValue(Value *value, LinkValue *linkValue,Inter *inter);
  60. void freeLinkValue(LinkValue *value, Inter *inter);
  61. Value *makeNumberValue(long num, Inter *inter);
  62. Value *makeStringValue(char *str, Inter *inter);
  63. Value *makeFunctionValue(struct Statement *st, struct Parameter *pt, struct VarList *var_list, Inter *inter);
  64. Value *makeListValue(struct Argument **arg_ad, Inter *inter, enum ListType type);
  65. void setResult(Result *ru, bool link, Inter *inter);
  66. void setResultError(Result *ru, Inter *inter);
  67. void setResultOperation(Result *ru, Inter *inter);
  68. void printValue(Value *value, FILE *debug);
  69. void printLinkValue(LinkValue *value, char *first, char *last, FILE *debug);
  70. #endif //VIRTUALMATH_VALUE_H