run_code.c 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256
  1. #include <stdio.h>
  2. #include "aFun.h"
  3. size_t getSize(char *id, af_Object *obj) {
  4. return sizeof(int *);
  5. }
  6. void initData(char *id, af_Object *obj, int **data, af_Environment *env) {
  7. *data = calloc(1, sizeof(int));
  8. **data = 100;
  9. }
  10. void freeData(char *id, af_Object *obj, int **data, af_Environment *env) {
  11. printf("freeData(): **data = %d\n", **data);
  12. free(*data);
  13. }
  14. size_t getSize2(char *id, af_Object *obj) {
  15. return sizeof(af_VarSpaceListNode *);
  16. }
  17. void initData2(char *id, af_Object *obj, af_VarSpaceListNode **data, af_Environment *env) {
  18. *data = makeVarSpaceList(getProtectVarSpace(env));
  19. }
  20. void freeData2(char *id, af_Object *obj, af_VarSpaceListNode **data, af_Environment *env) {
  21. printf("freeData2(): vsl = %p\n", *data);
  22. freeAllVarSpaceList(*data);
  23. }
  24. size_t getSize3(char *id, af_Object *obj) {
  25. return sizeof(af_VarSpace *);
  26. }
  27. void initData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
  28. *data = makeVarSpace(obj, 3, 2, 0, env);
  29. }
  30. void freeData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
  31. printf("freeData(): *data = %p\n", *data);
  32. }
  33. af_GcList *getGcList3(char *id, af_Object *obj, void *data) {
  34. af_GcList *gl = pushGcList(glt_vs, *(af_VarSpace **)data, NULL);
  35. return gl;
  36. }
  37. af_VarSpace *getShareVS(char *id, af_Object *obj) {
  38. return *(af_VarSpace **)getObjectData(obj);
  39. }
  40. bool getAcl(char *id, af_Object *obj, af_ArgCodeList **acl, af_Code *code, int **mark, af_Environment *env) {
  41. *acl = makeArgCodeList(makeElementCode("object", NUL, 0, "Unknown"), 0, true, false);
  42. *mark = calloc(1, sizeof(int));
  43. **mark = 100;
  44. return true;
  45. }
  46. bool getVsl(char *id, af_Object *obj, af_VarSpaceListNode **vsl, void *mark, af_Environment *env) {
  47. *vsl = *(af_VarSpaceListNode **)getObjectData(obj);
  48. return true;
  49. }
  50. af_GcList *getGcList(char *id, af_Object *obj, void *data) {
  51. af_GcList *gl = pushGcList(glt_vsl, *(af_VarSpaceListNode **)data, NULL);
  52. return gl;
  53. }
  54. bool getAl(char *id, af_Object *obj, af_ArgList **al, af_ArgCodeList *acl, void *mark, af_Environment *env) {
  55. *al = makeArgList("test", getArgCodeListResult(acl));
  56. return true;
  57. }
  58. void literalSet(char *id, af_Object *obj, void *data, char *str, af_Environment *env) {
  59. printf("literalSet(): str = %s\n", str);
  60. }
  61. af_FuncBody *testFunc(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  62. printf("testFunc(): I am testFunc\n");
  63. af_Object *obj;
  64. {
  65. af_ObjectAPI *api = makeObjectAPI();
  66. DLC_SYMBOL(objectAPIFunc) literal_set = MAKE_SYMBOL(literalSet, objectAPIFunc);
  67. if (addAPI(literal_set, "obj_literalSetting", api) != 1)
  68. return NULL;
  69. obj = makeObject("func", true, api, true, NULL, NULL, env);
  70. FREE_SYMBOL(literal_set);
  71. }
  72. pushMessageDown(makeNORMALMessage(obj), env);
  73. return NULL;
  74. }
  75. bool getInfo(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  76. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  77. makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
  78. DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc, callFuncBody);
  79. makeCFuncBodyToFuncInfo(func, NULL, *fi);
  80. FREE_SYMBOL(func);
  81. return true;
  82. }
  83. void freeMark(char *id, af_Object *obj, int *mark) {
  84. printf("freeMark(): mark = %d\n", *mark);
  85. free(mark);
  86. }
  87. af_FuncBody *testFunc2(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  88. printf("testFunc2(): I am testFunc2\n");
  89. af_Object *obj;
  90. {
  91. af_ObjectAPI *api = makeObjectAPI();
  92. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  93. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  94. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  95. DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
  96. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  97. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  98. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  99. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  100. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  101. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  102. return NULL;
  103. if (addAPI(initData_2, "obj_initData", api) != 1)
  104. return NULL;
  105. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  106. return NULL;
  107. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  108. return NULL;
  109. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  110. return NULL;
  111. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  112. return NULL;
  113. if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
  114. return NULL;
  115. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  116. return NULL;
  117. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  118. return NULL;
  119. obj = makeObject("func", true, api, true, NULL, NULL, env);
  120. FREE_SYMBOL(getSize_2);
  121. FREE_SYMBOL(initData_2);
  122. FREE_SYMBOL(freeData_2);
  123. FREE_SYMBOL(get_alc);
  124. FREE_SYMBOL(get_vsl);
  125. FREE_SYMBOL(get_al);
  126. FREE_SYMBOL(get_info);
  127. FREE_SYMBOL(free_mark);
  128. FREE_SYMBOL(get_gl);
  129. }
  130. pushMessageDown(makeNORMALMessage(obj), env);
  131. return NULL;
  132. }
  133. bool getInfo2(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  134. *fi = makeFuncInfo(normal_scope, not_embedded, true, true, true);
  135. makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
  136. DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc2, callFuncBody);
  137. makeCFuncBodyToFuncInfo(func, NULL, *fi);
  138. FREE_SYMBOL(func);
  139. return true;
  140. }
  141. bool getInfo3(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  142. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  143. makeCodeFuncBodyToFuncInfo(makeElementCode("data3", NUL, 0, "Unknown"), true, NULL, *fi);
  144. return true;
  145. }
  146. af_FuncBody *testFunc4(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  147. printf("testFunc4(): I am testFunc4\n");
  148. af_Object *obj;
  149. {
  150. af_ObjectAPI *api = makeObjectAPI();
  151. DLC_SYMBOL(objectAPIFunc) literal_set = MAKE_SYMBOL(literalSet, objectAPIFunc);
  152. if (addAPI(literal_set, "obj_literalSetting", api) != 1)
  153. return NULL;
  154. obj = makeObject("func", true, api, true, NULL, NULL, env);
  155. FREE_SYMBOL(literal_set);
  156. }
  157. pushMessageDown(makeNORMALMessage(obj), env);
  158. return NULL;
  159. }
  160. bool getInfo4(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  161. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  162. DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc4, callFuncBody);
  163. makeCFuncBodyToFuncInfo(func, NULL, *fi);
  164. FREE_SYMBOL(func);
  165. return true;
  166. }
  167. af_FuncBody *testFunc9(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  168. af_Object *obj;
  169. af_FuncBody *fb;
  170. obj = makeObject("obj", true, makeObjectAPI(), true, NULL, NULL, env);
  171. pushMessageDown(makeNORMALMessage(obj), env);
  172. printf("testFunc9(%p): I am testFunc9\n", obj);
  173. DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc9, callFuncBody);
  174. fb = makeCFuncBody(func1, NULL);
  175. FREE_SYMBOL(func1);
  176. return fb;
  177. }
  178. bool getInfo9(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  179. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  180. DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc9, callFuncBody);
  181. makeCFuncBodyToFuncInfo(func1, NULL, *fi);
  182. FREE_SYMBOL(func1);
  183. makeDynamicFuncBodyToFuncInfo(*fi);
  184. return true;
  185. }
  186. af_FuncBody *testFunc8(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  187. af_Object *obj;
  188. obj = makeObject("obj", true, makeObjectAPI(), true, NULL, NULL, env);
  189. pushMessageDown(makeNORMALMessage(obj), env);
  190. printf("testFunc8(%p): I am testFunc8\n", obj);
  191. fflush(stdout);
  192. return NULL;
  193. }
  194. af_FuncBody *testFunc7(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  195. af_Object *obj;
  196. obj = makeObject("func", true, makeObjectAPI(), true, NULL, NULL, env);
  197. pushMessageDown(makeNORMALMessage(obj), env);
  198. printf("testFunc7[des](%p): I am testFunc7\n", obj);
  199. fflush(stdout);
  200. return NULL;
  201. }
  202. bool getInfo7(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  203. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  204. DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc7, callFuncBody);
  205. makeCFuncBodyToFuncInfo(func, NULL, *fi);
  206. FREE_SYMBOL(func);
  207. return true;
  208. }
  209. af_FuncBody *testFunc6(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  210. af_Object *obj;
  211. af_Object *des;
  212. obj = makeObject("func", true, makeObjectAPI(), true, NULL, NULL, env);
  213. {
  214. af_ObjectAPI *api = makeObjectAPI();
  215. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  216. DLC_SYMBOL(objectAPIFunc) get_info7 = MAKE_SYMBOL(getInfo7, objectAPIFunc);
  217. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  218. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  219. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  220. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  221. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  222. return NULL;
  223. if (addAPI(initData_2, "obj_initData", api) != 1)
  224. return NULL;
  225. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  226. return NULL;
  227. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  228. return NULL;
  229. if (addAPI(get_info7, "obj_funcGetInfo", api) != 1)
  230. return NULL;
  231. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  232. return NULL;
  233. des = makeObject("func-des", true, api, true, NULL, NULL, env);
  234. FREE_SYMBOL(get_vsl);
  235. FREE_SYMBOL(get_info7);
  236. FREE_SYMBOL(get_gl);
  237. FREE_SYMBOL(getSize_2);
  238. FREE_SYMBOL(initData_2);
  239. FREE_SYMBOL(freeData_2);
  240. }
  241. setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
  242. pushMessageDown(makeNORMALMessage(obj), env);
  243. printf("testFunc6[des](%p, %p): I am testFunc6\n", obj, des);
  244. return NULL;
  245. }
  246. bool getInfo6(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  247. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  248. DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc6, callFuncBody);
  249. makeCFuncBodyToFuncInfo(func1, NULL, *fi);
  250. FREE_SYMBOL(func1);
  251. DLC_SYMBOL(callFuncBody) func2 = MAKE_SYMBOL(testFunc8, callFuncBody);
  252. makeCFuncBodyToFuncInfo(func2, NULL, *fi);
  253. FREE_SYMBOL(func2);
  254. return true;
  255. }
  256. af_FuncBody *testFunc5(CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
  257. af_Object *obj;
  258. af_Object *des;
  259. obj = makeObject("func", true, makeObjectAPI(), true, NULL, NULL, env);
  260. {
  261. af_ObjectAPI *api = makeObjectAPI();
  262. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  263. DLC_SYMBOL(objectAPIFunc) get_info6 = MAKE_SYMBOL(getInfo6, objectAPIFunc);
  264. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  265. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  266. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  267. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  268. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  269. return NULL;
  270. if (addAPI(initData_2, "obj_initData", api) != 1)
  271. return NULL;
  272. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  273. return NULL;
  274. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  275. return NULL;
  276. if (addAPI(get_info6, "obj_funcGetInfo", api) != 1)
  277. return NULL;
  278. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  279. return NULL;
  280. des = makeObject("func-des", true, api, true, NULL, NULL, env);
  281. FREE_SYMBOL(get_vsl);
  282. FREE_SYMBOL(get_info6);
  283. FREE_SYMBOL(get_gl);
  284. FREE_SYMBOL(getSize_2);
  285. FREE_SYMBOL(initData_2);
  286. FREE_SYMBOL(freeData_2);
  287. }
  288. setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
  289. pushMessageDown(makeNORMALMessage(obj), env);
  290. printf("testFunc5(%p, %p): I am testFunc5\n", obj, des);
  291. return NULL;
  292. }
  293. bool getInfo5(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  294. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  295. DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc5, callFuncBody);
  296. makeCFuncBodyToFuncInfo(func, NULL, *fi);
  297. FREE_SYMBOL(func);
  298. makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
  299. return true;
  300. }
  301. bool getInfo10(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  302. *fi = makeFuncInfo(normal_scope, not_embedded, true, true, true);
  303. makeCodeFuncBodyToFuncInfo(makeElementCode("no-var", NUL, 1, "func9.info.aun"), true, NULL, *fi);
  304. return true;
  305. }
  306. bool getInfo11(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
  307. *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
  308. makeImportFuncBodyToFuncInfo(makeElementCode("global", NUL, 1, "func9.info.aun"), true, NULL, *fi);
  309. return true;
  310. }
  311. bool objFunc(char *id, af_Object *obj) {
  312. return true;
  313. }
  314. bool infixFunc(char *id, af_Object *obj) {
  315. return true;
  316. }
  317. int main() {
  318. aFunInit();
  319. printf("Hello World\n");
  320. af_Environment *env = creatAFunEnviroment();
  321. if(!pushLiteralRegex("data.*", "func", true, env)) {
  322. fprintf(stderr, "pushLiteralRegex Error\n");
  323. goto RETURN_1;
  324. }
  325. {
  326. af_ObjectAPI *api = makeObjectAPI();
  327. af_Object *obj;
  328. DLC_SYMBOL(objectAPIFunc) getSize_3 = MAKE_SYMBOL(getSize3, objectAPIFunc);
  329. DLC_SYMBOL(objectAPIFunc) initData_3 = MAKE_SYMBOL(initData3, objectAPIFunc);
  330. DLC_SYMBOL(objectAPIFunc) freeData_3 = MAKE_SYMBOL(freeData3, objectAPIFunc);
  331. DLC_SYMBOL(objectAPIFunc) getShareVS_ = MAKE_SYMBOL(getShareVS, objectAPIFunc);
  332. DLC_SYMBOL(objectAPIFunc) get_gl3 = MAKE_SYMBOL(getGcList3, objectAPIFunc);
  333. if (addAPI(getSize_3, "obj_getDataSize", api) != 1)
  334. goto RETURN_2;
  335. if (addAPI(initData_3, "obj_initData", api) != 1)
  336. goto RETURN_2;
  337. if (addAPI(freeData_3, "obj_destructData", api) != 1)
  338. goto RETURN_2;
  339. if (addAPI(getShareVS_, "obj_getShareVarSpace", api) != 1)
  340. goto RETURN_2;
  341. if (addAPI(get_gl3, "obj_getGcList", api) != 1)
  342. goto RETURN_2;
  343. addVarToProtectVarSpace(makeVar("object", 3, 3, 3,
  344. (obj = makeObject("object", true, api, true, NULL, NULL, env)),
  345. env),
  346. env);
  347. FREE_SYMBOL(getSize_3);
  348. FREE_SYMBOL(initData_3);
  349. FREE_SYMBOL(freeData_3);
  350. FREE_SYMBOL(getShareVS_);
  351. FREE_SYMBOL(get_gl3);
  352. printf("object(%p)\n", obj);
  353. }
  354. {
  355. af_ObjectAPI *api = makeObjectAPI();
  356. af_Object *obj;
  357. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  358. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  359. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  360. DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
  361. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  362. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  363. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  364. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  365. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  366. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  367. goto RETURN_2;
  368. if (addAPI(initData_2, "obj_initData", api) != 1)
  369. goto RETURN_2;
  370. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  371. goto RETURN_2;
  372. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  373. goto RETURN_2;
  374. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  375. goto RETURN_2;
  376. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  377. goto RETURN_2;
  378. if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
  379. goto RETURN_2;
  380. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  381. goto RETURN_2;
  382. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  383. goto RETURN_2;
  384. addVarToProtectVarSpace(makeVar("func", 3, 3, 3,
  385. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  386. env);
  387. FREE_SYMBOL(get_alc);
  388. FREE_SYMBOL(get_vsl);
  389. FREE_SYMBOL(get_al);
  390. FREE_SYMBOL(get_info);
  391. FREE_SYMBOL(free_mark);
  392. FREE_SYMBOL(get_gl);
  393. FREE_SYMBOL(getSize_2);
  394. FREE_SYMBOL(initData_2);
  395. FREE_SYMBOL(freeData_2);
  396. printf("func(%p)\n", obj);
  397. }
  398. {
  399. af_ObjectAPI *api = makeObjectAPI();
  400. af_Object *obj;
  401. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  402. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  403. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  404. DLC_SYMBOL(objectAPIFunc) get_info2 = MAKE_SYMBOL(getInfo2, objectAPIFunc); // 宏函数
  405. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  406. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  407. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  408. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  409. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  410. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  411. goto RETURN_2;
  412. if (addAPI(initData_2, "obj_initData", api) != 1)
  413. goto RETURN_2;
  414. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  415. goto RETURN_2;
  416. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  417. goto RETURN_2;
  418. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  419. goto RETURN_2;
  420. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  421. goto RETURN_2;
  422. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  423. goto RETURN_2;
  424. if (addAPI(get_info2, "obj_funcGetInfo", api) != 1)
  425. goto RETURN_2;
  426. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  427. goto RETURN_2;
  428. addVarToProtectVarSpace(makeVar("func2", 3, 3, 3,
  429. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  430. env);
  431. FREE_SYMBOL(get_alc);
  432. FREE_SYMBOL(get_vsl);
  433. FREE_SYMBOL(get_al);
  434. FREE_SYMBOL(get_info2);
  435. FREE_SYMBOL(free_mark);
  436. FREE_SYMBOL(get_gl);
  437. FREE_SYMBOL(getSize_2);
  438. FREE_SYMBOL(initData_2);
  439. FREE_SYMBOL(freeData_2);
  440. printf("func2(%p)\n", obj);
  441. }
  442. {
  443. af_ObjectAPI *api = makeObjectAPI();
  444. af_Object *obj;
  445. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  446. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  447. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  448. DLC_SYMBOL(objectAPIFunc) get_info3 = MAKE_SYMBOL(getInfo3, objectAPIFunc);
  449. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  450. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  451. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  452. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  453. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  454. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  455. goto RETURN_2;
  456. if (addAPI(initData_2, "obj_initData", api) != 1)
  457. goto RETURN_2;
  458. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  459. goto RETURN_2;
  460. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  461. goto RETURN_2;
  462. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  463. goto RETURN_2;
  464. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  465. goto RETURN_2;
  466. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  467. goto RETURN_2;
  468. if (addAPI(get_info3, "obj_funcGetInfo", api) != 1)
  469. goto RETURN_2;
  470. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  471. goto RETURN_2;
  472. addVarToProtectVarSpace(makeVar("func3", 3, 3, 3,
  473. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  474. env);
  475. FREE_SYMBOL(get_alc);
  476. FREE_SYMBOL(get_vsl);
  477. FREE_SYMBOL(get_al);
  478. FREE_SYMBOL(get_info3);
  479. FREE_SYMBOL(free_mark);
  480. FREE_SYMBOL(get_gl);
  481. FREE_SYMBOL(getSize_2);
  482. FREE_SYMBOL(initData_2);
  483. FREE_SYMBOL(freeData_2);
  484. printf("func3(%p)\n", obj);
  485. }
  486. {
  487. af_ObjectAPI *api = makeObjectAPI();
  488. af_Object *obj;
  489. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  490. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  491. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  492. DLC_SYMBOL(objectAPIFunc) get_info4 = MAKE_SYMBOL(getInfo4, objectAPIFunc);
  493. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  494. DLC_SYMBOL(objectAPIFunc) obj_func = MAKE_SYMBOL(objFunc, objectAPIFunc);
  495. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  496. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  497. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  498. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  499. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  500. goto RETURN_2;
  501. if (addAPI(initData_2, "obj_initData", api) != 1)
  502. goto RETURN_2;
  503. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  504. goto RETURN_2;
  505. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  506. goto RETURN_2;
  507. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  508. goto RETURN_2;
  509. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  510. goto RETURN_2;
  511. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  512. goto RETURN_2;
  513. if (addAPI(get_info4, "obj_funcGetInfo", api) != 1)
  514. goto RETURN_2;
  515. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  516. goto RETURN_2;
  517. if (addAPI(obj_func, "obj_isObjFunc", api) != 1)
  518. goto RETURN_2;
  519. addVarToProtectVarSpace(makeVar("func4", 3, 3, 3,
  520. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  521. env);
  522. FREE_SYMBOL(get_alc);
  523. FREE_SYMBOL(get_vsl);
  524. FREE_SYMBOL(get_al);
  525. FREE_SYMBOL(get_info4);
  526. FREE_SYMBOL(free_mark);
  527. FREE_SYMBOL(obj_func);
  528. FREE_SYMBOL(get_gl);
  529. FREE_SYMBOL(getSize_2);
  530. FREE_SYMBOL(initData_2);
  531. FREE_SYMBOL(freeData_2);
  532. printf("func4(%p)\n", obj);
  533. }
  534. {
  535. af_ObjectAPI *api = makeObjectAPI();
  536. af_Object *obj;
  537. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  538. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  539. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  540. DLC_SYMBOL(objectAPIFunc) get_info5 = MAKE_SYMBOL(getInfo5, objectAPIFunc);
  541. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  542. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  543. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  544. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  545. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  546. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  547. goto RETURN_2;
  548. if (addAPI(initData_2, "obj_initData", api) != 1)
  549. goto RETURN_2;
  550. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  551. goto RETURN_2;
  552. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  553. goto RETURN_2;
  554. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  555. goto RETURN_2;
  556. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  557. goto RETURN_2;
  558. if (addAPI(get_info5, "obj_funcGetInfo", api) != 1)
  559. goto RETURN_2;
  560. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  561. goto RETURN_2;
  562. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  563. goto RETURN_2;
  564. addVarToProtectVarSpace(makeVar("func5", 3, 3, 3,
  565. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  566. env);
  567. FREE_SYMBOL(get_alc);
  568. FREE_SYMBOL(get_vsl);
  569. FREE_SYMBOL(get_al);
  570. FREE_SYMBOL(get_info5);
  571. FREE_SYMBOL(free_mark);
  572. FREE_SYMBOL(get_gl);
  573. FREE_SYMBOL(getSize_2);
  574. FREE_SYMBOL(initData_2);
  575. FREE_SYMBOL(freeData_2);
  576. printf("func5(%p)\n", obj);
  577. }
  578. {
  579. af_Object *obj = makeObject("func", true, makeObjectAPI(), true, NULL, NULL, env);
  580. af_Object *des;
  581. {
  582. af_ObjectAPI *api = makeObjectAPI();
  583. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  584. DLC_SYMBOL(objectAPIFunc) get_info6 = MAKE_SYMBOL(getInfo6, objectAPIFunc);
  585. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  586. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  587. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  588. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  589. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  590. goto RETURN_2;
  591. if (addAPI(initData_2, "obj_initData", api) != 1)
  592. goto RETURN_2;
  593. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  594. goto RETURN_2;
  595. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  596. goto RETURN_2;
  597. if (addAPI(get_info6, "obj_funcGetInfo", api) != 1)
  598. goto RETURN_2;
  599. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  600. goto RETURN_2;
  601. des = makeObject("func-des", true, api, true, NULL, NULL, env);
  602. FREE_SYMBOL(get_vsl);
  603. FREE_SYMBOL(get_info6);
  604. FREE_SYMBOL(get_gl);
  605. FREE_SYMBOL(getSize_2);
  606. FREE_SYMBOL(initData_2);
  607. FREE_SYMBOL(freeData_2);
  608. }
  609. setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
  610. addVarToProtectVarSpace(makeVar("func6", 3, 3, 3, obj, env), env);
  611. printf("func6(%p)\n", obj);
  612. }
  613. {
  614. af_ObjectAPI *api = makeObjectAPI();
  615. af_Object *obj;
  616. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  617. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  618. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  619. DLC_SYMBOL(objectAPIFunc) get_info9 = MAKE_SYMBOL(getInfo9, objectAPIFunc);
  620. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  621. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  622. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  623. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  624. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  625. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  626. goto RETURN_2;
  627. if (addAPI(initData_2, "obj_initData", api) != 1)
  628. goto RETURN_2;
  629. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  630. goto RETURN_2;
  631. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  632. goto RETURN_2;
  633. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  634. goto RETURN_2;
  635. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  636. goto RETURN_2;
  637. if (addAPI(get_info9, "obj_funcGetInfo", api) != 1)
  638. goto RETURN_2;
  639. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  640. goto RETURN_2;
  641. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  642. goto RETURN_2;
  643. addVarToProtectVarSpace(makeVar("func7", 3, 3, 3,
  644. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  645. env);
  646. FREE_SYMBOL(get_alc);
  647. FREE_SYMBOL(get_vsl);
  648. FREE_SYMBOL(get_al);
  649. FREE_SYMBOL(get_info9);
  650. FREE_SYMBOL(free_mark);
  651. FREE_SYMBOL(get_gl);
  652. FREE_SYMBOL(getSize_2);
  653. FREE_SYMBOL(initData_2);
  654. FREE_SYMBOL(freeData_2);
  655. printf("func7(%p)\n", obj);
  656. }
  657. {
  658. af_ObjectAPI *api = makeObjectAPI();
  659. af_Object *obj;
  660. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  661. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  662. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  663. DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
  664. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  665. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  666. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  667. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  668. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  669. DLC_SYMBOL(objectAPIFunc) infix_func = MAKE_SYMBOL(infixFunc, objectAPIFunc);
  670. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  671. goto RETURN_2;
  672. if (addAPI(initData_2, "obj_initData", api) != 1)
  673. goto RETURN_2;
  674. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  675. goto RETURN_2;
  676. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  677. goto RETURN_2;
  678. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  679. goto RETURN_2;
  680. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  681. goto RETURN_2;
  682. if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
  683. goto RETURN_2;
  684. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  685. goto RETURN_2;
  686. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  687. goto RETURN_2;
  688. if (addAPI(infix_func, "obj_isInfixFunc", api) != 1)
  689. goto RETURN_2;
  690. addVarToProtectVarSpace(makeVar("func8", 3, 3, 3,
  691. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  692. env);
  693. FREE_SYMBOL(get_alc);
  694. FREE_SYMBOL(get_vsl);
  695. FREE_SYMBOL(get_al);
  696. FREE_SYMBOL(get_info);
  697. FREE_SYMBOL(free_mark);
  698. FREE_SYMBOL(get_gl);
  699. FREE_SYMBOL(getSize_2);
  700. FREE_SYMBOL(initData_2);
  701. FREE_SYMBOL(freeData_2);
  702. FREE_SYMBOL(infix_func);
  703. printf("func8(%p)\n", obj);
  704. }
  705. {
  706. af_ObjectAPI *api = makeObjectAPI();
  707. af_Object *obj;
  708. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  709. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  710. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  711. DLC_SYMBOL(objectAPIFunc) get_info10 = MAKE_SYMBOL(getInfo10, objectAPIFunc);
  712. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  713. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  714. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  715. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  716. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  717. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  718. goto RETURN_2;
  719. if (addAPI(initData_2, "obj_initData", api) != 1)
  720. goto RETURN_2;
  721. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  722. goto RETURN_2;
  723. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  724. goto RETURN_2;
  725. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  726. goto RETURN_2;
  727. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  728. goto RETURN_2;
  729. if (addAPI(get_info10, "obj_funcGetInfo", api) != 1)
  730. goto RETURN_2;
  731. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  732. goto RETURN_2;
  733. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  734. goto RETURN_2;
  735. addVarToProtectVarSpace(makeVar("func9", 3, 3, 3,
  736. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  737. env);
  738. FREE_SYMBOL(get_alc);
  739. FREE_SYMBOL(get_vsl);
  740. FREE_SYMBOL(get_al);
  741. FREE_SYMBOL(get_info10);
  742. FREE_SYMBOL(free_mark);
  743. FREE_SYMBOL(get_gl);
  744. FREE_SYMBOL(getSize_2);
  745. FREE_SYMBOL(initData_2);
  746. FREE_SYMBOL(freeData_2);
  747. printf("func9(%p)\n", obj);
  748. }
  749. {
  750. af_ObjectAPI *api = makeObjectAPI();
  751. af_Object *obj;
  752. DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
  753. DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
  754. DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
  755. DLC_SYMBOL(objectAPIFunc) get_info11 = MAKE_SYMBOL(getInfo11, objectAPIFunc);
  756. DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
  757. DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
  758. DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
  759. DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
  760. DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
  761. if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
  762. goto RETURN_2;
  763. if (addAPI(initData_2, "obj_initData", api) != 1)
  764. goto RETURN_2;
  765. if (addAPI(freeData_2, "obj_destructData", api) != 1)
  766. goto RETURN_2;
  767. if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
  768. goto RETURN_2;
  769. if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
  770. goto RETURN_2;
  771. if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
  772. goto RETURN_2;
  773. if (addAPI(get_info11, "obj_funcGetInfo", api) != 1)
  774. goto RETURN_2;
  775. if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
  776. goto RETURN_2;
  777. if (addAPI(get_gl, "obj_getGcList", api) != 1)
  778. goto RETURN_2;
  779. addVarToProtectVarSpace(makeVar("func10", 3, 3, 3,
  780. (obj = makeObject("func", true, api, true, NULL, NULL, env)), env),
  781. env);
  782. FREE_SYMBOL(get_alc);
  783. FREE_SYMBOL(get_vsl);
  784. FREE_SYMBOL(get_al);
  785. FREE_SYMBOL(get_info11);
  786. FREE_SYMBOL(free_mark);
  787. FREE_SYMBOL(get_gl);
  788. FREE_SYMBOL(getSize_2);
  789. FREE_SYMBOL(initData_2);
  790. FREE_SYMBOL(freeData_2);
  791. printf("func9(%p)\n", obj);
  792. }
  793. printf("\n");
  794. { // 正常程序
  795. printf("TAG A:\n");
  796. af_Code *bt1 = makeElementCode("object", 0, 1, "Taga.aun");
  797. af_Code *bt2 = makeElementCode("data", ',', 0, NULL);
  798. pushCode(&bt1, bt2);
  799. af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
  800. af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
  801. pushCode(&bt2, bt5);
  802. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  803. pushCode(&bt5, bt6);
  804. runCodeFromMemory(bt1, env);
  805. freeAllCode(bt1);
  806. printf("\n");
  807. }
  808. { // 宏函数
  809. printf("TAG L:\n");
  810. af_Code *bt1 = makeElementCode("object", 0, 1, "Tagl.aun");
  811. af_Code *bt3 = makeElementCode("func2", 0, 1, NULL);
  812. af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
  813. pushCode(&bt1, bt5);
  814. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  815. pushCode(&bt5, bt6);
  816. runCodeFromMemory(bt1, env);
  817. freeAllCode(bt1);
  818. printf("\n");
  819. }
  820. { // 尾调递归优化
  821. printf("TAG B:\n");
  822. af_Code *bt1 = makeElementCode("data", ',', 0, "Tagb.aun");
  823. af_Code *bt2 = makeElementCode("object", 0, 1, NULL);
  824. pushCode(&bt1, bt2);
  825. af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
  826. af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
  827. pushCode(&bt2, bt5);
  828. runCodeFromMemory(bt1, env);
  829. freeAllCode(bt1);
  830. printf("\n");
  831. }
  832. { // 尾调递归优化2
  833. printf("TAG C:\n");
  834. af_Code *bt1 = makeElementCode("data", ',', 0, "Tagc.aun");
  835. runCodeFromMemory(bt1, env);
  836. freeAllCode(bt1);
  837. printf("\n");
  838. }
  839. { // 测试类前缀调用
  840. printf("TAG D:\n");
  841. af_Code *bt1 = makeElementCode("data", ',', 0, "Tagd.aun");
  842. af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
  843. pushCode(&bt1, bt2);
  844. af_Code *bt5 = makeBlockCode(parentheses, NULL, 0, 1, NULL, NULL);
  845. pushCode(&bt2, bt5);
  846. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  847. pushCode(&bt5, bt6);
  848. runCodeFromMemory(bt1, env);
  849. freeAllCode(bt1);
  850. printf("\n");
  851. }
  852. { // 测试顺序执行 '(xxx)
  853. printf("TAG E:\n");
  854. af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
  855. af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
  856. pushCode(&bt3, bt4);
  857. af_Code *bt5 = makeBlockCode(parentheses, bt3, '\'', 1, "Tage.aun", NULL);
  858. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  859. pushCode(&bt5, bt6);
  860. runCodeFromMemory(bt5, env);
  861. freeAllCode(bt5);
  862. printf("\n");
  863. }
  864. { // 测试顺序执行 ,[xxx]
  865. printf("TAG F:\n");
  866. af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
  867. af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
  868. pushCode(&bt3, bt4);
  869. af_Code *bt5 = makeBlockCode(brackets, bt3, ',', 1, "Tagf.aun", NULL);
  870. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  871. pushCode(&bt5, bt6);
  872. runCodeFromMemory(bt5, env);
  873. freeAllCode(bt5);
  874. printf("\n");
  875. }
  876. { // 测试顺序执行 '(xxx) 【尾调递归优化】
  877. printf("TAG G:\n");
  878. af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
  879. af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
  880. pushCode(&bt3, bt4);
  881. af_Code *bt5 = makeBlockCode(parentheses, bt3, '\'', 1, "Tagg.aun", NULL);
  882. runCodeFromMemory(bt5, env);
  883. freeAllCode(bt5);
  884. printf("\n");
  885. }
  886. { // 测试顺序执行 ,[xxx] 【尾调递归优化】
  887. printf("TAG H:\n");
  888. af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
  889. af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
  890. pushCode(&bt3, bt4);
  891. af_Code *bt5 = makeBlockCode(brackets, bt3, ',', 1, "Tagh.aun", NULL);
  892. runCodeFromMemory(bt5, env);
  893. freeAllCode(bt5);
  894. printf("\n");
  895. }
  896. { // 双层尾调递归优化 (函数内调用函数)
  897. printf("TAG I:\n");
  898. af_Code *bt2 = makeElementCode("func3", 0, 1, NULL);
  899. af_Code *bt3 = makeBlockCode(curly, bt2, 0, 1, "Tagi.aun", NULL);
  900. af_Code *bt4 = makeElementCode("func3", 0, 1, NULL);
  901. af_Code *bt5 = makeBlockCode(curly, bt4, 0, 1, NULL, NULL);
  902. pushCode(&bt3, bt5);
  903. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  904. pushCode(&bt5, bt6);
  905. runCodeFromMemory(bt3, env);
  906. freeAllCode(bt3);
  907. printf("\n");
  908. }
  909. { // 对象函数的调用
  910. printf("TAG J:\n");
  911. af_Code *bt1 = makeElementCode("func4", 0, 1, "Tagj.aun");
  912. af_Code *bt2 = makeElementCode("global", 0, 1, NULL);
  913. pushCode(&bt1, bt2);
  914. runCodeFromMemory(bt1, env);
  915. freeAllCode(bt1);
  916. printf("\n");
  917. }
  918. { // 变量引用调用
  919. printf("TAG K:\n");
  920. af_Code *bt1 = makeElementCode("func4", '\'', 1, "Tagk.aun");
  921. af_Code *bt2 = makeElementCode("global", 0, 1, NULL);
  922. pushCode(&bt1, bt2);
  923. runCodeFromMemory(bt1, env);
  924. freeAllCode(bt1);
  925. printf("\n");
  926. }
  927. { // 对象函数的调用 (尾调递归优化)
  928. printf("TAG L:\n");
  929. af_Code *bt1 = makeElementCode("func4", 0, 1, "Tagl.aun");
  930. runCodeFromMemory(bt1, env);
  931. freeAllCode(bt1);
  932. printf("\n");
  933. }
  934. { // 函数调用
  935. printf("TAG M:\n");
  936. af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
  937. af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagm.aun", NULL);
  938. runCodeFromMemory(bt1, env);
  939. freeAllCode(bt1);
  940. printf("\n");
  941. }
  942. { // gc测试
  943. printf("TAG N:\n");
  944. af_Code *bt2 = makeElementCode("func5", 0, 1, NULL);
  945. af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagn.aun", NULL);
  946. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  947. af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
  948. pushCode(&bt1, bt3);
  949. pushCode(&bt3, bt4);
  950. runCodeFromMemory(bt1, env);
  951. freeAllCode(bt1);
  952. printf("\n");
  953. }
  954. { // func_body_dynamic 测试
  955. printf("TAG O:\n");
  956. af_Code *bt2 = makeElementCode("func7", 0, 1, NULL);
  957. af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tago.aun", NULL);
  958. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  959. pushCode(&bt1, bt3);
  960. runCodeFromMemory(bt1, env);
  961. freeAllCode(bt1);
  962. printf("\n");
  963. }
  964. { // 中缀调用测试
  965. printf("TAG P:\n");
  966. af_Code *bt2 = makeElementCode("func8", 0, 1, NULL);
  967. af_Code *bt1 = makeBlockCode(brackets, bt2, 0, 1, "Tagp.aun", NULL);
  968. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  969. pushCode(&bt1, bt3);
  970. runCodeFromMemory(bt1, env);
  971. freeAllCode(bt1);
  972. printf("\n");
  973. }
  974. { // func_body_import 测试
  975. printf("TAG Q:\n");
  976. af_Code *bt2 = makeElementCode("func10", 0, 1, NULL);
  977. af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagq.aun", NULL);
  978. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  979. pushCode(&bt1, bt3);
  980. runCodeFromMemory(bt1, env);
  981. freeAllCode(bt1);
  982. printf("\n");
  983. }
  984. { // 导入式运行
  985. printf("TAG R:\n");
  986. af_Code *bt1 = makeElementCode("object", 0, 1, "Tagr.aun");
  987. af_Code *bt2 = makeElementCode("data", ',', 0, NULL);
  988. pushCode(&bt1, bt2);
  989. af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
  990. af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
  991. pushCode(&bt2, bt5);
  992. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  993. pushCode(&bt5, bt6);
  994. runCodeFromMemoryAsImport(bt1, env);
  995. freeAllCode(bt1);
  996. printf("\n");
  997. }
  998. {
  999. printf("TAG S: STRING\n");
  1000. int exit_code = runCodeFromString("object\ndata\n{func}\nglobal\n", "Tags-string.aun", NULL, env);
  1001. printf("exit code = %d\n\n", exit_code);
  1002. }
  1003. #ifndef IN_CTEST
  1004. {
  1005. printf("TAG T: [stdin]\n");
  1006. int exit_code = runCodeFromStdin(NULL, NULL, env);
  1007. printf("exit code = %d\n\n", exit_code);
  1008. getc(stdin);
  1009. }
  1010. #endif
  1011. /* 错误用例 */
  1012. { // 中缀调用测试
  1013. printf("TAG a: ERROR\n");
  1014. af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
  1015. af_Code *bt1 = makeBlockCode(brackets, bt2, 0, 1, "Taga-error.aun", NULL);
  1016. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  1017. pushCode(&bt1, bt3);
  1018. runCodeFromMemory(bt1, env);
  1019. freeAllCode(bt1);
  1020. printf("\n");
  1021. }
  1022. { // 测试错误 (无函数指定)
  1023. printf("TAG b: ERROR\n");
  1024. af_Code *bt1 = makeElementCode("data", ',', 0, "Tagb-error.aun");
  1025. af_Code *bt5 = makeBlockCode(curly, NULL, 0, 1, NULL, NULL);
  1026. pushCode(&bt1, bt5);
  1027. af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
  1028. pushCode(&bt5, bt6);
  1029. runCodeFromMemory(bt1, env);
  1030. freeAllCode(bt1);
  1031. printf("\n");
  1032. }
  1033. { // 测试错误 (object2 Var not found)
  1034. printf("TAG c: ERROR\n");
  1035. af_Code *bt1 = makeElementCode("data", ',', 0, "Tagc-error.aun");
  1036. af_Code *bt2 = makeElementCode("object2", 0, 1, NULL);
  1037. pushCode(&bt1, bt2);
  1038. runCodeFromMemory(bt1, env);
  1039. freeAllCode(bt1);
  1040. printf("\n");
  1041. }
  1042. { // 中缀保护测试
  1043. printf("TAG d: ERROR\n");
  1044. af_Code *bt2 = makeElementCode("func8", 0, 2, NULL);
  1045. af_Code *bt1 = makeElementCode("global", 0, 1, "Tagd-error.aun");
  1046. pushCode(&bt1, bt2);
  1047. runCodeFromMemory(bt1, env);
  1048. freeAllCode(bt1);
  1049. printf("\n");
  1050. }
  1051. { // 错误回溯测试
  1052. printf("TAG e: ERROR\n");
  1053. af_Code *bt2 = makeElementCode("func9", 0, 1, NULL);
  1054. af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tage-error.aun", NULL);
  1055. af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
  1056. pushCode(&bt1, bt3);
  1057. runCodeFromMemory(bt1, env);
  1058. freeAllCode(bt1);
  1059. printf("\n");
  1060. }
  1061. printf("freeEnvironment:\n");
  1062. destructAFunEnvironment(env);
  1063. printf("Exit at 0.");
  1064. #ifndef IN_CTEST
  1065. getc(stdin);
  1066. #endif
  1067. return 0;
  1068. RETURN_1:
  1069. printf("Exit at 1.");
  1070. #ifndef IN_CTEST
  1071. getc(stdin);
  1072. #endif
  1073. return 1;
  1074. RETURN_2:
  1075. printf("Exit at 2.");
  1076. #ifndef IN_CTEST
  1077. getc(stdin);
  1078. #endif
  1079. return 2;
  1080. }