value.h 2.1 KB

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