cfunc.c 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569
  1. #include<stdio.h>
  2. #include "interpreter.h"
  3. int len_int(int num){
  4. int count = 1; // 默认得有1位
  5. while(1){
  6. num = num / 10;
  7. if(num <= 0){
  8. break;
  9. }
  10. count += 1;
  11. }
  12. return count;
  13. }
  14. int len_only_double(double num){
  15. int count = 1; // 默认得有1位
  16. while(1){
  17. num = num * 10;
  18. if(num - (int)num <= 0){
  19. break;
  20. }
  21. count += 1;
  22. }
  23. return count;
  24. }
  25. int len_double(double num){
  26. int count = 1, i = (int)num;
  27. count += len_int(i);
  28. count += len_only_double(num);
  29. return count;
  30. }
  31. int len_intx(unsigned int num){ // 16进制
  32. int count = 1; // 默认得有1位
  33. while(1){
  34. num = num / 16;
  35. if(num <= 0){
  36. break;
  37. }
  38. count += 1;
  39. }
  40. return count;
  41. }
  42. GWARF_result to_object(GWARF_result value, inter *global_inter){ // 把GWARF_value封装成objct
  43. error_space(value, return_self, value);
  44. if((value.value.type == CLASS_value) || (value.value.type == OBJECT_value) || (value.value.type == FUNC_value) || (value.value.type == NULL_value)){ // 可以直接返回
  45. return_self: return value;
  46. }
  47. GWARF_result func_result = GWARF_result_reset;
  48. var_list *the_var = make_var_base(global_inter->global_var);
  49. var *tmp;
  50. if(value.value.type == NUMBER_value){
  51. tmp = find_var(the_var, 0, "double", NULL);
  52. if(tmp != NULL){
  53. func_result.value = tmp->value;
  54. }
  55. }
  56. else if(value.value.type == INT_value){
  57. tmp = find_var(the_var, 0, "int", NULL);
  58. if(tmp != NULL){
  59. func_result.value = tmp->value;
  60. }
  61. }
  62. else if(value.value.type == BOOL_value){
  63. tmp = find_var(the_var, 0, "bool", NULL);
  64. if(tmp != NULL){
  65. func_result.value = tmp->value;
  66. }
  67. }
  68. else if(value.value.type == STRING_value){
  69. tmp = find_var(the_var, 0, "str", NULL);
  70. if(tmp != NULL){
  71. func_result.value = tmp->value;
  72. }
  73. }
  74. else if(value.value.type == LIST_value){
  75. tmp = find_var(the_var, 0, "list", NULL);
  76. if(tmp != NULL){
  77. func_result.value = tmp->value;
  78. }
  79. }
  80. else if(value.value.type == DICT_value){
  81. tmp = find_var(the_var, 0, "dict", NULL);
  82. if(tmp != NULL){
  83. func_result.value = tmp->value;
  84. }
  85. }
  86. else{
  87. free(the_var);
  88. return to_error("SystemctlError", "SystemctlException", global_inter);
  89. }
  90. GWARF_result return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value.value), global_inter);
  91. value.value = return_tmp.value;
  92. free(the_var);
  93. return value;
  94. }
  95. GWARF_result to_tuple(GWARF_value value, inter *global_inter){ // 把GWARF_value封装成objct
  96. GWARF_result func_result = GWARF_result_reset;
  97. var_list *the_var = make_var_base(global_inter->global_var);
  98. var *tmp;
  99. tmp = find_var(the_var, 0, "tuple", NULL);
  100. if(tmp != NULL){
  101. func_result.value = tmp->value;
  102. }
  103. else{ // 应该报错 (TypeError)
  104. free(the_var);
  105. return to_error("[Systemctl]Can't Not Found Class : 'tuple'", "SystemctlException", global_inter);
  106. }
  107. GWARF_result return_tmp = call_back_core(func_result, the_var, pack_value_parameter(value), global_inter);
  108. free(the_var);
  109. return return_tmp;
  110. }
  111. GWARF_result get_object(parameter *tmp_s, char *name, var_list *the_var, inter *global_inter){ // 生成一个object
  112. GWARF_result func_result = GWARF_result_reset;
  113. func_result.u = statement_end;
  114. func_result.value.type = NULL_value;
  115. func_result.value.value.int_value = 0;
  116. var *tmp = find_var(the_var, 0, name, NULL);
  117. if(tmp != NULL){
  118. func_result.value = tmp->value;
  119. }
  120. else{
  121. return to_error("[Systemctl]Object Name Not Found", "SystemctlException", global_inter);
  122. }
  123. return call_back_core(func_result, the_var, tmp_s, global_inter);
  124. }
  125. GWARF_result to_error(char *error_info, char *error_type, inter *global_inter){ // 把GWARF_value封装成error
  126. fprintf(inter_info, "%s(%s)\n", error_type, error_info);
  127. GWARF_result func_result, return_result = GWARF_result_reset;
  128. GWARF_value tmp_value = GWARF_value_reset;
  129. var_list *the_var = make_var_base(global_inter->global_var);
  130. tmp_value.type = STRING_value;
  131. tmp_value.value.string = error_info;
  132. var *tmp = find_var(the_var, 0, error_type, NULL);
  133. if(tmp != NULL){
  134. func_result.value = tmp->value;
  135. return_result = call_back_core(func_result, the_var, pack_value_parameter(tmp_value), global_inter);
  136. }
  137. else{
  138. fprintf(inter_info, "NOT FOUND :: %s for %s", error_type, error_info);
  139. return_result.value.type = NULL_value;
  140. return_result.value.value.int_value = 0;
  141. }
  142. free(the_var);
  143. return_result.u = error;
  144. return_result.error_info = error_info;
  145. return return_result;
  146. }
  147. void login_official_func(int type, int is_class, var_list *the_var, char *name, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *)){ // 注册单个official func
  148. GWARF_result func_value = GWARF_result_reset;
  149. func *func_tmp = malloc(sizeof(func));
  150. func_tmp->done = NULL;
  151. func_tmp->parameter_list = NULL;
  152. func_tmp->the_var = copy_var_list(the_var);
  153. func_tmp->type = official;
  154. func_tmp->official_func = type;
  155. func_tmp->is_class = is_class;
  156. func_tmp->is_lambda = false;
  157. func_tmp->paser = paser;
  158. func_tmp->self = make_var_base(make_hash_var());
  159. func_tmp->self->tag = run_object;
  160. func_value.value.type = FUNC_value;
  161. func_value.value.value.func_value = func_tmp;
  162. assignment_func(name, func_value, the_var, 0, auto_public); // 注册函数到指定的位置
  163. }
  164. void login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), inter *global_inter){
  165. int a[][2] = {{printf_func,0}, {input_func,0}, {isinherited_func,0}};
  166. char *name[] = {"print", "input", "isinherited"};
  167. int lenth = sizeof(a)/sizeof(a[0]);
  168. for(int i = 0;i < lenth;i+=1){
  169. login_official_func(a[i][0], a[i][1], the_var, name[i], paser);
  170. }
  171. }
  172. // global 全局内置函数解析器
  173. GWARF_result official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){
  174. GWARF_result return_value = GWARF_result_reset;
  175. return_value.u = return_def;
  176. return_value.return_times = 0;
  177. switch (the_func->official_func)
  178. {
  179. case printf_func:{ // printf something
  180. if(tmp_s == NULL){ // 没有东西要打印
  181. goto return_result;
  182. }
  183. char *str = malloc(0);
  184. while(true){
  185. GWARF_result tmp = traverse(tmp_s->u.value, out_var, false, global_inter);
  186. error_space(tmp, return_result, return_value);
  187. tmp = to_str(tmp.value, out_var, global_inter);
  188. error_space(tmp, return_result, return_value);
  189. str = realloc(str, strlen(str) + strlen(tmp.value.value.string) + 2);
  190. strcat(str, tmp.value.value.string);
  191. if (tmp_s->next == NULL){ // the last
  192. break;
  193. }
  194. tmp_s = tmp_s->next;
  195. }
  196. printf("%s\n", str); // 换行
  197. free(str);
  198. return_value.u = statement_end;
  199. break;
  200. }
  201. case input_func:{
  202. if(tmp_s != NULL){ // 输出提示
  203. GWARF_result tmp = traverse(tmp_s->u.value, out_var, false, global_inter);
  204. error_space(tmp, return_result, return_value);
  205. tmp = to_str(tmp.value, out_var, global_inter);
  206. error_space(tmp, return_result, return_value);
  207. printf("%s", tmp.value.value.string);
  208. }
  209. char p, *str = malloc(0);
  210. int a = 0;
  211. while(true){
  212. a += 1;
  213. p = getc(stdin);
  214. if(p == '\n' || p == '\0'){
  215. break; // 遇到\n就跳出
  216. }
  217. str = realloc(str, a);
  218. str[a - 1] = p;
  219. }
  220. str[a] = '\0';
  221. return_value.value.type = STRING_value;
  222. return_value.value.value.string = str;
  223. return_value = to_object(return_value, global_inter);
  224. break;
  225. }
  226. case isinherited_func:{
  227. if(tmp_s == NULL || tmp_s->next == NULL){
  228. return to_error("Too Little Args", "ArgsException", global_inter);
  229. }
  230. else if(tmp_s->next->next != NULL){
  231. return to_error("Too Many Args", "ArgsException", global_inter);
  232. }
  233. GWARF_result child = traverse(tmp_s->u.value, out_var, false, global_inter), father = GWARF_result_reset;
  234. error_space(child, return_result, return_value);
  235. tmp_s = tmp_s->next;
  236. father = traverse(tmp_s->u.value, out_var, false, global_inter);
  237. error_space(father, return_result, return_value);
  238. if(child.value.type != CLASS_value || father.value.type != CLASS_value){
  239. return to_error("Args Should Be Class", "TypeException", global_inter);
  240. }
  241. hash_var *src = father.value.value.class_value->the_var->hash_var_base;
  242. var_list *dust = child.value.value.class_value->the_var;
  243. bool is = false;
  244. while(true){ // 读取child的没一个the_var的哈希表,与father的对比
  245. if(dust == NULL){
  246. break;
  247. }
  248. if(dust->hash_var_base == src){
  249. is = true;
  250. break;
  251. }
  252. dust = dust->next;
  253. }
  254. return_value.value.type = BOOL_value;
  255. return_value.value.value.bool_value = is;
  256. return_value = to_object(return_value, global_inter);
  257. break;
  258. }
  259. default:
  260. break;
  261. }
  262. return_result: return return_value;
  263. }
  264. class_object *object_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), inter *global_inter){ // 内置对象继承的类
  265. // 创建对象[空对象]
  266. GWARF_result class_value = GWARF_result_reset;
  267. class_object *class_tmp = make_object(the_var, NULL);
  268. class_value.value.type = CLASS_value;
  269. class_value.value.value.class_value = class_tmp;
  270. assignment_func("object", class_value, the_var, 0, auto_public); // 注册class 的 位置
  271. // 注册函数
  272. int a[][2] = {{__value__func,1}, {__assignment__func, 1}};
  273. char *name[] = {"__value__", "__assignment__"};
  274. int lenth = sizeof(a)/sizeof(a[0]);
  275. for(int i = 0;i < lenth;i+=1){
  276. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  277. }
  278. return class_tmp;
  279. }
  280. #define NotFatherError \
  281. else{ \
  282. to_error("Don't get base var", "ValueException", global_inter); \
  283. }
  284. GWARF_result object_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  285. GWARF_result return_value = GWARF_result_reset;
  286. var_list *login_var;
  287. return_value.u = return_def;
  288. return_value.return_times = 0;
  289. if(father.father->type == CLASS_value){ // is class so that can use "."
  290. login_var = father.father->value.class_value->the_var;
  291. }
  292. else if(father.father->type == OBJECT_value){
  293. login_var = father.father->value.object_value->the_var;
  294. }
  295. NotFatherError;
  296. switch (the_func->official_func)
  297. {
  298. case __value__func:{ // 若想实现运算必须要有这个方法
  299. size_t size;
  300. unsigned long int ad;
  301. if(father.father->type == CLASS_value){ // is class so that can use "."
  302. ad = (unsigned long int)father.father->value.class_value;
  303. }
  304. else if(father.father->type == OBJECT_value){
  305. ad = (unsigned long int)father.father->value.object_value;
  306. }
  307. size = (size_t)(9 + len_intx(ad));
  308. return_value.value.type = STRING_value;
  309. return_value.value.value.string = (char *)malloc(size);
  310. snprintf(return_value.value.value.string, size, "<-%x->", ad);
  311. break;
  312. }
  313. case __assignment__func:
  314. return_value.value = *(father.father); // 返回self
  315. break;
  316. }
  317. return_result: return return_value;
  318. }
  319. class_object *make_object(var_list *the_var, var_list *father_var_list){
  320. class_object *class_tmp = malloc(sizeof(class_object));
  321. class_tmp->the_var = make_var_base(make_hash_var()); // make class var list
  322. if(father_var_list != NULL){
  323. append_by_var_list(class_tmp->the_var, father_var_list); // int、double、str等内置类需要继承gobject类
  324. }
  325. // class_tmp->out_var = copy_var_list(the_var); // make class var list with out var
  326. return class_tmp;
  327. }
  328. class_object *BaseException_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  329. // 创建对象[空对象]
  330. GWARF_result class_value = GWARF_result_reset;
  331. class_object *class_tmp = make_object(the_var, father_var_list);
  332. class_value.value.type = CLASS_value;
  333. class_value.value.value.class_value = class_tmp;
  334. assignment_func("BaseException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  335. // 注册函数
  336. int a[][2] = {{__init__func,1}};
  337. char *name[] = {"__init__"};
  338. int lenth = sizeof(a)/sizeof(a[0]);
  339. for(int i = 0;i < lenth;i+=1){
  340. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  341. }
  342. return class_tmp;
  343. }
  344. GWARF_result BaseException_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  345. GWARF_result return_value = GWARF_result_reset;
  346. var_list *login_var;
  347. return_value.u = return_def;
  348. return_value.return_times = 0;
  349. if(father.father->type == CLASS_value){ // is class so that can use "."
  350. login_var = father.father->value.class_value->the_var;
  351. }
  352. else if(father.father->type == OBJECT_value){
  353. login_var = father.father->value.object_value->the_var;
  354. }
  355. NotFatherError;
  356. switch (the_func->official_func)
  357. {
  358. case __init__func:{ // printf something
  359. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  360. error_space(tmp_result, return_result, return_value);
  361. tmp = to_str(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  362. error_space(tmp, return_result, return_value);
  363. assignment_func("ErrorInfo", tmp, login_var, 0, auto_public); // 不会权限不足
  364. return_value.u = statement_end; // __init__没有return
  365. break;
  366. }
  367. default:
  368. break;
  369. }
  370. return_result: return return_value;
  371. }
  372. class_object *Exception_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  373. // 创建对象[空对象]
  374. GWARF_result class_value = GWARF_result_reset;
  375. class_object *class_tmp = make_object(the_var, father_var_list);
  376. class_value.value.type = CLASS_value;
  377. class_value.value.value.class_value = class_tmp;
  378. assignment_func("Exception", class_value, the_var, 0, auto_public); // 注册class 的 位置
  379. return class_tmp;
  380. }
  381. class_object *AssertException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  382. // 创建对象[空对象]
  383. GWARF_result class_value = GWARF_result_reset;
  384. class_object *class_tmp = make_object(the_var, father_var_list);
  385. class_value.value.type = CLASS_value;
  386. class_value.value.value.class_value = class_tmp;
  387. assignment_func("AssertException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  388. return class_tmp;
  389. }
  390. class_object *NameException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  391. // 创建对象[空对象]
  392. GWARF_result class_value = GWARF_result_reset;
  393. class_object *class_tmp = make_object(the_var, father_var_list);
  394. class_value.value.type = CLASS_value;
  395. class_value.value.value.class_value = class_tmp;
  396. assignment_func("NameException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  397. return class_tmp;
  398. }
  399. class_object *IterException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  400. // 创建对象[空对象]
  401. GWARF_result class_value = GWARF_result_reset;
  402. class_object *class_tmp = make_object(the_var, father_var_list);
  403. class_value.value.type = CLASS_value;
  404. class_value.value.value.class_value = class_tmp;
  405. assignment_func("IterException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  406. return class_tmp;
  407. }
  408. class_object *AssignmentException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  409. // 创建对象[空对象]
  410. GWARF_result class_value = GWARF_result_reset;
  411. class_object *class_tmp = make_object(the_var, father_var_list);
  412. class_value.value.type = CLASS_value;
  413. class_value.value.value.class_value = class_tmp;
  414. assignment_func("AssignmentException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  415. return class_tmp;
  416. }
  417. class_object *IndexException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  418. // 创建对象[空对象]
  419. GWARF_result class_value = GWARF_result_reset;
  420. class_object *class_tmp = make_object(the_var, father_var_list);
  421. class_value.value.type = CLASS_value;
  422. class_value.value.value.class_value = class_tmp;
  423. assignment_func("IndexException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  424. return class_tmp;
  425. }
  426. class_object *KeyException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  427. // 创建对象[空对象]
  428. GWARF_result class_value = GWARF_result_reset;
  429. class_object *class_tmp = make_object(the_var, father_var_list);
  430. class_value.value.type = CLASS_value;
  431. class_value.value.value.class_value = class_tmp;
  432. assignment_func("KeyException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  433. return class_tmp;
  434. }
  435. class_object *ImportException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  436. // 创建对象[空对象]
  437. GWARF_result class_value = GWARF_result_reset;
  438. class_object *class_tmp = make_object(the_var, father_var_list);
  439. class_value.value.type = CLASS_value;
  440. class_value.value.value.class_value = class_tmp;
  441. assignment_func("ImportException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  442. return class_tmp;
  443. }
  444. class_object *IncludeException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  445. // 创建对象[空对象]
  446. GWARF_result class_value = GWARF_result_reset;
  447. class_object *class_tmp = make_object(the_var, father_var_list);
  448. class_value.value.type = CLASS_value;
  449. class_value.value.value.class_value = class_tmp;
  450. assignment_func("IncludeException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  451. return class_tmp;
  452. }
  453. class_object *DivZeroException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  454. // 创建对象[空对象]
  455. GWARF_result class_value = GWARF_result_reset;
  456. class_object *class_tmp = make_object(the_var, father_var_list);
  457. class_value.value.type = CLASS_value;
  458. class_value.value.value.class_value = class_tmp;
  459. assignment_func("DivZeroException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  460. return class_tmp;
  461. }
  462. class_object *ValueException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  463. // 创建对象[空对象]
  464. GWARF_result class_value = GWARF_result_reset;
  465. class_object *class_tmp = make_object(the_var, father_var_list);
  466. class_value.value.type = CLASS_value;
  467. class_value.value.value.class_value = class_tmp;
  468. assignment_func("ValueException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  469. return class_tmp;
  470. }
  471. class_object *TypeException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  472. // 创建对象[空对象]
  473. GWARF_result class_value = GWARF_result_reset;
  474. class_object *class_tmp = make_object(the_var, father_var_list);
  475. class_value.value.type = CLASS_value;
  476. class_value.value.value.class_value = class_tmp;
  477. assignment_func("TypeException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  478. return class_tmp;
  479. }
  480. class_object *ArgsException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  481. // 创建对象[空对象]
  482. GWARF_result class_value = GWARF_result_reset;
  483. class_object *class_tmp = make_object(the_var, father_var_list);
  484. class_value.value.type = CLASS_value;
  485. class_value.value.value.class_value = class_tmp;
  486. assignment_func("ArgsException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  487. return class_tmp;
  488. }
  489. class_object *SystemctlException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  490. // 创建对象[空对象]
  491. GWARF_result class_value = GWARF_result_reset;
  492. class_object *class_tmp = make_object(the_var, father_var_list);
  493. class_value.value.type = CLASS_value;
  494. class_value.value.value.class_value = class_tmp;
  495. assignment_func("SystemctlException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  496. return class_tmp;
  497. }
  498. class_object *VarException_login_official(var_list *the_var, var_list *father_var_list, inter *global_inter){
  499. // 创建对象[空对象]
  500. GWARF_result class_value = GWARF_result_reset;
  501. class_object *class_tmp = make_object(the_var, father_var_list);
  502. class_value.value.type = CLASS_value;
  503. class_value.value.value.class_value = class_tmp;
  504. assignment_func("VarException", class_value, the_var, 0, auto_public); // 注册class 的 位置
  505. return class_tmp;
  506. }
  507. class_object *gobject_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){ // 内置对象继承的类
  508. // 创建对象[空对象]
  509. GWARF_result class_value = GWARF_result_reset;
  510. class_object *class_tmp = make_object(the_var, father_var_list);
  511. class_value.value.type = CLASS_value;
  512. class_value.value.value.class_value = class_tmp;
  513. assignment_func("gobject", class_value, the_var, 0, auto_public); // 注册class 的 位置
  514. // 注册函数
  515. int a[][2] = {{__init__func,1}, {__value__func,1}, {__add__func,1}, {__sub__func,1}, {__mul__func,1},
  516. {__div__func,1}, {__eq__func,1}, {__more__func,1}, {__less__func,1}, {__eqmore__func,1},
  517. {__eqless__func,1}, {__noteq__func,1}, {__pow__func,1}, {__log__func,1}, {__sqrt__func,1},
  518. {__negative__func,1}, {__value__func,1}, {__subr__func,1}, {__divr__func,1}, {__powr__func,1},
  519. {__logr__func,1}, {__sqrtr__func,1}, {__idiv__func,1}, {__idivr__func,1}, {__mod__func,1},
  520. {__modr__func,1},{__bitand__func,1}, {__bitor__func,1}, {__bitnotor__func,1}, {__bitright__func,1},
  521. {__bitrightr__func,1}, {__bitleft__func,1}, {__bitleftr__func,1}, {__bitnot__func,1}};
  522. char *name[] = {"__init__", "__value__", "__add__", "__sub__", "__mul__",
  523. "__div__","__eq__", "__more__", "__less__", "__eqmore__",
  524. "__eqless__","__noteq__", "__pow__", "__log__","__sqrt__",
  525. "__negative__","__bool__","__subr__","__divr__", "__powr__",
  526. "__logr__","__sqrtr__", "__idiv__","__idivr__", "__mod__",
  527. "__modr__","__bitand__", "__bitor__", "__bitnotor__","__bitright__",
  528. "__bitrightr__","__bitleft__", "__bitleftr__","__bitnot__"};
  529. int lenth = sizeof(a)/sizeof(a[0]);
  530. for(int i = 0;i < lenth;i+=1){
  531. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  532. }
  533. return class_tmp;
  534. }
  535. GWARF_result gobject_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  536. GWARF_result return_value = GWARF_result_reset;
  537. var_list *login_var;
  538. return_value.u = return_def;
  539. return_value.return_times = 0;
  540. if(father.father->type == CLASS_value){ // is class so that can use "."
  541. login_var = father.father->value.class_value->the_var;
  542. }
  543. else if(father.father->type == OBJECT_value){
  544. login_var = father.father->value.object_value->the_var;
  545. }
  546. NotFatherError;
  547. switch (the_func->official_func)
  548. {
  549. case __init__func:{ // printf something
  550. GWARF_result tmp = GWARF_result_reset;
  551. tmp.value.type = INT_value;
  552. tmp.value.value.int_value = 0;
  553. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  554. return_value.u = statement_end; // __init__没有return
  555. break;
  556. }
  557. case __value__func:{ // 若想实现运算必须要有这个方法
  558. var *tmp = find_var(login_var, 0, "value", NULL); // gobject类的value存储在self.value中
  559. if(tmp != NULL){
  560. return_value.value = tmp->value; // 取得用于计算的数值
  561. }
  562. else{
  563. return_value.value.type = NULL_value;
  564. return_value.value.value.int_value = 0;
  565. }
  566. break;
  567. }
  568. case __add__func:{
  569. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  570. error_space(tmp_result, return_result, return_value);
  571. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  572. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  573. var *tmp = find_var(login_var, 0, "value", NULL);
  574. if(tmp != NULL){
  575. left_tmp.value = tmp->value;
  576. }
  577. else{
  578. left_tmp.value.type = NULL_value;
  579. left_tmp.value.value.int_value = 0;
  580. }
  581. return_value = add_func(left_tmp, reight_tmp, out_var, global_inter);
  582. break;
  583. }
  584. case __sub__func:{
  585. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  586. error_space(tmp_result, return_result, return_value);
  587. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  588. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  589. var *tmp = find_var(login_var, 0, "value", NULL);
  590. if(tmp != NULL){
  591. left_tmp.value = tmp->value;
  592. }
  593. else{
  594. left_tmp.value.type = NULL_value;
  595. left_tmp.value.value.int_value = 0;
  596. }
  597. return_value = sub_func(left_tmp, reight_tmp, out_var, global_inter);
  598. break;
  599. }
  600. case __subr__func:{
  601. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  602. error_space(tmp_result, return_result, return_value);
  603. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  604. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  605. var *tmp = find_var(login_var, 0, "value", NULL);
  606. if(tmp != NULL){
  607. left_tmp.value = tmp->value;
  608. }
  609. else{
  610. left_tmp.value.type = NULL_value;
  611. left_tmp.value.value.int_value = 0;
  612. }
  613. return_value = sub_func(reight_tmp, left_tmp, out_var, global_inter); // right和left反过来
  614. break;
  615. }
  616. case __mul__func:{
  617. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  618. error_space(tmp_result, return_result, return_value);
  619. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  620. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  621. error_space(reight_tmp, return_result, return_value);
  622. var *tmp = find_var(login_var, 0, "value", NULL);
  623. if(tmp != NULL){
  624. left_tmp.value = tmp->value;
  625. }
  626. else{
  627. left_tmp.value.type = NULL_value;
  628. left_tmp.value.value.int_value = 0;
  629. }
  630. return_value = mul_func(left_tmp, reight_tmp, out_var, global_inter);
  631. break;
  632. }
  633. case __div__func:{
  634. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  635. error_space(tmp_result, return_result, return_value);
  636. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  637. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  638. var *tmp = find_var(login_var, 0, "value", NULL);
  639. if(tmp != NULL){
  640. left_tmp.value = tmp->value;
  641. }
  642. else{
  643. left_tmp.value.type = NULL_value;
  644. left_tmp.value.value.int_value = 0;
  645. }
  646. return_value = div_func(left_tmp, reight_tmp, out_var, global_inter);
  647. break;
  648. }
  649. case __divr__func:{
  650. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  651. error_space(tmp_result, return_result, return_value);
  652. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  653. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  654. var *tmp = find_var(login_var, 0, "value", NULL);
  655. if(tmp != NULL){
  656. left_tmp.value = tmp->value;
  657. }
  658. else{
  659. left_tmp.value.type = NULL_value;
  660. left_tmp.value.value.int_value = 0;
  661. }
  662. return_value = div_func(reight_tmp, left_tmp, out_var, global_inter); // left和right反过来
  663. break;
  664. }
  665. case __eq__func:{
  666. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  667. error_space(tmp_result, return_result, return_value);
  668. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  669. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  670. var *tmp = find_var(login_var, 0, "value", NULL);
  671. if(tmp != NULL){
  672. left_tmp.value = tmp->value;
  673. }
  674. else{
  675. left_tmp.value.type = NULL_value;
  676. left_tmp.value.value.int_value = 0;
  677. }
  678. return_value = equal_func(left_tmp, reight_tmp, out_var, 0, global_inter);
  679. break;
  680. }
  681. case __more__func:{
  682. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  683. error_space(tmp_result, return_result, return_value);
  684. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  685. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  686. var *tmp = find_var(login_var, 0, "value", NULL);
  687. if(tmp != NULL){
  688. left_tmp.value = tmp->value;
  689. }
  690. else{
  691. left_tmp.value.type = NULL_value;
  692. left_tmp.value.value.int_value = 0;
  693. }
  694. return_value = equal_func(left_tmp, reight_tmp, out_var, 1, global_inter);
  695. break;
  696. }
  697. case __less__func:{
  698. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  699. error_space(tmp_result, return_result, return_value);
  700. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  701. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  702. var *tmp = find_var(login_var, 0, "value", NULL);
  703. if(tmp != NULL){
  704. left_tmp.value = tmp->value;
  705. }
  706. else{
  707. left_tmp.value.type = NULL_value;
  708. left_tmp.value.value.int_value = 0;
  709. }
  710. return_value = equal_func(left_tmp, reight_tmp, out_var, 2, global_inter);
  711. break;
  712. }
  713. case __eqmore__func:{
  714. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  715. error_space(tmp_result, return_result, return_value);
  716. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  717. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  718. var *tmp = find_var(login_var, 0, "value", NULL);
  719. if(tmp != NULL){
  720. left_tmp.value = tmp->value;
  721. }
  722. else{
  723. left_tmp.value.type = NULL_value;
  724. left_tmp.value.value.int_value = 0;
  725. }
  726. return_value = equal_func(left_tmp, reight_tmp, out_var, 3, global_inter);
  727. break;
  728. }
  729. case __eqless__func:{
  730. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  731. error_space(tmp_result, return_result, return_value);
  732. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  733. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  734. var *tmp = find_var(login_var, 0, "value", NULL);
  735. if(tmp != NULL){
  736. left_tmp.value = tmp->value;
  737. }
  738. else{
  739. left_tmp.value.type = NULL_value;
  740. left_tmp.value.value.int_value = 0;
  741. }
  742. return_value = equal_func(left_tmp, reight_tmp, out_var, 4, global_inter);
  743. break;
  744. }
  745. case __noteq__func:{
  746. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  747. error_space(tmp_result, return_result, return_value);
  748. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  749. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  750. var *tmp = find_var(login_var, 0, "value", NULL);
  751. if(tmp != NULL){
  752. left_tmp.value = tmp->value;
  753. }
  754. else{
  755. left_tmp.value.type = NULL_value;
  756. left_tmp.value.value.int_value = 0;
  757. }
  758. return_value = equal_func(left_tmp, reight_tmp, out_var, 5, global_inter);
  759. break;
  760. }
  761. case __pow__func:{
  762. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  763. error_space(tmp_result, return_result, return_value);
  764. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  765. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  766. var *tmp = find_var(login_var, 0, "value", NULL);
  767. if(tmp != NULL){
  768. left_tmp.value = tmp->value;
  769. }
  770. else{
  771. left_tmp.value.type = NULL_value;
  772. left_tmp.value.value.int_value = 0;
  773. }
  774. return_value = pow_func(left_tmp, reight_tmp, out_var, global_inter);
  775. break;
  776. }
  777. case __log__func:{
  778. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  779. error_space(tmp_result, return_result, return_value);
  780. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  781. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  782. var *tmp = find_var(login_var, 0, "value", NULL);
  783. if(tmp != NULL){
  784. left_tmp.value = tmp->value;
  785. }
  786. else{
  787. left_tmp.value.type = NULL_value;
  788. left_tmp.value.value.int_value = 0;
  789. }
  790. return_value = log_func(left_tmp, reight_tmp, out_var, global_inter);
  791. break;
  792. }
  793. case __sqrt__func:{
  794. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  795. error_space(tmp_result, return_result, return_value);
  796. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  797. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  798. var *tmp = find_var(login_var, 0, "value", NULL);
  799. if(tmp != NULL){
  800. left_tmp.value = tmp->value;
  801. }
  802. else{
  803. left_tmp.value.type = NULL_value;
  804. left_tmp.value.value.int_value = 0;
  805. }
  806. return_value = sqrt_func(left_tmp, reight_tmp, out_var, global_inter);
  807. break;
  808. }
  809. case __powr__func:{
  810. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  811. error_space(tmp_result, return_result, return_value);
  812. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  813. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  814. var *tmp = find_var(login_var, 0, "value", NULL);
  815. if(tmp != NULL){
  816. left_tmp.value = tmp->value;
  817. }
  818. else{
  819. left_tmp.value.type = NULL_value;
  820. left_tmp.value.value.int_value = 0;
  821. }
  822. return_value = pow_func(reight_tmp, left_tmp, out_var, global_inter);
  823. break;
  824. }
  825. case __logr__func:{
  826. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  827. error_space(tmp_result, return_result, return_value);
  828. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  829. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  830. var *tmp = find_var(login_var, 0, "value", NULL);
  831. if(tmp != NULL){
  832. left_tmp.value = tmp->value;
  833. }
  834. else{
  835. left_tmp.value.type = NULL_value;
  836. left_tmp.value.value.int_value = 0;
  837. }
  838. return_value = log_func(reight_tmp, left_tmp, out_var, global_inter);
  839. break;
  840. }
  841. case __sqrtr__func:{
  842. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  843. error_space(tmp_result, return_result, return_value);
  844. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  845. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  846. var *tmp = find_var(login_var, 0, "value", NULL);
  847. if(tmp != NULL){
  848. left_tmp.value = tmp->value;
  849. }
  850. else{
  851. left_tmp.value.type = NULL_value;
  852. left_tmp.value.value.int_value = 0;
  853. }
  854. return_value = sqrt_func(reight_tmp, left_tmp, out_var, global_inter);
  855. break;
  856. }
  857. case __negative__func:{
  858. GWARF_result left_tmp = GWARF_result_reset;
  859. var *tmp = find_var(login_var, 0, "value", NULL);
  860. if(tmp != NULL){
  861. left_tmp.value = tmp->value;
  862. }
  863. else{
  864. left_tmp.value.type = NULL_value;
  865. left_tmp.value.value.int_value = 0;
  866. }
  867. return_value = negative_func(left_tmp, out_var, global_inter);
  868. break;
  869. }
  870. case __idiv__func:{
  871. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  872. error_space(tmp_result, return_result, return_value);
  873. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  874. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  875. var *tmp = find_var(login_var, 0, "value", NULL);
  876. if(tmp != NULL){
  877. left_tmp.value = tmp->value;
  878. }
  879. else{
  880. left_tmp.value.type = NULL_value;
  881. left_tmp.value.value.int_value = 0;
  882. }
  883. return_value = int_div_func(left_tmp, reight_tmp, out_var, global_inter);
  884. break;
  885. }
  886. case __idivr__func:{
  887. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  888. error_space(tmp_result, return_result, return_value);
  889. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  890. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  891. var *tmp = find_var(login_var, 0, "value", NULL);
  892. if(tmp != NULL){
  893. left_tmp.value = tmp->value;
  894. }
  895. else{
  896. left_tmp.value.type = NULL_value;
  897. left_tmp.value.value.int_value = 0;
  898. }
  899. return_value = int_div_func(reight_tmp, left_tmp, out_var, global_inter);
  900. break;
  901. }
  902. case __mod__func:{
  903. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  904. error_space(tmp_result, return_result, return_value);
  905. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  906. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  907. var *tmp = find_var(login_var, 0, "value", NULL);
  908. if(tmp != NULL){
  909. left_tmp.value = tmp->value;
  910. }
  911. else{
  912. left_tmp.value.type = NULL_value;
  913. left_tmp.value.value.int_value = 0;
  914. }
  915. return_value = mod_func(left_tmp, reight_tmp, out_var, global_inter);
  916. break;
  917. }
  918. case __modr__func:{
  919. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  920. error_space(tmp_result, return_result, return_value);
  921. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  922. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  923. var *tmp = find_var(login_var, 0, "value", NULL);
  924. if(tmp != NULL){
  925. left_tmp.value = tmp->value;
  926. }
  927. else{
  928. left_tmp.value.type = NULL_value;
  929. left_tmp.value.value.int_value = 0;
  930. }
  931. return_value = mod_func(reight_tmp, left_tmp, out_var, global_inter);
  932. break;
  933. }
  934. case __bitand__func:{
  935. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  936. error_space(tmp_result, return_result, return_value);
  937. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  938. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  939. var *tmp = find_var(login_var, 0, "value", NULL);
  940. if(tmp != NULL){
  941. left_tmp.value = tmp->value;
  942. }
  943. else{
  944. left_tmp.value.type = NULL_value;
  945. left_tmp.value.value.int_value = 0;
  946. }
  947. return_value = bit_and_func(left_tmp, reight_tmp, out_var, global_inter);
  948. break;
  949. }
  950. case __bitor__func:{
  951. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  952. error_space(tmp_result, return_result, return_value);
  953. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  954. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  955. var *tmp = find_var(login_var, 0, "value", NULL);
  956. if(tmp != NULL){
  957. left_tmp.value = tmp->value;
  958. }
  959. else{
  960. left_tmp.value.type = NULL_value;
  961. left_tmp.value.value.int_value = 0;
  962. }
  963. return_value = bit_or_func(left_tmp, reight_tmp, out_var, global_inter);
  964. break;
  965. }
  966. case __bitnotor__func:{
  967. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  968. error_space(tmp_result, return_result, return_value);
  969. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  970. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  971. var *tmp = find_var(login_var, 0, "value", NULL);
  972. if(tmp != NULL){
  973. left_tmp.value = tmp->value;
  974. }
  975. else{
  976. left_tmp.value.type = NULL_value;
  977. left_tmp.value.value.int_value = 0;
  978. }
  979. return_value = bit_notor_func(left_tmp, reight_tmp, out_var, global_inter);
  980. break;
  981. }
  982. case __bitleft__func:{
  983. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  984. error_space(tmp_result, return_result, return_value);
  985. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  986. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  987. var *tmp = find_var(login_var, 0, "value", NULL);
  988. if(tmp != NULL){
  989. left_tmp.value = tmp->value;
  990. }
  991. else{
  992. left_tmp.value.type = NULL_value;
  993. left_tmp.value.value.int_value = 0;
  994. }
  995. return_value = bit_left_func(left_tmp, reight_tmp, out_var, global_inter);
  996. break;
  997. }
  998. case __bitleftr__func:{
  999. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1000. error_space(tmp_result, return_result, return_value);
  1001. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  1002. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  1003. var *tmp = find_var(login_var, 0, "value", NULL);
  1004. if(tmp != NULL){
  1005. left_tmp.value = tmp->value;
  1006. }
  1007. else{
  1008. left_tmp.value.type = NULL_value;
  1009. left_tmp.value.value.int_value = 0;
  1010. }
  1011. return_value = bit_left_func(reight_tmp, left_tmp, out_var, global_inter);
  1012. break;
  1013. }
  1014. case __bitright__func:{
  1015. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1016. error_space(tmp_result, return_result, return_value);
  1017. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  1018. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  1019. var *tmp = find_var(login_var, 0, "value", NULL);
  1020. if(tmp != NULL){
  1021. left_tmp.value = tmp->value;
  1022. }
  1023. else{
  1024. left_tmp.value.type = NULL_value;
  1025. left_tmp.value.value.int_value = 0;
  1026. }
  1027. return_value = bit_right_func(left_tmp, reight_tmp, out_var, global_inter);
  1028. break;
  1029. }
  1030. case __bitrightr__func:{
  1031. GWARF_result reight_tmp, left_tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1032. error_space(tmp_result, return_result, return_value);
  1033. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  1034. reight_tmp = get__value__(&base_the_var, the_var, global_inter);
  1035. var *tmp = find_var(login_var, 0, "value", NULL);
  1036. if(tmp != NULL){
  1037. left_tmp.value = tmp->value;
  1038. }
  1039. else{
  1040. left_tmp.value.type = NULL_value;
  1041. left_tmp.value.value.int_value = 0;
  1042. }
  1043. return_value = bit_right_func(reight_tmp, left_tmp, out_var, global_inter);
  1044. break;
  1045. }
  1046. case __bitnot__func:{
  1047. GWARF_result left_tmp = GWARF_result_reset;
  1048. var *tmp = find_var(login_var, 0, "value", NULL);
  1049. if(tmp != NULL){
  1050. left_tmp.value = tmp->value;
  1051. }
  1052. else{
  1053. left_tmp.value.type = NULL_value;
  1054. left_tmp.value.value.int_value = 0;
  1055. }
  1056. return_value = bit_not_func(left_tmp, out_var, global_inter);
  1057. break;
  1058. }
  1059. default:
  1060. break;
  1061. }
  1062. return_result: return return_value;
  1063. }
  1064. class_object *int_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1065. // 创建对象[空对象]
  1066. GWARF_result class_value = GWARF_result_reset;
  1067. class_object *class_tmp = make_object(the_var, father_var_list);
  1068. class_value.value.type = CLASS_value;
  1069. class_value.value.value.class_value = class_tmp;
  1070. assignment_func("int", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1071. // 注册函数
  1072. int a[][2] = {{__init__func,1}, {__assignment__func, 1}};
  1073. char *name[] = {"__init__", "__assignment__"};
  1074. int lenth = sizeof(a)/sizeof(a[0]);
  1075. for(int i = 0;i < lenth;i+=1){
  1076. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1077. }
  1078. return class_tmp;
  1079. }
  1080. GWARF_result int_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  1081. GWARF_result return_value = GWARF_result_reset;
  1082. var_list *login_var;
  1083. return_value.u = return_def;
  1084. return_value.return_times = 0;
  1085. if(father.father->type == CLASS_value){ // is class so that can use "."
  1086. login_var = father.father->value.class_value->the_var;
  1087. }
  1088. else if(father.father->type == OBJECT_value){
  1089. login_var = father.father->value.object_value->the_var;
  1090. }
  1091. NotFatherError;
  1092. switch (the_func->official_func)
  1093. {
  1094. case __init__func:{ // printf something
  1095. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1096. error_space(tmp_result, return_result, return_value);
  1097. GWARF_value base_the_var = tmp.value; // 只有一个参数
  1098. tmp = to_int(tmp_result.value,out_var,global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  1099. error_space(tmp, return_result, return_value);
  1100. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  1101. return_value.u = statement_end; // __init__没有return
  1102. break;
  1103. }
  1104. case __assignment__func:{
  1105. // 不使用to_object,要保证赋值前后类型一致[to_object会受class重写的影响]
  1106. if(father.father->type == OBJECT_value){
  1107. the_object *object_tmp = malloc(sizeof(the_object)); // 生成object的空间
  1108. object_tmp->cls = father.father->value.object_value->cls;
  1109. object_tmp->the_var = append_by_var_list(make_var_base(make_hash_var()), object_tmp->cls); // 生成实例
  1110. // 执行__init__
  1111. GWARF_result self_value = GWARF_result_reset;
  1112. var *tmp = find_var(login_var, 0, "value", NULL);
  1113. if(tmp != NULL){
  1114. self_value = to_int(tmp->value, out_var, global_inter);
  1115. error_space(self_value, return_result, return_value);
  1116. }
  1117. else{
  1118. self_value.value.type = INT_value;
  1119. self_value.value.value.int_value = 0;
  1120. }
  1121. assignment_func("value", self_value, object_tmp->the_var, 0, auto_public); // 注册到新的object
  1122. return_value.value.type = OBJECT_value;
  1123. return_value.value.value.object_value = object_tmp;
  1124. }
  1125. else{
  1126. return_value.value = *(father.father); // 返回原值
  1127. }
  1128. break;
  1129. }
  1130. default:
  1131. break;
  1132. }
  1133. return_result: return return_value;
  1134. }
  1135. // to int[底层实现]
  1136. GWARF_result to_int(GWARF_value value, var_list *the_var, inter *global_inter){
  1137. GWARF_result return_number = GWARF_result_reset;
  1138. return_number.value.type = INT_value;
  1139. if((value.type == INT_value)){
  1140. return_number.value = value;
  1141. return return_number; // 直接返回数据
  1142. }
  1143. if(value.type == OBJECT_value){ // 调用__value__方法
  1144. return_number = to_int(get__value__(&value, the_var, global_inter).value, the_var, global_inter); // 递归
  1145. }
  1146. else{
  1147. if(value.type == BOOL_value){
  1148. return_number.value.value.int_value = value.value.bool_value;
  1149. }
  1150. else if(value.type == NUMBER_value){
  1151. return_number.value.value.int_value = (int)value.value.double_value;
  1152. }
  1153. else if(value.type == STRING_value){
  1154. return_number.value.value.int_value = atoi(value.value.string);
  1155. }
  1156. else{ // 还有list等
  1157. return_number.value.value.int_value = 0;
  1158. }
  1159. }
  1160. return return_number;
  1161. }
  1162. class_object *double_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1163. // 创建对象[空对象]
  1164. GWARF_result class_value = GWARF_result_reset;
  1165. class_object *class_tmp = make_object(the_var, father_var_list);
  1166. class_value.value.type = CLASS_value;
  1167. class_value.value.value.class_value = class_tmp;
  1168. assignment_func("double", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1169. // 注册函数
  1170. int a[][2] = {{__init__func,1}, {__assignment__func, 1}};
  1171. char *name[] = {"__init__", "__assignment__"};
  1172. int lenth = sizeof(a)/sizeof(a[0]);
  1173. for(int i = 0;i < lenth;i+=1){
  1174. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1175. }
  1176. return class_tmp;
  1177. }
  1178. GWARF_result double_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  1179. GWARF_result return_value = GWARF_result_reset;
  1180. var_list *login_var;
  1181. return_value.u = return_def;
  1182. return_value.return_times = 0;
  1183. if(father.father->type == CLASS_value){ // is class so that can use "."
  1184. login_var = father.father->value.class_value->the_var;
  1185. }
  1186. else if(father.father->type == OBJECT_value){
  1187. login_var = father.father->value.object_value->the_var;
  1188. }
  1189. NotFatherError;
  1190. switch (the_func->official_func)
  1191. {
  1192. case __init__func:{ // printf something
  1193. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1194. error_space(tmp_result, return_result, return_value);
  1195. tmp = to_double(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  1196. error_space(tmp, return_result, return_value);
  1197. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  1198. return_value.u = statement_end; // __init__没有return
  1199. break;
  1200. }
  1201. case __assignment__func:{
  1202. // 不使用to_object,要保证赋值前后类型一致[to_object会受class重写的影响]
  1203. if(father.father->type == OBJECT_value){
  1204. the_object *object_tmp = malloc(sizeof(the_object)); // 生成object的空间
  1205. object_tmp->cls = father.father->value.object_value->cls;
  1206. object_tmp->the_var = append_by_var_list(make_var_base(make_hash_var()), object_tmp->cls); // 生成实例
  1207. // 执行__init__
  1208. GWARF_result self_value = GWARF_result_reset;
  1209. var *tmp = find_var(login_var, 0, "value", NULL);
  1210. if(tmp != NULL){
  1211. self_value = to_double(tmp->value, out_var, global_inter);
  1212. error_space(self_value, return_result, return_value);
  1213. }
  1214. else{
  1215. self_value.value.type = NUMBER_value;
  1216. self_value.value.value.double_value = 0;
  1217. }
  1218. assignment_func("value", self_value, object_tmp->the_var, 0, auto_public); // 注册到新的object
  1219. return_value.value.type = OBJECT_value;
  1220. return_value.value.value.object_value = object_tmp;
  1221. }
  1222. else{
  1223. return_value.value = *(father.father); // 返回原值
  1224. }
  1225. break;
  1226. }
  1227. default:
  1228. break;
  1229. }
  1230. return_result: return return_value;
  1231. }
  1232. // to double[底层实现]
  1233. GWARF_result to_double(GWARF_value value, var_list *the_var, inter *global_inter){
  1234. GWARF_result return_number = GWARF_result_reset;
  1235. return_number.value.type = NUMBER_value;
  1236. if((value.type == NUMBER_value)){
  1237. return_number.value = value;
  1238. return return_number; // 直接返回数据
  1239. }
  1240. if(value.type == OBJECT_value){ // 调用__value__方法
  1241. return_number = to_double(get__value__(&value, the_var, global_inter).value, the_var, global_inter); // 递归
  1242. }
  1243. else{
  1244. if(value.type == BOOL_value){
  1245. return_number.value.value.double_value = (double)value.value.bool_value;
  1246. }
  1247. else if(value.type == INT_value || value.type == NULL_value){
  1248. return_number.value.value.double_value = (double)value.value.int_value;
  1249. }
  1250. else if(value.type == STRING_value){
  1251. return_number.value.value.double_value = (double)atof(value.value.string);
  1252. }
  1253. else{
  1254. return_number = to_error("Get a Don't Support Type", "TypeException", global_inter);
  1255. }
  1256. }
  1257. return return_number;
  1258. }
  1259. class_object *str_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1260. // 创建对象[空对象]
  1261. GWARF_result class_value = GWARF_result_reset;
  1262. class_object *class_tmp = make_object(the_var, father_var_list);
  1263. class_value.value.type = CLASS_value;
  1264. class_value.value.value.class_value = class_tmp;
  1265. assignment_func("str", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1266. // 注册函数
  1267. int a[][2] = {{__init__func,1}};
  1268. char *name[] = {"__init__"};
  1269. int lenth = sizeof(a)/sizeof(a[0]);
  1270. for(int i = 0;i < lenth;i+=1){
  1271. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1272. }
  1273. return class_tmp;
  1274. }
  1275. GWARF_result str_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境
  1276. GWARF_result return_value = GWARF_result_reset;
  1277. var_list *login_var;
  1278. return_value.u = return_def;
  1279. return_value.return_times = 0;
  1280. if(father.father->type == CLASS_value){ // is class so that can use "."
  1281. login_var = father.father->value.class_value->the_var;
  1282. }
  1283. else if(father.father->type == OBJECT_value){
  1284. login_var = father.father->value.object_value->the_var;
  1285. }
  1286. NotFatherError;
  1287. switch (the_func->official_func)
  1288. {
  1289. case __init__func:{ // printf something
  1290. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1291. error_space(tmp_result, return_result, return_value);
  1292. tmp = to_str(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  1293. error_space(tmp, return_result, return_value);
  1294. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  1295. return_value.u = statement_end; // __init__没有return
  1296. break;
  1297. }
  1298. default:
  1299. break;
  1300. }
  1301. return_result: return return_value;
  1302. }
  1303. // to str[底层实现]
  1304. GWARF_result to_str(GWARF_value value, var_list *the_var, inter *global_inter){
  1305. GWARF_result return_number = GWARF_result_reset;
  1306. return_number.value.type = STRING_value;
  1307. if((value.type == STRING_value)){
  1308. return_number.value = value;
  1309. return return_number; // 直接返回数据
  1310. }
  1311. if(value.type == OBJECT_value){ // 调用__value__方法
  1312. return_number = to_str(get__value__(&value, the_var, global_inter).value, the_var, global_inter); // 递归
  1313. }
  1314. else{
  1315. if(value.type == BOOL_value){
  1316. if(value.value.bool_value){
  1317. return_number.value.value.string = (char *)malloc(6);
  1318. strcpy(return_number.value.value.string, "true");
  1319. }
  1320. else{
  1321. return_number.value.value.string = (char *)malloc(7);
  1322. strcpy(return_number.value.value.string, "false");
  1323. }
  1324. }
  1325. else if(value.type == INT_value){
  1326. size_t size = (size_t)(2 + len_int(value.value.int_value));
  1327. return_number.value.value.string = (char *)malloc(size);
  1328. snprintf(return_number.value.value.string, size, "%d", value.value.int_value);
  1329. }
  1330. else if(value.type == NUMBER_value){
  1331. size_t size = (size_t)(2 + len_double(value.value.double_value));
  1332. return_number.value.value.string = (char *)malloc(size);
  1333. snprintf(return_number.value.value.string, size, "%f", value.value.double_value);
  1334. }
  1335. else if(value.type == NULL_value){
  1336. return_number.value.value.string = (char *)malloc(10);
  1337. strcpy(return_number.value.value.string, "<-None->");
  1338. }
  1339. else if(value.type == FUNC_value){
  1340. size_t size = (size_t)(20 + len_intx((unsigned long int)value.value.func_value)); // 转换为无符号整形数字
  1341. return_number.value.value.string = (char *)malloc(size);
  1342. snprintf(return_number.value.value.string, size, "<-function on %u->", value.value.func_value);
  1343. }
  1344. else if(value.type == CLASS_value){
  1345. size_t size = (size_t)(16 + len_intx((unsigned long int)value.value.class_value));
  1346. return_number.value.value.string = (char *)malloc(size);
  1347. snprintf(return_number.value.value.string, size, "<-class on %u->", value.value.class_value);
  1348. }
  1349. else{ // 还有LIST等,其余报错
  1350. return_number = to_error("Get a Don't Support Type", "TypeException", global_inter);
  1351. }
  1352. }
  1353. return return_number;
  1354. }
  1355. // dict key 带有类型的前缀
  1356. GWARF_result to_str_dict(GWARF_value value, var_list *the_var, inter *global_inter){
  1357. GWARF_result return_number = GWARF_result_reset;
  1358. return_number.value.type = STRING_value;
  1359. if((value.type == STRING_value)){
  1360. size_t size = (size_t)(5 + strlen(value.value.string));
  1361. return_number.value.value.string = calloc(sizeof(char), size);
  1362. snprintf(return_number.value.value.string, size, "str_%s", value.value.string);
  1363. }
  1364. else if(value.type == OBJECT_value){ // 调用__value__方法
  1365. GWARF_result tmp_str = to_str_dict(get__value__(&value, the_var, global_inter).value, the_var, global_inter);
  1366. if(is_error(&tmp_str) || is_space(&tmp_str)){ // 返回error
  1367. return tmp_str;
  1368. }
  1369. size_t size = strlen(tmp_str.value.value.string) + 2;
  1370. return_number.value.value.string = calloc(sizeof(char), size);
  1371. snprintf(return_number.value.value.string, size, "%s", tmp_str.value.value.string);
  1372. }
  1373. else{
  1374. if(value.type == BOOL_value){
  1375. if(value.value.bool_value){
  1376. return_number.value.value.string = calloc(sizeof(char), 11);
  1377. strcpy(return_number.value.value.string, "bool_true");
  1378. }
  1379. else{
  1380. return_number.value.value.string = calloc(sizeof(char), 12);
  1381. strcpy(return_number.value.value.string, "bool_false");
  1382. }
  1383. }
  1384. else if(value.type == INT_value){
  1385. size_t size = (size_t)(6 + len_int(value.value.int_value));
  1386. return_number.value.value.string = calloc(sizeof(char), size);
  1387. snprintf(return_number.value.value.string, size, "int_%d", value.value.int_value);
  1388. }
  1389. else if(value.type == NUMBER_value){
  1390. size_t size = (size_t)(10 + len_double(value.value.double_value));
  1391. return_number.value.value.string = calloc(sizeof(char), size);
  1392. snprintf(return_number.value.value.string, size, "double_%f", value.value.double_value);
  1393. }
  1394. else if(value.type == FUNC_value){
  1395. size_t size = (size_t)(29 + len_intx((unsigned long int)value.value.func_value)); // 转换为无符号整形数字
  1396. return_number.value.value.string = calloc(sizeof(char), size);
  1397. snprintf(return_number.value.value.string, size, "str_<-function on %u->", value.value.func_value);
  1398. }
  1399. else if(value.type == CLASS_value){ // class_value和func_value应该调用__name__
  1400. size_t size = (size_t)(22 + len_intx((unsigned long int)value.value.class_value));
  1401. return_number.value.value.string = calloc(sizeof(char), size);
  1402. snprintf(return_number.value.value.string, size, "str_<-class on %u->", value.value.class_value);
  1403. }
  1404. else if(value.type == NULL_value){
  1405. return_number.value.value.string = calloc(sizeof(char), 13);
  1406. strcpy(return_number.value.value.string, "none_<none>");
  1407. }
  1408. else{
  1409. return_number = to_error("Get a Don't Support Type", "TypeException", global_inter);
  1410. }
  1411. }
  1412. return_value:
  1413. return return_number;
  1414. }
  1415. bool start_with(char *str, char *start){
  1416. int a = strlen(str),b = strlen(start);
  1417. if(a <= b){ // 长度相等也不用检查
  1418. return false;
  1419. }
  1420. else{
  1421. for(int i = 0;i < b; i += 1){
  1422. if(str[i] != start[i]){
  1423. return false;
  1424. }
  1425. }
  1426. }
  1427. return true;
  1428. }
  1429. char *del_start(char *str, char *start){
  1430. int a = strlen(str),b = strlen(start);
  1431. if(a <= b){ // 长度相等也不用检查
  1432. return NULL;
  1433. }
  1434. else{
  1435. char *new = (char *)calloc(sizeof(char) ,a - b + 1); // 预留一个空位
  1436. strncpy(new, str+b, (a - b));
  1437. return new;
  1438. }
  1439. }
  1440. GWARF_value key_to_str(char *key){ // 复原key
  1441. GWARF_value return_value = GWARF_value_reset;
  1442. if(start_with(key, "str_")){
  1443. return_value.type = STRING_value;
  1444. return_value.value.string = del_start(key, "str_");
  1445. }
  1446. else if(start_with(key, "int_")){
  1447. return_value.type = INT_value;
  1448. return_value.value.int_value = atoi(del_start(key, "int_"));
  1449. }
  1450. else if(start_with(key, "double_")){
  1451. return_value.type = NUMBER_value;
  1452. return_value.value.double_value = atof(del_start(key, "double_"));
  1453. }
  1454. else if(!strcmp(key, "bool_true")){
  1455. return_value.type = BOOL_value;
  1456. return_value.value.bool_value = true;
  1457. }
  1458. else if(!strcmp(key, "bool_false")){
  1459. return_value.type = BOOL_value;
  1460. return_value.value.bool_value = false;
  1461. }
  1462. else{
  1463. return_value.type = NULL_value;
  1464. return_value.value.int_value = 0;
  1465. }
  1466. return return_value;
  1467. }
  1468. class_object *bool_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1469. // 创建对象[空对象]
  1470. GWARF_result class_value = GWARF_result_reset;
  1471. class_object *class_tmp = make_object(the_var, father_var_list);
  1472. class_value.value.type = CLASS_value;
  1473. class_value.value.value.class_value = class_tmp;
  1474. assignment_func("bool", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1475. // 注册函数
  1476. int a[][2] = {{__init__func,1}, {__assignment__func, 1}};
  1477. char *name[] = {"__init__", "__assignment__"};
  1478. int lenth = sizeof(a)/sizeof(a[0]);
  1479. for(int i = 0;i < lenth;i+=1){
  1480. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1481. }
  1482. return class_tmp;
  1483. }
  1484. GWARF_result bool_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境, the_var是self内部环境
  1485. GWARF_result return_value = GWARF_result_reset;
  1486. var_list *login_var;
  1487. return_value.u = return_def;
  1488. return_value.return_times = 0;
  1489. if(father.father->type == CLASS_value){ // is class so that can use "."
  1490. login_var = father.father->value.class_value->the_var;
  1491. }
  1492. else if(father.father->type == OBJECT_value){
  1493. login_var = father.father->value.object_value->the_var;
  1494. }
  1495. NotFatherError;
  1496. switch (the_func->official_func)
  1497. {
  1498. case __init__func:{ // printf something
  1499. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1500. error_space(tmp_result, return_result, return_value);
  1501. tmp = to_bool_(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  1502. error_space(tmp, return_result, return_value);
  1503. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  1504. return_value.u = statement_end; // __init__没有return
  1505. break;
  1506. }
  1507. case __assignment__func:{
  1508. // 不使用to_object,要保证赋值前后类型一致[to_object会受class重写的影响]
  1509. if(father.father->type == OBJECT_value){
  1510. the_object *object_tmp = malloc(sizeof(the_object)); // 生成object的空间
  1511. object_tmp->cls = father.father->value.object_value->cls;
  1512. object_tmp->the_var = append_by_var_list(make_var_base(make_hash_var()), object_tmp->cls); // 生成实例
  1513. // 执行__init__
  1514. GWARF_result self_value = GWARF_result_reset;
  1515. var *tmp = find_var(login_var, 0, "value", NULL);
  1516. if(tmp != NULL){
  1517. self_value= to_bool_(tmp->value, out_var, global_inter);
  1518. error_space(self_value, return_result, return_value);
  1519. }
  1520. else{
  1521. self_value.value.type = BOOL_value;
  1522. self_value.value.value.double_value = false;
  1523. }
  1524. assignment_func("value", self_value, object_tmp->the_var, 0, auto_public); // 注册到新的object
  1525. return_value.value.type = OBJECT_value;
  1526. return_value.value.value.object_value = object_tmp;
  1527. }
  1528. else{
  1529. return_value.value = *(father.father); // 返回原值
  1530. }
  1531. break;
  1532. }
  1533. default:
  1534. break;
  1535. }
  1536. return_result: return return_value;
  1537. }
  1538. // to bool[底层实现]
  1539. GWARF_result to_bool_(GWARF_value value, var_list *the_var, inter *global_inter){
  1540. GWARF_result return_number = GWARF_result_reset;
  1541. return_number.value.type = BOOL_value;
  1542. if((value.type == BOOL_value)){
  1543. return_number.value = value;
  1544. return return_number; // 直接返回数据
  1545. }
  1546. if(value.type == OBJECT_value){ // 调用__value__方法, 如果是class则调用__clsbool__,func则查看参数__bool__
  1547. GWARF_result tmp_result = get__bool__(&value, the_var, global_inter);
  1548. if(is_error(&tmp_result) || is_space(&tmp_result)){
  1549. return tmp_result;
  1550. }
  1551. return_number = to_bool_(tmp_result.value, the_var, global_inter);
  1552. }
  1553. else{
  1554. return_number.value.value.bool_value = to_bool(value, global_inter); // 转换成bool
  1555. }
  1556. return return_number;
  1557. }
  1558. class_object *tuple_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1559. // 创建对象[空对象]
  1560. GWARF_result class_value = GWARF_result_reset;
  1561. class_object *class_tmp = make_object(the_var, father_var_list);
  1562. class_value.value.type = CLASS_value;
  1563. class_value.value.value.class_value = class_tmp;
  1564. assignment_func("tuple", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1565. // 注册函数
  1566. int a[][2] = {{__init__func,1},{__len__func,1},{__down__func,1},{__slice__func,1},{__iter__func,1},{__next__func,1},{__in__func, 1}};
  1567. char *name[] = {"__init__", "__len__", "__down__", "__slice__", "__iter__", "__next__","__in__"}; // __len__是获取长度,__down__是获取下值,__slice__是切片
  1568. int lenth = sizeof(a)/sizeof(a[0]);
  1569. for(int i = 0;i < lenth;i+=1){
  1570. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1571. }
  1572. return class_tmp;
  1573. }
  1574. GWARF_result tuple_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境, the_var是self内部环境
  1575. GWARF_result return_value = GWARF_result_reset;
  1576. var_list *login_var;
  1577. return_value.u = return_def;
  1578. return_value.return_times = 0;
  1579. if(father.father->type == CLASS_value){ // is class so that can use "."
  1580. login_var = father.father->value.class_value->the_var;
  1581. }
  1582. else if(father.father->type == OBJECT_value){
  1583. login_var = father.father->value.object_value->the_var;
  1584. }
  1585. NotFatherError;
  1586. switch (the_func->official_func)
  1587. {
  1588. case __init__func:{ // printf something
  1589. if(tmp_s == NULL){ // 生成空列表
  1590. GWARF_result tmp_result = GWARF_result_reset;
  1591. GWARF_value list_tmp = GWARF_value_reset;
  1592. list_tmp.type = LIST_value;
  1593. list_tmp.value.list_value = malloc(sizeof(the_list));
  1594. list_tmp.value.list_value->index = 0;
  1595. list_tmp.value.list_value->list_value = malloc((size_t)0);
  1596. tmp_result.value = list_tmp;
  1597. assignment_func("value", tmp_result, login_var, 0, auto_public); // 注册到self
  1598. return_value.u = statement_end; // __init__没有return
  1599. }
  1600. else if(tmp_s->next == NULL){ // 只有一个参数
  1601. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1602. error_space(tmp_result, return_result, return_value);
  1603. tmp = to_list(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  1604. error_space(tmp, return_result, return_value);
  1605. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  1606. return_value.u = statement_end; // __init__没有return
  1607. }
  1608. else{
  1609. GWARF_result tmp_result = GWARF_result_reset;
  1610. tmp_result = parameter_to_list(tmp_s, out_var, global_inter);
  1611. error_space(tmp_result, return_result,return_value);
  1612. assignment_func("value", tmp_result, login_var, 0, auto_public); // 注册到self
  1613. return_value.u = statement_end; // __init__没有return
  1614. }
  1615. GWARF_result iter_value = GWARF_result_reset;
  1616. iter_value.value.type = INT_value;
  1617. iter_value.value.value.int_value = 0;
  1618. assignment_func("iter_value", iter_value, login_var, 0, auto_public); // 注册到self
  1619. break;
  1620. }
  1621. case __len__func:{ // return index
  1622. var *tmp = find_var(login_var, 0, "value", NULL);
  1623. return_value.value.type = INT_value;
  1624. return_value.value.value.int_value = tmp->value.value.list_value->index;
  1625. break;
  1626. }
  1627. case __iter__func:{ // return self
  1628. GWARF_result iter_value = GWARF_result_reset;
  1629. iter_value.value.type = INT_value;
  1630. iter_value.value.value.int_value = 0;
  1631. assignment_func("iter_value", iter_value, login_var, 0, auto_public); // 注册到self
  1632. return_value.value = *(father.father);
  1633. break;
  1634. }
  1635. case __next__func:{ // return index
  1636. var *tmp = find_var(login_var, 0, "iter_value", NULL);
  1637. int iter_index, len;
  1638. if(tmp == NULL){
  1639. iter_index = 0;
  1640. }
  1641. else{
  1642. GWARF_result int_tmp = to_int(tmp->value, out_var, global_inter);
  1643. error_space(int_tmp, return_result, return_value);
  1644. iter_index = int_tmp.value.value.int_value;
  1645. }
  1646. tmp = find_var(login_var, 0, "value", NULL);
  1647. len = tmp->value.value.list_value->index;
  1648. fprintf(inter_info, "len = %d, iter_index = %d\n", len, iter_index);
  1649. if(iter_index >= len){ // 已经超出
  1650. return_value = to_error("Max Iter", "IterException", global_inter);
  1651. }
  1652. else{
  1653. return_value.value = tmp->value.value.list_value->list_value[iter_index];
  1654. GWARF_result iter_value = GWARF_result_reset;
  1655. iter_value.value.type = INT_value;
  1656. iter_value.value.value.int_value = iter_index + 1;
  1657. assignment_func("iter_value", iter_value, login_var, 0, auto_public); // 注册到self
  1658. }
  1659. break;
  1660. }
  1661. case __down__func:{ // return index
  1662. var *tmp = find_var(login_var, 0, "value", NULL);
  1663. int len = tmp->value.value.list_value->index;
  1664. if(tmp != NULL){
  1665. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1666. error_space(tmp_result, return_result, return_value);
  1667. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  1668. get_value = get__value__(&base_the_var, the_var, global_inter);
  1669. error_space(get_value, return_result, return_value);
  1670. get_value = to_int(get_value.value, out_var, global_inter);
  1671. error_space(get_value, return_result, return_value);
  1672. if(len - 1 < get_value.value.value.int_value){
  1673. return_value = to_error("Index To Max", "IndexException", global_inter);
  1674. goto return_result;
  1675. }
  1676. else if(get_value.value.value.int_value < 0){
  1677. return_value = to_error("Index To Min", "IndexException", global_inter);
  1678. goto return_result;
  1679. }
  1680. return_value.value = tmp->value.value.list_value->list_value[get_value.value.value.int_value];
  1681. }
  1682. else{
  1683. return_value = to_error("Don't get List Value", "ValueException", global_inter);
  1684. goto return_result;
  1685. }
  1686. break;
  1687. }
  1688. case __in__func:{ // return index
  1689. var *tmp = find_var(login_var, 0, "value", NULL);
  1690. int len = tmp->value.value.list_value->index;
  1691. if(tmp != NULL){
  1692. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1693. error_space(tmp_result, return_result, return_value);
  1694. get_value = get__value__(&(tmp_result.value), the_var, global_inter);
  1695. error_space(get_value, return_result, return_value);
  1696. GWARF_result self = GWARF_result_reset, tmp_eq = GWARF_result_reset;
  1697. for(int i = 0;i < len;i++){
  1698. self.value = tmp->value.value.list_value->list_value[i];
  1699. tmp_eq = equal_func(get_value, self, out_var, 0, global_inter);
  1700. error_space(tmp_eq, return_result, return_value);
  1701. if(tmp_eq.value.value.bool_value){ // 相等
  1702. return_value.value.type = BOOL_value;
  1703. return_value.value.value.bool_value = true;
  1704. goto return_result; // return true
  1705. }
  1706. }
  1707. return_value.value.type = BOOL_value;
  1708. return_value.value.value.bool_value = false;
  1709. }
  1710. else{
  1711. return_value = to_error("Don't get List Value", "ValueException", global_inter);
  1712. goto return_result;
  1713. }
  1714. break;
  1715. }
  1716. case __slice__func:{ // return index
  1717. var *tmp = find_var(login_var, 0, "value", NULL);
  1718. int len = tmp->value.value.list_value->index;
  1719. int start, end;
  1720. if(tmp != NULL){
  1721. GWARF_result start_result = traverse(tmp_s->u.value, out_var, false, global_inter), end_result, tmp_result;
  1722. error_space(start_result, return_result, return_value);
  1723. tmp_result = get__value__(&(start_result.value), the_var, global_inter);
  1724. error_space(tmp_result, return_result, return_value);
  1725. tmp_result = to_int(tmp_result.value, out_var, global_inter);
  1726. error_space(tmp_result, return_result, return_value);
  1727. start = tmp_result.value.value.int_value;
  1728. tmp_s = tmp_s->next;
  1729. if(tmp_s != NULL){
  1730. end_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1731. error_space(end_result, return_result, return_value);
  1732. GWARF_result tmp = get__value__(&(end_result.value), the_var, global_inter);
  1733. error_space(tmp, return_result, return_value);
  1734. if(tmp.value.type != NULL_value){
  1735. tmp = to_int(tmp.value, the_var, global_inter);
  1736. error_space(tmp, return_result, return_value);
  1737. end = tmp.value.value.int_value;
  1738. }
  1739. else{
  1740. goto not_last;
  1741. }
  1742. }
  1743. else{
  1744. not_last:
  1745. end = len;
  1746. }
  1747. if(len < start || len < end || end < start){
  1748. return_value = to_error("Index To Max", "IndexException", global_inter);
  1749. goto return_result;
  1750. }
  1751. else if(end < 0 || start < 0){
  1752. return_value = to_error("Index To Min", "IndexException", global_inter);
  1753. goto return_result;
  1754. }
  1755. return_value.value.type = LIST_value;
  1756. return_value.value.value.list_value = malloc(sizeof(the_list)); // 申请list的空间
  1757. return_value.value.value.list_value->list_value = malloc((size_t)((end - start) * sizeof(GWARF_value)));
  1758. memcpy(return_value.value.value.list_value->list_value, (tmp->value.value.list_value->list_value + start), (size_t)((end - start) * sizeof(GWARF_value)));
  1759. return_value.value.value.list_value->index = end - start;
  1760. }
  1761. else{
  1762. return_value.value.type = NULL_value;
  1763. return_value.value.value.int_value = 0;
  1764. }
  1765. break;
  1766. }
  1767. default:
  1768. break;
  1769. }
  1770. return_result:
  1771. return return_value;
  1772. }
  1773. class_object *list_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  1774. // 创建对象[空对象]
  1775. GWARF_result class_value = GWARF_result_reset;
  1776. class_object *class_tmp = make_object(the_var, father_var_list);
  1777. class_value.value.type = CLASS_value;
  1778. class_value.value.value.class_value = class_tmp;
  1779. assignment_func("list", class_value, the_var, 0, auto_public); // 注册class 的 位置
  1780. // 注册函数
  1781. int a[][2] = {{__set__func,1}};
  1782. char *name[] = {"__set__"}; // 继承tuple
  1783. int lenth = sizeof(a)/sizeof(a[0]);
  1784. for(int i = 0;i < lenth;i+=1){
  1785. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  1786. }
  1787. return class_tmp;
  1788. }
  1789. GWARF_result list_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境, the_var是self内部环境
  1790. GWARF_result return_value = GWARF_result_reset;
  1791. var_list *login_var;
  1792. return_value.u = return_def;
  1793. return_value.return_times = 0;
  1794. if(father.father->type == CLASS_value){ // is class so that can use "."
  1795. login_var = father.father->value.class_value->the_var;
  1796. }
  1797. else if(father.father->type == OBJECT_value){
  1798. login_var = father.father->value.object_value->the_var;
  1799. }
  1800. NotFatherError;
  1801. switch (the_func->official_func)
  1802. {
  1803. case __set__func:{ // return index
  1804. var *tmp = find_var(login_var, 0, "value", NULL);
  1805. int len = tmp->value.value.list_value->index;
  1806. if(tmp != NULL){
  1807. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  1808. error_space(tmp_result, return_result, return_value);
  1809. GWARF_value base_the_var = tmp_result.value; // 只有一个参数
  1810. get_value = get__value__(&base_the_var, the_var, global_inter);
  1811. error_space(get_value, return_result, return_value);
  1812. get_value = to_int(get_value.value, out_var, global_inter);
  1813. error_space(get_value, return_result, return_value);
  1814. tmp_s = tmp_s->next;
  1815. GWARF_result new_value = traverse(tmp_s->u.value, out_var, false, global_inter);
  1816. error_space(new_value, return_result, return_value);
  1817. if(len - 1 < get_value.value.value.int_value){
  1818. return_value = to_error("Index To Max", "IndexException", global_inter);
  1819. goto return_result;
  1820. }
  1821. else if(get_value.value.value.int_value < 0){
  1822. return_value = to_error("Index To Min", "IndexException", global_inter);
  1823. goto return_result;
  1824. }
  1825. tmp->value.value.list_value->list_value[get_value.value.value.int_value] = new_value.value;
  1826. tmp->value.value.list_value->index += 1;
  1827. }
  1828. else{
  1829. return_value.value.type = NULL_value;
  1830. return_value.value.value.int_value = 0;
  1831. }
  1832. break;
  1833. }
  1834. default:
  1835. break;
  1836. }
  1837. return_result: return return_value;
  1838. }
  1839. GWARF_result to_dict(GWARF_value value, var_list *the_var, inter *global_inter){
  1840. GWARF_result return_number = GWARF_result_reset;
  1841. return_number.value.type = DICT_value;
  1842. if((value.type == DICT_value)){
  1843. return_number.value = value;
  1844. return return_number; // 直接返回数据
  1845. }
  1846. if(value.type == OBJECT_value){ // 调用__value__方法
  1847. GWARF_result tmp = get__value__(&value, the_var, global_inter);
  1848. error_space(tmp, return_result, return_number);
  1849. return_number = to_dict(tmp.value, the_var, global_inter); // 递归
  1850. }
  1851. else{
  1852. return to_error("Get a Don't Support Type", "TypeException", global_inter);
  1853. }
  1854. return_result: return return_number;
  1855. }
  1856. GWARF_result to_list(GWARF_value value, var_list *the_var, inter *global_inter){
  1857. GWARF_result return_number = GWARF_result_reset;
  1858. return_number.value.type = LIST_value;
  1859. if((value.type == LIST_value)){
  1860. return_number.value = value;
  1861. return return_number; // 直接返回数据
  1862. }
  1863. if(value.type == OBJECT_value){ // 调用__value__方法
  1864. GWARF_result tmp_result = get__value__(&value, the_var, global_inter);
  1865. if(is_space(&tmp_result) || is_error(&tmp_result)){
  1866. return tmp_result;
  1867. }
  1868. return_number = to_list(tmp_result.value, the_var, global_inter); // 递归
  1869. }
  1870. else{
  1871. return to_error("Get a Don't Support Type", "TypeException", global_inter);
  1872. }
  1873. return return_number;
  1874. }
  1875. GWARF_result parameter_to_list(parameter *tmp_s, var_list *the_var, inter *global_inter){ // 把parameter转换为list
  1876. GWARF_result return_list = GWARF_result_reset, result_tmp = GWARF_result_reset;
  1877. return_list.value.type = LIST_value;
  1878. return_list.value.value.list_value = malloc(sizeof(the_list));
  1879. return_list.value.value.list_value->list_value = malloc(0);
  1880. int index = 0;
  1881. while(1){
  1882. if(tmp_s == NULL){
  1883. break;
  1884. }
  1885. if(tmp_s->type == put_args){ // 解包
  1886. parameter *before = tmp_s, *after = tmp_s->next;
  1887. GWARF_result tmp = traverse(tmp_s->u.value, the_var, false, global_inter); // 不会和下面发生重复计算
  1888. if(is_error(&tmp) || is_space(&tmp)){
  1889. free(return_list.value.value.list_value->list_value);
  1890. free(return_list.value.value.list_value);
  1891. return tmp;
  1892. }
  1893. GWARF_result result_tmp = get__iter__(&(tmp.value), the_var, global_inter);
  1894. if(is_error(&result_tmp) || is_space(&result_tmp)){
  1895. free(return_list.value.value.list_value->list_value);
  1896. free(return_list.value.value.list_value);
  1897. return result_tmp;
  1898. }
  1899. GWARF_value iter_value = result_tmp.value;
  1900. while (1){
  1901. GWARF_result tmp_next = get__next__(&(iter_value), the_var, global_inter);
  1902. if(is_error(&tmp_next) || is_space(&tmp_next)){ // TODO:: 检查是否为IterException
  1903. free(return_list.value.value.list_value->list_value);
  1904. free(return_list.value.value.list_value);
  1905. return tmp_next; // TODO:: return 都需要实方内存
  1906. }
  1907. before->next = pack_value_parameter(tmp_next.value);
  1908. before = before->next;
  1909. }
  1910. before->next = after;
  1911. // 此处不需要“tmp_s = tmp_s->next;” goto next已经包含
  1912. goto next;
  1913. }
  1914. if(tmp_s->type != only_value){
  1915. goto next; // 跳过这一个
  1916. }
  1917. result_tmp = traverse(tmp_s->u.value, the_var, false, global_inter); // 不需要取__value__
  1918. if(is_error(&result_tmp) || is_space(&result_tmp)){ // Name Error错误
  1919. free(return_list.value.value.list_value->list_value);
  1920. free(return_list.value.value.list_value);
  1921. return result_tmp;
  1922. }
  1923. index += 1;
  1924. return_list.value.value.list_value->list_value = realloc(return_list.value.value.list_value->list_value, sizeof(GWARF_value) * index); // 申请新空间
  1925. return_list.value.value.list_value->list_value[index - 1] = result_tmp.value; // 保存value
  1926. next: tmp_s = tmp_s->next; // 指向下一个
  1927. }
  1928. return_list.value.value.list_value->index = index;
  1929. return return_list;
  1930. }
  1931. GWARF_result parameter_to_dict(parameter *tmp_s, var_list *the_var, inter *global_inter){ // 把parameter转换为list
  1932. GWARF_result return_dict = GWARF_result_reset, result_tmp = GWARF_result_reset;
  1933. return_dict.value.type = DICT_value;
  1934. return_dict.value.value.dict_value = malloc(sizeof(the_dict));
  1935. return_dict.value.value.dict_value->index = 0;
  1936. return_dict.value.value.dict_value->dict_value = make_hash_var();
  1937. return_dict.value.value.dict_value->name_list = malloc(sizeof(dict_key));
  1938. return_dict.value.value.dict_value->name_list->key = "";
  1939. return_dict.value.value.dict_value->name_list->next = NULL;
  1940. int index = 0;
  1941. var_list *tmp_var_list = make_var_base(return_dict.value.value.dict_value->dict_value);
  1942. while(1){
  1943. if(tmp_s == NULL){
  1944. break;
  1945. }
  1946. if(tmp_s->type == put_kwargs){
  1947. parameter *before = tmp_s, *after = tmp_s->next;
  1948. GWARF_result tmp = traverse(tmp_s->u.value, the_var, false, global_inter); // 不会和下面发生重复计算
  1949. if(is_error(&tmp) || is_space(&tmp)){
  1950. free(return_dict.value.value.dict_value->name_list);
  1951. free(return_dict.value.value.dict_value);
  1952. // TODO::还需要释放哈希表
  1953. return tmp;
  1954. }
  1955. GWARF_result tmp_result = get__iter__(&(tmp.value), the_var, global_inter);
  1956. if(is_error(&tmp_result) || is_space(&tmp_result)){
  1957. free(return_dict.value.value.dict_value->name_list);
  1958. free(return_dict.value.value.dict_value);
  1959. // TODO::还需要释放哈希表
  1960. return tmp_result;
  1961. }
  1962. GWARF_value iter_value = tmp_result.value; // 获取迭代object,一般是返回self
  1963. while (1){
  1964. GWARF_result tmp_next = get__next__(&(iter_value), the_var, global_inter), tmp_next_down;// 执行__next__的返回值
  1965. if(is_error(&tmp_next) || is_space(&tmp_next)){ // TODO:: 检查是否为IterException
  1966. goto next; // goto return_value;
  1967. }
  1968. GWARF_result get = GWARF_result_reset; // 不会和下面发生重复计算
  1969. var_list *call_var = tmp.value.value.object_value->the_var;
  1970. var *__down__tmp = find_var(call_var, 0, "__down__", NULL);
  1971. if(__down__tmp != NULL){
  1972. get.value = __down__tmp->value;
  1973. get.father = &(tmp.value); // 设置father
  1974. tmp_next_down = call_back_core(get, the_var, pack_value_parameter(tmp_next.value), global_inter);
  1975. if(is_error(&tmp_next_down) || is_space(&tmp_next_down)){
  1976. free(return_dict.value.value.dict_value->name_list);
  1977. free(return_dict.value.value.dict_value);
  1978. // TODO::还需要释放哈希表
  1979. return tmp_next_down;
  1980. }
  1981. }
  1982. else{
  1983. free(return_dict.value.value.dict_value->name_list);
  1984. free(return_dict.value.value.dict_value);
  1985. return to_error("Name Not Found __down__", "NameException", global_inter);
  1986. }
  1987. before->next = pack_value_parameter(tmp_next_down.value);
  1988. before->next->u.var = make_statement();
  1989. before->next->u.var->type = base_var;
  1990. GWARF_result str_tmp = to_str(tmp_next.value, the_var, global_inter);
  1991. if(is_error(&str_tmp) || is_space(&str_tmp)){
  1992. free(return_dict.value.value.dict_value->name_list);
  1993. free(return_dict.value.value.dict_value);
  1994. // TODO::还需要释放哈希表
  1995. return str_tmp;
  1996. }
  1997. before->next->u.var->code.base_var.var_name = str_tmp.value.value.string;
  1998. before->next->u.var->code.base_var.from = NULL;
  1999. before->next->type = name_value;
  2000. before = before->next;
  2001. }
  2002. before->next = after;
  2003. goto next; // 跳过这一个
  2004. }
  2005. if(tmp_s->type != name_value){
  2006. goto next; // 跳过这一个
  2007. }
  2008. result_tmp = traverse(tmp_s->u.value, the_var, false, global_inter); // 不需要取__value__
  2009. if(is_error(&result_tmp) || is_space(&result_tmp)){ // Name Error错误
  2010. free(return_dict.value.value.dict_value->name_list);
  2011. free(return_dict.value.value.dict_value);
  2012. // tmp_dict_name是链表,释放必须特别小心
  2013. // TODO::还需要释放哈希表
  2014. return result_tmp;
  2015. }
  2016. char *key;
  2017. if(tmp_s->u.var->type == base_var){ // 设置key
  2018. size_t size = (size_t)(13 + strlen(tmp_s->u.var->code.base_var.var_name));
  2019. key = (char *)malloc(size);
  2020. snprintf(key, size, "str_%s", tmp_s->u.var->code.base_var.var_name);
  2021. }
  2022. else{
  2023. GWARF_result key_tmp = traverse(tmp_s->u.var, the_var, 0, global_inter);
  2024. if(is_error(&key_tmp) || is_space(&key_tmp)){ // Name Error错误
  2025. free(return_dict.value.value.dict_value->name_list);
  2026. free(return_dict.value.value.dict_value);
  2027. // TODO::还需要释放哈希表
  2028. return key_tmp;
  2029. }
  2030. key = to_str_dict(key_tmp.value, the_var, global_inter).value.value.string;
  2031. }
  2032. login_node(key, result_tmp.value, return_dict.value.value.dict_value->dict_value, public); // 插入
  2033. dict_key *tmp_dict_name = return_dict.value.value.dict_value->name_list;
  2034. while (1){ // 迭代
  2035. if(!strcmp(tmp_dict_name->key, key)){ // 已经存在
  2036. break;
  2037. }
  2038. else if(tmp_dict_name->next == NULL){
  2039. tmp_dict_name->next = malloc(sizeof(dict_key));
  2040. tmp_dict_name->next->next = NULL;
  2041. tmp_dict_name->next->key = malloc(strlen(key));
  2042. strcpy(tmp_dict_name->next->key, key); // 复制key
  2043. index += 1; // 不存在才+1
  2044. break;
  2045. }
  2046. tmp_dict_name = tmp_dict_name->next;
  2047. }
  2048. next: tmp_s = tmp_s->next; // 指向下一个
  2049. }
  2050. return_dict.value.value.dict_value->index = index;
  2051. return return_dict;
  2052. }
  2053. class_object *dict_login_official(var_list *the_var, GWARF_result (*paser)(func *, parameter *, var_list *, GWARF_result, var_list *,inter *), var_list *father_var_list, inter *global_inter){
  2054. // 创建对象[空对象]
  2055. GWARF_result class_value = GWARF_result_reset;
  2056. class_object *class_tmp = make_object(the_var, father_var_list);
  2057. class_value.value.type = CLASS_value;
  2058. class_value.value.value.class_value = class_tmp;
  2059. assignment_func("dict", class_value, the_var, 0, auto_public); // 注册class 的 位置
  2060. // 注册函数
  2061. int a[][2] = {{__init__func,1},{__down__func,1},{__set__func,1},{__next__func,1},{__in__func,1}};
  2062. char *name[] = {"__init__", "__down__", "__set__", "__next__", "__in__"}; // 继承tuple
  2063. int lenth = sizeof(a)/sizeof(a[0]);
  2064. for(int i = 0;i < lenth;i+=1){
  2065. login_official_func(a[i][0], a[i][1], class_tmp->the_var, name[i], paser);
  2066. }
  2067. return class_tmp;
  2068. }
  2069. GWARF_result dict_official_func(func *the_func, parameter *tmp_s, var_list *the_var, GWARF_result father, var_list *out_var,inter *global_inter){ // out_var是外部环境, the_var是self内部环境
  2070. GWARF_result return_value = GWARF_result_reset;
  2071. var_list *login_var;
  2072. return_value.u = return_def;
  2073. return_value.return_times = 0;
  2074. if(father.father->type == CLASS_value){ // is class so that can use "."
  2075. login_var = father.father->value.class_value->the_var;
  2076. }
  2077. else if(father.father->type == OBJECT_value){
  2078. login_var = father.father->value.object_value->the_var;
  2079. }
  2080. NotFatherError;
  2081. switch (the_func->official_func)
  2082. {
  2083. case __init__func:{ // printf something
  2084. if(tmp_s == NULL){ // 生成空列表
  2085. GWARF_result tmp_result = GWARF_result_reset;
  2086. GWARF_value dict_tmp = GWARF_value_reset;
  2087. dict_tmp.type = DICT_value;
  2088. dict_tmp.value.dict_value = malloc(sizeof(the_dict));
  2089. dict_tmp.value.dict_value->index = 0;
  2090. dict_tmp.value.dict_value->dict_value = make_hash_var();
  2091. dict_tmp.value.dict_value->name_list = malloc(sizeof(dict_key));
  2092. dict_tmp.value.dict_value->name_list->key = "";
  2093. dict_tmp.value.dict_value->name_list->next = NULL;
  2094. tmp_result.value = dict_tmp;
  2095. assignment_func("value", tmp_result, login_var, 0, auto_public); // 注册到self
  2096. return_value.u = statement_end; // __init__没有return
  2097. }
  2098. else if(tmp_s->next == NULL){ // 只有一个参数
  2099. GWARF_result tmp, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  2100. error_space(tmp_result, return_result, return_value);
  2101. tmp = to_dict(tmp_result.value, out_var, global_inter); // 只有一个参数[要针对不同数据类型对此处作出处理]
  2102. error_space(tmp, return_result, return_value);
  2103. assignment_func("value", tmp, login_var, 0, auto_public); // 注册到self
  2104. return_value.u = statement_end; // __init__没有return
  2105. }
  2106. else{ // 有多个实参
  2107. GWARF_result dict_tmp = GWARF_result_reset;
  2108. dict_tmp = parameter_to_dict(tmp_s, out_var, global_inter);
  2109. error_space(dict_tmp, return_result, return_value);
  2110. assignment_func("value", dict_tmp, login_var, 0, auto_public); // 注册到self
  2111. return_value.u = statement_end; // __init__没有return
  2112. }
  2113. GWARF_result iter_value = GWARF_result_reset;
  2114. iter_value.value.type = INT_value;
  2115. iter_value.value.value.int_value = 0;
  2116. assignment_func("iter_value", iter_value, login_var, 0, auto_public); // 注册到self
  2117. break;
  2118. }
  2119. case __next__func:{ // return index
  2120. var *tmp = find_var(login_var, 0, "iter_value", NULL);
  2121. int iter_index, len;
  2122. if(tmp == NULL){
  2123. iter_index = 0;
  2124. }
  2125. else{
  2126. GWARF_result int_tmp = to_int(tmp->value, out_var, global_inter);
  2127. error_space(int_tmp, return_result,return_value);
  2128. iter_index = int_tmp.value.value.int_value;
  2129. }
  2130. tmp = find_var(login_var, 0, "value", NULL);
  2131. len = tmp->value.value.dict_value->index;
  2132. if(iter_index >= len){
  2133. return_value = to_error("Max Iter", "IterException", global_inter);
  2134. goto return_result;
  2135. }
  2136. else{
  2137. dict_key *tmp_dict_key = tmp->value.value.dict_value->name_list->next; // 忽略第一个点
  2138. for(int i = 0;i < iter_index;i += 1){
  2139. if(tmp_dict_key == NULL){ // to_error
  2140. return_value = to_error("Max Iter", "IterException", global_inter);
  2141. goto return_result; //
  2142. }
  2143. tmp_dict_key = tmp_dict_key->next;
  2144. }
  2145. GWARF_result iter_value = GWARF_result_reset;
  2146. iter_value.value.type = INT_value;
  2147. iter_value.value.value.int_value = iter_index + 1;
  2148. assignment_func("iter_value", iter_value, login_var, 0, auto_public); // 注册到self
  2149. return_value.value = key_to_str(tmp_dict_key->key);
  2150. }
  2151. break;
  2152. }
  2153. case __in__func:{ // return index
  2154. var *tmp = find_var(login_var, 0, "value", NULL);
  2155. if(tmp != NULL){
  2156. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  2157. error_space(tmp_result, return_result, return_value);
  2158. get_value = to_str_dict(tmp_result.value, out_var, global_inter);
  2159. error_space(get_value, return_result, return_value);
  2160. var *find_var = find_node(get_value.value.value.string, tmp->value.value.dict_value->dict_value);
  2161. return_value.value.type = BOOL_value;
  2162. if(find_var != NULL){ // not found
  2163. return_value.value.value.bool_value = true;
  2164. }
  2165. else{
  2166. return_value.value.value.bool_value = false;
  2167. }
  2168. }
  2169. else{
  2170. return_value = to_error("Don't get List Value", "ValueException", global_inter);
  2171. goto return_result;
  2172. }
  2173. break;
  2174. }
  2175. case __down__func:{ // return index
  2176. var *tmp = find_var(login_var, 0, "value", NULL);
  2177. if(tmp != NULL){
  2178. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  2179. error_space(tmp_result, return_result, return_value);
  2180. get_value = to_str_dict(tmp_result.value, out_var, global_inter);
  2181. error_space(get_value, return_result, return_value);
  2182. var *find_var = find_node(get_value.value.value.string, tmp->value.value.dict_value->dict_value);
  2183. if(find_var == NULL){ // not found
  2184. return_value = to_error("Dict key Not Found", "KeyException", global_inter);
  2185. goto return_result;
  2186. }
  2187. else{
  2188. return_value.value = find_var->value;
  2189. }
  2190. }
  2191. else{
  2192. return_value.value.type = NULL_value;
  2193. return_value.value.value.int_value = 0;
  2194. }
  2195. break;
  2196. }
  2197. case __set__func:{ // return index
  2198. var *tmp = find_var(login_var, 0, "value", NULL);
  2199. if(tmp != NULL){
  2200. GWARF_result get_value, tmp_result = traverse(tmp_s->u.value, out_var, false, global_inter);
  2201. error_space(tmp_result, return_result, return_value);
  2202. get_value = to_str_dict(tmp_result.value, out_var, global_inter);
  2203. error_space(get_value, return_result, return_value);
  2204. tmp_s = tmp_s->next;
  2205. GWARF_result new_value = traverse(tmp_s->u.value, out_var, false, global_inter);
  2206. error_space(new_value, return_result, return_value);
  2207. login_node(get_value.value.value.string, new_value.value, tmp->value.value.dict_value->dict_value, public); // 插入
  2208. dict_key *tmp_dict_name = tmp->value.value.dict_value->name_list;
  2209. while (1){ // 迭代
  2210. if(!strcmp(tmp_dict_name->key, get_value.value.value.string)){ // 已经存在
  2211. break;
  2212. }
  2213. else if(tmp_dict_name->next == NULL){
  2214. tmp_dict_name->next = malloc(sizeof(dict_key));
  2215. tmp_dict_name->next->next = NULL;
  2216. tmp_dict_name->next->key = malloc(sizeof(get_value.value.value.string));
  2217. strcpy(tmp_dict_name->next->key, get_value.value.value.string); // 复制key
  2218. tmp->value.value.dict_value->index += 1; // 不存在才+1
  2219. break;
  2220. }
  2221. tmp_dict_name = tmp_dict_name->next;
  2222. }
  2223. }
  2224. return_value.value.type = NULL_value;
  2225. return_value.value.value.int_value = 0;
  2226. break;
  2227. }
  2228. default:
  2229. break;
  2230. }
  2231. return_result: return return_value;
  2232. }
  2233. GWARF_result get__assignment__(GWARF_value *base_the_var, var_list *the_var, inter *global_inter){ // 获取__assignment__
  2234. return run_func_core(base_the_var, the_var, "__assignment__", true,global_inter);
  2235. }
  2236. GWARF_result get__next__(GWARF_value *base_the_var, var_list *the_var, inter *global_inter){ // 获取__next__
  2237. return run_func_core(base_the_var, the_var, "__next__", true,global_inter);
  2238. }
  2239. GWARF_result get__iter__(GWARF_value *base_the_var, var_list *the_var, inter *global_inter){ // 获取__iter__
  2240. return run_func_core(base_the_var, the_var, "__iter__", true,global_inter);
  2241. }
  2242. GWARF_result get__value__(GWARF_value *base_the_var, var_list *the_var, inter *global_inter){ // 用于计算的get__value__统一核心
  2243. return run_func(base_the_var, the_var, "__value__",global_inter);
  2244. }
  2245. GWARF_result get__bool__(GWARF_value *base_the_var, var_list *the_var, inter *global_inter){ // 获取__bool__ [所有转换为bool的object都执行这个]
  2246. return run_func(base_the_var, the_var, "__bool__",global_inter);
  2247. }
  2248. GWARF_result run_func_core(GWARF_value *base_the_var, var_list *the_var, char *name, bool only, inter *global_inter){ // 无参数func->直到返回GWARF_value[not class]
  2249. GWARF_result reight_tmp, get = GWARF_result_reset;
  2250. reight_tmp.u = statement_end;
  2251. int times = 0;
  2252. var_list *call_var;
  2253. while(1){
  2254. if(base_the_var->type == CLASS_value){ // is class so that can use "."
  2255. call_var = base_the_var->value.class_value->the_var;
  2256. }
  2257. else if(base_the_var->type == OBJECT_value){
  2258. call_var = base_the_var->value.object_value->the_var;
  2259. }
  2260. else{
  2261. reight_tmp.u = return_def;
  2262. reight_tmp.value = *base_the_var;
  2263. reight_tmp.return_times = times;
  2264. goto return_result; // 如果类型不是object或者class
  2265. }
  2266. var *tmp_var = find_var(call_var, 0, name, NULL);
  2267. if(tmp_var != NULL){
  2268. get.value = tmp_var->value; // TODO:: 需要检查__value__是否存在
  2269. get.father = base_the_var; // 设置father
  2270. reight_tmp = call_back_core(get, the_var, NULL, global_inter);
  2271. error_space(reight_tmp, return_result, reight_tmp);
  2272. if(only){ // 不需要重复获取,比如__iter__,__next__
  2273. goto return_result;
  2274. }
  2275. else{
  2276. times = reight_tmp.return_times;
  2277. base_the_var = &(reight_tmp.value); // 重复获取__value__[直到类型不是object或class]
  2278. }
  2279. }
  2280. else{
  2281. char *tmp = malloc((size_t)( 21 + strlen(name)) );
  2282. sprintf(tmp, "Name Not Found [%s]\n", name);
  2283. reight_tmp = to_error(tmp, "NameException", global_inter);
  2284. goto return_result;
  2285. }
  2286. }
  2287. return_result: return reight_tmp;
  2288. }