1
0

cfunc.c 93 KB

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