value.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #ifndef VIRTUALMATH_VALUE_H
  2. #define VIRTUALMATH_VALUE_H
  3. #include "__macro.h"
  4. #include "gc.h"
  5. #include "run.h"
  6. struct VarList;
  7. struct Argument;
  8. struct Inter;
  9. typedef enum ResultType (*OfficialFunction)(OFFICAL_FUNCTIONSIG);
  10. typedef void (*Registered)(REGISTERED_FUNCTIONSIG);
  11. enum ValueAuthority{
  12. auto_aut,
  13. public_aut,
  14. protect_aut,
  15. private_aut
  16. };
  17. struct Value{
  18. struct GCStatus gc_status;
  19. enum ValueType{
  20. none=0,
  21. number=1,
  22. string=2,
  23. function=3,
  24. list=4,
  25. dict=5,
  26. class=6,
  27. object_=7,
  28. bool_=8,
  29. pass_=9,
  30. } type;
  31. struct {
  32. struct VarList *var;
  33. struct VarList *out_var;
  34. struct Inherit *inherit;
  35. } object;
  36. union data{
  37. struct Number{
  38. vnum num;
  39. } num;
  40. struct String{
  41. char *str;
  42. } str;
  43. struct Function{
  44. enum{
  45. c_function,
  46. vm_function,
  47. } type;
  48. struct Statement *function;
  49. struct Parameter *pt;
  50. OfficialFunction of;
  51. struct {
  52. enum FunctionPtType{
  53. free_, // 不包含任何隐式传递的参数
  54. static_, // 不包含self参数
  55. object_static_, // self参数不允许class
  56. class_static_, // self参数允许一切,但转换为类
  57. all_static_, // self参数允许一切
  58. object_free_, // 同object_static_但不包含func参数
  59. class_free_, // 同object_static_但不包含func参数
  60. all_free_,
  61. } pt_type;
  62. } function_data;
  63. } function;
  64. struct List{
  65. enum ListType{
  66. value_tuple,
  67. value_list,
  68. } type;
  69. struct LinkValue **list;
  70. vnum size;
  71. } list;
  72. struct Dict{
  73. struct HashTable *dict;
  74. vnum size;
  75. } dict;
  76. struct Bool{
  77. bool bool_;
  78. } bool_;
  79. }data;
  80. struct Value *gc_next;
  81. struct Value *gc_last;
  82. };
  83. struct LinkValue{
  84. struct GCStatus gc_status;
  85. enum ValueAuthority aut;
  86. struct Value *value;
  87. struct LinkValue *belong;
  88. struct LinkValue *gc_next;
  89. struct LinkValue *gc_last;
  90. };
  91. struct Result{
  92. enum ResultType{
  93. not_return = 1, // 无返回值
  94. function_return=2, // 函数返回值
  95. operation_return=3, // 表达式返回值
  96. error_return=4, // 错误
  97. break_return=5,
  98. continue_return=6,
  99. rego_return=7,
  100. restart_return=8,
  101. goto_return=9,
  102. yield_return=10,
  103. } type;
  104. char *label;
  105. struct LinkValue *value;
  106. struct Error *error;
  107. vnum times;
  108. struct Statement *node;
  109. };
  110. struct Error{
  111. char *type;
  112. char *messgae;
  113. char *file;
  114. fline line;
  115. struct Error *next;
  116. };
  117. struct Inherit{
  118. struct LinkValue *value;
  119. struct Inherit *next;
  120. };
  121. enum BaseErrorType{
  122. E_BaseException,
  123. E_Exception,
  124. E_TypeException,
  125. E_ArgumentException,
  126. E_PermissionsException,
  127. E_GotoException,
  128. E_ResultException,
  129. E_NameExceptiom,
  130. E_AssertException,
  131. E_KeyException,
  132. E_IndexException,
  133. E_StrideException,
  134. E_StopIterException,
  135. E_SuperException,
  136. E_ImportException,
  137. E_IncludeException,
  138. };
  139. typedef struct Value Value;
  140. typedef struct LinkValue LinkValue;
  141. typedef struct Result Result;
  142. typedef struct Error Error;
  143. typedef struct Inherit Inherit;
  144. typedef enum ResultType ResultType;
  145. typedef enum BaseErrorType BaseErrorType;
  146. Value *makeObject(Inter *inter, VarList *object, VarList *out_var, Inherit *inherit);
  147. void freeValue(Value **Value);
  148. LinkValue *makeLinkValue(Value *value, LinkValue *belong, Inter *inter);
  149. void freeLinkValue(LinkValue **value);
  150. LinkValue *copyLinkValue(LinkValue *value, Inter *inter);
  151. Value *makeNoneValue(Inter *inter);
  152. Value *makeBoolValue(bool bool_num, Inter *inter);
  153. Value *makePassValue(Inter *inter);
  154. Value *makeNumberValue(vnum num, Inter *inter);
  155. Value *makeStringValue(char *str, Inter *inter);
  156. Value *makeVMFunctionValue(struct Statement *st, struct Parameter *pt, struct VarList *var_list, Inter *inter);
  157. Value *makeCFunctionValue(OfficialFunction of, VarList *var_list, Inter *inter);
  158. Value *makeClassValue(VarList *var_list, Inter *inter, Inherit *father);
  159. Value *makeListValue(struct Argument **arg_ad, Inter *inter, enum ListType type);
  160. Value *makeDictValue(struct Argument **arg_ad, bool new_hash, INTER_FUNCTIONSIG_NOT_ST);
  161. void setResultCore(Result *ru);
  162. void setResult(Result *ru, Inter *inter, LinkValue *belong);
  163. void setResultBase(Result *ru, Inter *inter, LinkValue *belong);
  164. void setResultErrorSt(BaseErrorType type, char *error_message, bool new, INTER_FUNCTIONSIG);
  165. void setResultError(BaseErrorType type, char *error_message, fline line, char *file, bool new, INTER_FUNCTIONSIG_NOT_ST);
  166. void setResultOperationNone(Result *ru, Inter *inter, LinkValue *belong);
  167. void setResultOperation(Result *ru, LinkValue *value);
  168. void setResultOperationBase(Result *ru, LinkValue *value);
  169. void freeResult(Result *ru);
  170. void freeResultSafe(Result *ru);
  171. Error *makeError(char *type, char *message, fline line, char *file);
  172. void freeError(Result *base);
  173. Error *connectError(Error *new, Error *base);
  174. void printError(Result *result, Inter *inter, bool free);
  175. void printValue(Value *value, FILE *debug, bool print_father, bool print_in);
  176. void printLinkValue(LinkValue *value, char *first, char *last, FILE *debug);
  177. bool isType(Value *value, enum ValueType type);
  178. Inherit *makeInherit(LinkValue *value);
  179. Inherit *copyInherit(Inherit *value);
  180. Inherit *freeInherit(Inherit *value);
  181. Inherit *connectInherit(Inherit *base, Inherit *back);
  182. Inherit *connectSafeInherit(Inherit *base, Inherit *back);
  183. bool checkAttribution(Value *self, Value *father);
  184. Inherit *getInheritFromValueCore(LinkValue *num_father);
  185. Inherit *getInheritFromValue(Value *value, Inter *inter);
  186. bool callDel(Value *object_value, Result *result, Inter *inter, VarList *var_list);
  187. bool needDel(Value *object_value, Inter *inter);
  188. #endif //VIRTUALMATH_VALUE_H