value.h 2.3 KB

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