123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329 |
- #include <stdio.h>
- #include "aFun.h"
- size_t getSize(char *id, af_Object *obj) {
- return sizeof(int *);
- }
- void initData(char *id, af_Object *obj, int **data, af_Environment *env) {
- *data = calloc(1, sizeof(int));
- **data = 100;
- }
- void freeData(char *id, af_Object *obj, int **data, af_Environment *env) {
- printf("freeData(): **data = %d\n", **data);
- free(*data);
- }
- size_t getSize2(char *id, af_Object *obj) {
- return sizeof(af_VarSpaceListNode *);
- }
- void initData2(char *id, af_Object *obj, af_VarSpaceListNode **data, af_Environment *env) {
- *data = makeVarSpaceList(getProtectVarSpace(env));
- }
- void freeData2(char *id, af_Object *obj, af_VarSpaceListNode **data, af_Environment *env) {
- printf("freeData2(): vsl = %p\n", *data);
- freeAllVarSpaceList(*data);
- }
- size_t getSize3(char *id, af_Object *obj) {
- return sizeof(af_VarSpace *);
- }
- void initData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
- *data = makeVarSpace(obj, 3, 2, 0, env);
- }
- void freeData3(char *id, af_Object *obj, af_VarSpace **data, af_Environment *env) {
- printf("freeData(): *data = %p\n", *data);
- }
- af_GcList *getGcList3(char *id, af_Object *obj, void *data) {
- af_GcList *gl = pushGcList(glt_vs, *(af_VarSpace **)data, NULL);
- return gl;
- }
- af_VarSpace *getShareVS(char *id, af_Object *obj) {
- return *(af_VarSpace **)getObjectData(obj);
- }
- bool getAcl(char *id, af_Object *obj, af_ArgCodeList **acl, af_Code *code, int **mark, af_Environment *env) {
- *acl = makeArgCodeList(makeElementCode("object", NUL, 0, "Unknown"), 0, true, false);
- *mark = calloc(1, sizeof(int));
- **mark = 100;
- return true;
- }
- bool getVsl(char *id, af_Object *obj, af_VarSpaceListNode **vsl, void *mark, af_Environment *env) {
- *vsl = *(af_VarSpaceListNode **)getObjectData(obj);
- return true;
- }
- af_GcList *getGcList(char *id, af_Object *obj, void *data) {
- af_GcList *gl = pushGcList(glt_vsl, *(af_VarSpaceListNode **)data, NULL);
- return gl;
- }
- bool getAl(char *id, af_Object *obj, af_ArgList **al, af_ArgCodeList *acl, void *mark, af_Environment *env) {
- *al = makeArgList("test", getArgCodeListResult(acl));
- return true;
- }
- void literalSet(char *id, af_Object *obj, void *data, char *str, af_Environment *env) {
- printf("literalSet(): str = %s\n", str);
- }
- af_FuncBody *testFunc(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- printf("testFunc(): I am testFunc\n");
- af_Object *obj;
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) literal_set = MAKE_SYMBOL(literalSet, objectAPIFunc);
- if (addAPI(literal_set, "obj_literalSetting", api) != 1)
- return NULL;
- obj = makeObject("func", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(literal_set);
- }
- pushMessageDown(makeNORMALMessage(obj), env);
- return NULL;
- }
- bool getInfo(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
- DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc, callFuncBody);
- makeCFuncBodyToFuncInfo(func, NULL, *fi);
- FREE_SYMBOL(func);
- return true;
- }
- void freeMark(char *id, af_Object *obj, int *mark) {
- printf("freeMark(): mark = %d\n", *mark);
- free(mark);
- }
- af_FuncBody *testFunc2(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- printf("testFunc2(): I am testFunc2\n");
- af_Object *obj;
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- return NULL;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- return NULL;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- return NULL;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- return NULL;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- return NULL;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- return NULL;
- if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
- return NULL;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- return NULL;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- return NULL;
- obj = makeObject("func", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- }
- pushMessageDown(makeNORMALMessage(obj), env);
- return NULL;
- }
- bool getInfo2(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, true, true, true);
- makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
- DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc2, callFuncBody);
- makeCFuncBodyToFuncInfo(func, NULL, *fi);
- FREE_SYMBOL(func);
- return true;
- }
- bool getInfo3(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- makeCodeFuncBodyToFuncInfo(makeElementCode("data3", NUL, 0, "Unknown"), true, NULL, *fi);
- return true;
- }
- af_FuncBody *testFunc4(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- printf("testFunc4(): I am testFunc4\n");
- af_Object *obj;
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) literal_set = MAKE_SYMBOL(literalSet, objectAPIFunc);
- if (addAPI(literal_set, "obj_literalSetting", api) != 1)
- return NULL;
- obj = makeObject("func", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(literal_set);
- }
- pushMessageDown(makeNORMALMessage(obj), env);
- return NULL;
- }
- bool getInfo4(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc4, callFuncBody);
- makeCFuncBodyToFuncInfo(func, NULL, *fi);
- FREE_SYMBOL(func);
- return true;
- }
- af_FuncBody *testFunc9(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- af_Object *obj;
- af_FuncBody *fb;
- obj = makeObject("obj", true, makeObjectAPI(), true, NULL, true, NULL, env);
- pushMessageDown(makeNORMALMessage(obj), env);
- printf("testFunc9(%p): I am testFunc9\n", obj);
- DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc9, callFuncBody);
- fb = makeCFuncBody(func1, NULL);
- FREE_SYMBOL(func1);
- return fb;
- }
- bool getInfo9(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc9, callFuncBody);
- makeCFuncBodyToFuncInfo(func1, NULL, *fi);
- FREE_SYMBOL(func1);
- makeDynamicFuncBodyToFuncInfo(*fi);
- return true;
- }
- af_FuncBody *testFunc8(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- af_Object *obj;
- obj = makeObject("obj", true, makeObjectAPI(), true, NULL, true, NULL, env);
- pushMessageDown(makeNORMALMessage(obj), env);
- printf("testFunc8(%p): I am testFunc8\n", obj);
- fflush(stdout);
- return NULL;
- }
- af_FuncBody *testFunc7(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- af_Object *obj;
- obj = makeObject("func", true, makeObjectAPI(), true, NULL, true, NULL, env);
- pushMessageDown(makeNORMALMessage(obj), env);
- printf("testFunc7[des](%p): I am testFunc7\n", obj);
- fflush(stdout);
- return NULL;
- }
- bool getInfo7(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc7, callFuncBody);
- makeCFuncBodyToFuncInfo(func, NULL, *fi);
- FREE_SYMBOL(func);
- return true;
- }
- af_FuncBody *testFunc6(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- af_Object *obj;
- af_Object *des;
- obj = makeObject("func", true, makeObjectAPI(), true, NULL, true, NULL, env);
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info7 = MAKE_SYMBOL(getInfo7, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- return NULL;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- return NULL;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- return NULL;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- return NULL;
- if (addAPI(get_info7, "obj_funcGetInfo", api) != 1)
- return NULL;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- return NULL;
- des = makeObject("func-des", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_info7);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- }
- setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
- pushMessageDown(makeNORMALMessage(obj), env);
- printf("testFunc6[des](%p, %p): I am testFunc6\n", obj, des);
- return NULL;
- }
- bool getInfo6(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- DLC_SYMBOL(callFuncBody) func1 = MAKE_SYMBOL(testFunc6, callFuncBody);
- makeCFuncBodyToFuncInfo(func1, NULL, *fi);
- FREE_SYMBOL(func1);
- DLC_SYMBOL(callFuncBody) func2 = MAKE_SYMBOL(testFunc8, callFuncBody);
- makeCFuncBodyToFuncInfo(func2, NULL, *fi);
- FREE_SYMBOL(func2);
- return true;
- }
- af_FuncBody *testFunc5(af_CallFuncInfo *cfi, af_Environment *env) { // 测试用函数
- af_Object *obj;
- af_Object *des;
- obj = makeObject("func", true, makeObjectAPI(), true, NULL, true, NULL, env);
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info6 = MAKE_SYMBOL(getInfo6, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- return NULL;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- return NULL;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- return NULL;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- return NULL;
- if (addAPI(get_info6, "obj_funcGetInfo", api) != 1)
- return NULL;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- return NULL;
- des = makeObject("func-des", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_info6);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- }
- setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
- pushMessageDown(makeNORMALMessage(obj), env);
- printf("testFunc5(%p, %p): I am testFunc5\n", obj, des);
- return NULL;
- }
- bool getInfo5(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- DLC_SYMBOL(callFuncBody) func = MAKE_SYMBOL(testFunc5, callFuncBody);
- makeCFuncBodyToFuncInfo(func, NULL, *fi);
- FREE_SYMBOL(func);
- makeCodeFuncBodyToFuncInfo(makeElementCode("test", NUL, 0, "Unknown"), true, NULL, *fi);
- return true;
- }
- bool getInfo10(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, true, true, true);
- makeCodeFuncBodyToFuncInfo(makeElementCode("no-var", NUL, 1, "func9.info.aun"), true, NULL, *fi);
- return true;
- }
- bool getInfo11(char *id, af_Object *obj, af_FuncInfo **fi, af_Code *code, void *mark, af_Environment *env) {
- *fi = makeFuncInfo(normal_scope, not_embedded, false, true, true);
- makeImportFuncBodyToFuncInfo(makeElementCode("global", NUL, 1, "func9.info.aun"), true, NULL, *fi);
- return true;
- }
- bool objFunc(char *id, af_Object *obj) {
- return true;
- }
- bool infixFunc(char *id, af_Object *obj) {
- return true;
- }
- struct GDData {
- af_Object *func;
- bool no_first;
- };
- af_GuardianList *gd_func(char *type, bool is_guard, struct GDData *data, af_Environment *env) {
- if (data->no_first)
- return NULL;
- af_GuardianList *gd = NULL;
- data->no_first = true;
- pushGuardianList(NULL, data->func, &gd);
- return gd;
- }
- void gd_destruct(char *type, struct GDData *data, af_Environment *env) {
- gc_delReference(data->func);
- }
- int main(int argc, char **argv) {
- jmp_buf main_buf;
- char *base_path = getExedir(1);
- if (base_path == NULL)
- goto INIT_ERROR;
- if (setjmp(main_buf) == 1)
- return EXIT_FAILURE;
- aFunInitInfo info = {
- .base_dir=base_path,
- .level=log_debug,
- .log_asyn=true,
- .buf=&main_buf
- };
- if (!aFunInit(&info)) {
- INIT_ERROR:
- free(base_path);
- printf_stderr(0, "aFunlang init error\n");
- return EXIT_FAILURE;
- } else
- free(base_path);
- af_Environment *env = creatAFunEnvironment(0, NULL);
- aFunRunInfo ri = {.signal=true};
- defineRunEnv(&ri);
- if(!pushLiteralRegex("data.*", "func", true, env)) {
- fprintf(stderr, "pushLiteralRegex Error\n");
- goto RETURN_1;
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) getSize_3 = MAKE_SYMBOL(getSize3, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_3 = MAKE_SYMBOL(initData3, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_3 = MAKE_SYMBOL(freeData3, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getShareVS_ = MAKE_SYMBOL(getShareVS, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl3 = MAKE_SYMBOL(getGcList3, objectAPIFunc);
- if (addAPI(getSize_3, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_3, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_3, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(getShareVS_, "obj_getShareVarSpace", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl3, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("object", 3, 3, 3,
- (obj = makeObject("object", true, api, true, NULL, true, NULL, env)),
- env),
- env);
- FREE_SYMBOL(getSize_3);
- FREE_SYMBOL(initData_3);
- FREE_SYMBOL(freeData_3);
- FREE_SYMBOL(getShareVS_);
- FREE_SYMBOL(get_gl3);
- printf("object(%p)\n", obj);
- }
- af_Object *af_func = NULL;
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- af_func = obj;
- printf("func(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info2 = MAKE_SYMBOL(getInfo2, objectAPIFunc); // 宏函数
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info2, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func2", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info2);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func2(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info3 = MAKE_SYMBOL(getInfo3, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info3, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func3", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info3);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func3(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info4 = MAKE_SYMBOL(getInfo4, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) obj_func = MAKE_SYMBOL(objFunc, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info4, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(obj_func, "obj_isObjFunc", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func4", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info4);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(obj_func);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func4(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info5 = MAKE_SYMBOL(getInfo5, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info5, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func5", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info5);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func5(%p)\n", obj);
- }
- {
- af_Object *obj = makeObject("func", true, makeObjectAPI(), true, NULL, true, NULL, env);
- af_Object *des;
- {
- af_ObjectAPI *api = makeObjectAPI();
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info6 = MAKE_SYMBOL(getInfo6, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info6, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- des = makeObject("func-des", true, api, true, NULL, true, NULL, env);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_info6);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- }
- setObjectAttributes(mg_gc_destruct, 3, 3, 3, des, obj, obj, env);
- addVarToProtectVarSpace(makeVar("func6", 3, 3, 3, obj, env), env);
- printf("func6(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info9 = MAKE_SYMBOL(getInfo9, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info9, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func7", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info9);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func7(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info = MAKE_SYMBOL(getInfo, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) infix_func = MAKE_SYMBOL(infixFunc, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- if (addAPI(infix_func, "obj_isInfixFunc", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func8", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- FREE_SYMBOL(infix_func);
- printf("func8(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info10 = MAKE_SYMBOL(getInfo10, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info10, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func9", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info10);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func9(%p)\n", obj);
- }
- {
- af_ObjectAPI *api = makeObjectAPI();
- af_Object *obj;
- DLC_SYMBOL(objectAPIFunc) get_alc = MAKE_SYMBOL(getAcl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_vsl = MAKE_SYMBOL(getVsl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_al = MAKE_SYMBOL(getAl, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_info11 = MAKE_SYMBOL(getInfo11, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) free_mark = MAKE_SYMBOL(freeMark, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) get_gl = MAKE_SYMBOL(getGcList, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) getSize_2 = MAKE_SYMBOL(getSize2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) initData_2 = MAKE_SYMBOL(initData2, objectAPIFunc);
- DLC_SYMBOL(objectAPIFunc) freeData_2 = MAKE_SYMBOL(freeData2, objectAPIFunc);
- if (addAPI(getSize_2, "obj_getDataSize", api) != 1)
- goto RETURN_2;
- if (addAPI(initData_2, "obj_initData", api) != 1)
- goto RETURN_2;
- if (addAPI(freeData_2, "obj_destructData", api) != 1)
- goto RETURN_2;
- if (addAPI(get_alc, "obj_funcGetArgCodeList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_vsl, "obj_funcGetVarList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_al, "obj_funcGetArgList", api) != 1)
- goto RETURN_2;
- if (addAPI(get_info11, "obj_funcGetInfo", api) != 1)
- goto RETURN_2;
- if (addAPI(free_mark, "obj_funcFreeMask", api) != 1)
- goto RETURN_2;
- if (addAPI(get_gl, "obj_getGcList", api) != 1)
- goto RETURN_2;
- addVarToProtectVarSpace(makeVar("func10", 3, 3, 3,
- (obj = makeObject("func", true, api, true, NULL, true, NULL, env)), env),
- env);
- FREE_SYMBOL(get_alc);
- FREE_SYMBOL(get_vsl);
- FREE_SYMBOL(get_al);
- FREE_SYMBOL(get_info11);
- FREE_SYMBOL(free_mark);
- FREE_SYMBOL(get_gl);
- FREE_SYMBOL(getSize_2);
- FREE_SYMBOL(initData_2);
- FREE_SYMBOL(freeData_2);
- printf("func9(%p)\n", obj);
- }
- printf("\n");
- { // 正常程序
- printf("TAG A:\n");
- af_Code *bt1 = makeElementCode("object", 0, 1, "Taga.aun");
- af_Code *bt2 = makeElementCode("data", '$', 0, NULL);
- pushCode(&bt1, bt2);
- af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
- af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
- pushCode(&bt2, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 宏函数
- printf("TAG L:\n");
- af_Code *bt1 = makeElementCode("object", 0, 1, "Tagl.aun");
- af_Code *bt3 = makeElementCode("func2", 0, 1, NULL);
- af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
- pushCode(&bt1, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 尾调用优化
- printf("TAG B:\n");
- af_Code *bt1 = makeElementCode("data", '$', 0, "Tagb.aun");
- af_Code *bt2 = makeElementCode("object", 0, 1, NULL);
- pushCode(&bt1, bt2);
- af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
- af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
- pushCode(&bt2, bt5);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 尾调用优化2
- printf("TAG C:\n");
- af_Code *bt1 = makeElementCode("data", '$', 0, "Tagc.aun");
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 测试类前缀调用
- printf("TAG D:\n");
- af_Code *bt1 = makeElementCode("data", '$', 0, "Tagd.aun");
- af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
- pushCode(&bt1, bt2);
- af_Code *bt5 = makeBlockCode(parentheses, NULL, 0, 1, NULL, NULL);
- pushCode(&bt2, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 测试顺序执行 '(xxx)
- printf("TAG E:\n");
- af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
- af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt3, bt4);
- af_Code *bt5 = makeBlockCode(parentheses, bt3, '\'', 1, "Tage.aun", NULL);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt5, 0, env);
- freeAllCode(bt5);
- printf("\n");
- }
- { // 测试顺序执行 ,[xxx]
- printf("TAG F:\n");
- af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
- af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt3, bt4);
- af_Code *bt5 = makeBlockCode(brackets, bt3, '$', 1, "Tagf.aun", NULL);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt5, 0, env);
- freeAllCode(bt5);
- printf("\n");
- }
- { // 测试顺序执行 '(xxx) 【尾调用优化】
- printf("TAG G:\n");
- af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
- af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt3, bt4);
- af_Code *bt5 = makeBlockCode(parentheses, bt3, '\'', 1, "Tagg.aun", NULL);
- runCodeFromMemory(bt5, 0, env);
- freeAllCode(bt5);
- printf("\n");
- }
- { // 测试顺序执行 ,[xxx] 【尾调用优化】
- printf("TAG H:\n");
- af_Code *bt3 = makeElementCode("data2", 0, 0, NULL);
- af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt3, bt4);
- af_Code *bt5 = makeBlockCode(brackets, bt3, '$', 1, "Tagh.aun", NULL);
- runCodeFromMemory(bt5, 0, env);
- freeAllCode(bt5);
- printf("\n");
- }
- { // 双层尾调用优化 (函数内调用函数)
- printf("TAG I:\n");
- af_Code *bt2 = makeElementCode("func3", 0, 1, NULL);
- af_Code *bt3 = makeBlockCode(curly, bt2, 0, 1, "Tagi.aun", NULL);
- af_Code *bt4 = makeElementCode("func3", 0, 1, NULL);
- af_Code *bt5 = makeBlockCode(curly, bt4, 0, 1, NULL, NULL);
- pushCode(&bt3, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt3, 0, env);
- freeAllCode(bt3);
- printf("\n");
- }
- { // 对象函数的调用
- printf("TAG J:\n");
- af_Code *bt1 = makeElementCode("func4", 0, 1, "Tagj.aun");
- af_Code *bt2 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt2);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 变量引用调用
- printf("TAG K:\n");
- af_Code *bt1 = makeElementCode("func4", '\'', 1, "Tagk.aun");
- af_Code *bt2 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt2);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 对象函数的调用 (尾调用优化)
- printf("TAG L:\n");
- af_Code *bt1 = makeElementCode("func4", 0, 1, "Tagl.aun");
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 函数调用
- printf("TAG M:\n");
- af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagm.aun", NULL);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // gc测试
- printf("TAG N:\n");
- af_Code *bt2 = makeElementCode("func5", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagn.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- af_Code *bt4 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- pushCode(&bt3, bt4);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // func_body_dynamic 测试
- printf("TAG O:\n");
- af_Code *bt2 = makeElementCode("func7", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tago.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 中缀调用测试
- printf("TAG P:\n");
- af_Code *bt2 = makeElementCode("func8", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(brackets, bt2, 0, 1, "Tagp.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // func_body_import 测试
- printf("TAG Q:\n");
- af_Code *bt2 = makeElementCode("func10", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tagq.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 导入式运行
- printf("TAG R:\n");
- af_Code *bt1 = makeElementCode("object", 0, 1, "Tagr.aun");
- af_Code *bt2 = makeElementCode("data", '$', 0, NULL);
- pushCode(&bt1, bt2);
- af_Code *bt3 = makeElementCode("func", 0, 1, NULL);
- af_Code *bt5 = makeBlockCode(curly, bt3, 0, 1, NULL, NULL);
- pushCode(&bt2, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt1, 1, env);
- freeAllCode(bt1);
- printf("\n");
- }
- {
- printf("TAG S: STRING\n");
- int exit_code = runCodeFromString("object\ndata\n{func}\nglobal\n", "Tags-string.aun", 1, env);
- printf("exit code = %d\n\n", exit_code);
- }
- #ifndef IN_CTEST
- {
- printf("TAG T: [stdin]\n");
- int exit_code = runCodeFromStdin(NULL, NULL, env);
- printf("exit code = %d\n\n", exit_code);
- getc(stdin);
- }
- #endif
- {
- DLC_SYMBOL(GuardianFunc) func = MAKE_SYMBOL(gd_func, GuardianFunc);
- DLC_SYMBOL(GuardianDestruct) des = MAKE_SYMBOL(gd_destruct, GuardianDestruct);
- struct GDData *data = NULL;
- addGuardian("test", false, sizeof(struct GDData), func, des, (void **) &data, env);
- data->func = af_func;
- gc_addReference(af_func);
- FREE_SYMBOL(func);
- FREE_SYMBOL(des);
- printf("TAG U:\n");
- af_Code *bt1 = makeElementCode("str", 0, 1, "TagU.aun");
- af_Code *bt2 = makeElementCode("global", 0, 1, "TagU.aun");
- pushCode(&bt1, bt2);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- bool re = popGuardian("test", env);
- printf("popGuardian: %d\n\n", re);
- }
- /* 错误用例 */
- { // 中缀调用测试
- printf("TAG a: ERROR\n");
- af_Code *bt2 = makeElementCode("func", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(brackets, bt2, 0, 1, "Taga-error.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 测试错误 (无函数指定)
- printf("TAG b: ERROR\n");
- af_Code *bt1 = makeElementCode("data", '$', 0, "Tagb-error.aun");
- af_Code *bt5 = makeBlockCode(curly, NULL, 0, 1, NULL, NULL);
- pushCode(&bt1, bt5);
- af_Code *bt6 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt5, bt6);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 测试错误 (object2 Var not found)
- printf("TAG c: ERROR\n");
- af_Code *bt1 = makeElementCode("data", '$', 0, "Tagc-error.aun");
- af_Code *bt2 = makeElementCode("object2", 0, 1, NULL);
- pushCode(&bt1, bt2);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 中缀保护测试
- printf("TAG d: ERROR\n");
- af_Code *bt2 = makeElementCode("func8", 0, 2, NULL);
- af_Code *bt1 = makeElementCode("global", 0, 1, "Tagd-error.aun");
- pushCode(&bt1, bt2);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- { // 错误回溯测试
- printf("TAG e: ERROR\n");
- af_Code *bt2 = makeElementCode("func9", 0, 1, NULL);
- af_Code *bt1 = makeBlockCode(curly, bt2, 0, 1, "Tage-error.aun", NULL);
- af_Code *bt3 = makeElementCode("global", 0, 1, NULL);
- pushCode(&bt1, bt3);
- runCodeFromMemory(bt1, 0, env);
- freeAllCode(bt1);
- printf("\n");
- }
- printf("freeEnvironment:\n");
- destructAFunEnvironment(env);
- undefRunEnv(&ri);
- printf("Exit at 0.\n");
- #ifndef IN_CTEST
- getc(stdin);
- #endif
- aFunDestruct();
- aFunExit(0);
- RETURN_1:
- undefRunEnv(&ri);
- printf("Exit at 1.\n");
- #ifndef IN_CTEST
- getc(stdin);
- #endif
- aFunDestruct();
- aFunExit(1);
- RETURN_2:
- undefRunEnv(&ri);
- printf("Exit at 2.\n");
- #ifndef IN_CTEST
- getc(stdin);
- #endif
- aFunDestruct();
- aFunExit(2);
- }
|