value.h 2.3 KB

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