test_env.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include <stdio.h>
  2. #include "aFun.h"
  3. size_t getSize(void) {
  4. return sizeof(int *);
  5. }
  6. void initData(int **data) {
  7. *data = calloc(sizeof(int), 1);
  8. **data = 100;
  9. }
  10. void freeData(int **data) {
  11. printf("**data = %d\n", **data);
  12. free(*data);
  13. }
  14. size_t getSize3(char *id) {
  15. return sizeof(af_VarSpace *);
  16. }
  17. void initData3(char *id, af_VarSpace **data, af_Environment *env) {
  18. *data = makeVarSpace(env);
  19. }
  20. void freeData3(char *id, af_VarSpace **data, af_Environment *env) {
  21. printf("freeData(): *data = %p\n", *data);
  22. freeVarSpace(*data, env);
  23. }
  24. af_GcList *getGcList3(char *id, void *data) {
  25. af_GcList *gl = pushGcList(glt_vs, *(af_VarSpace **)data, NULL);
  26. return gl;
  27. }
  28. af_VarSpace *getShareVS(af_Object *obj) {
  29. return *(af_VarSpace **)getObjectData(obj);
  30. }
  31. int main() {
  32. aFunInit();
  33. af_Environment *env = makeEnvironment(grt_always);
  34. {
  35. af_ObjectAPI *api = makeObjectAPI();
  36. DLC_SYMBOL(objectAPIFunc) getSize_ = MAKE_SYMBOL(getSize, objectAPIFunc);
  37. DLC_SYMBOL(objectAPIFunc) initData_ = MAKE_SYMBOL(initData, objectAPIFunc);
  38. DLC_SYMBOL(objectAPIFunc) freeData_ = MAKE_SYMBOL(freeData, objectAPIFunc);
  39. if (addAPI(getSize_, "obj_getDataSize", api) != 1)
  40. return 2;
  41. if (addAPI(initData_, "obj_initData", api) != 1)
  42. return 2;
  43. if (addAPI(freeData_, "obj_destructData", api) != 1)
  44. return 2;
  45. addVarToProtectVarSpace(makeVar("global", 3, 3,
  46. makeObject("global", true, api, true, NULL, NULL, env), env),
  47. env);
  48. FREE_SYMBOL(getSize_);
  49. FREE_SYMBOL(initData_);
  50. FREE_SYMBOL(freeData_);
  51. }
  52. {
  53. af_ObjectAPI *api = makeObjectAPI();
  54. DLC_SYMBOL(objectAPIFunc) getSize_3 = MAKE_SYMBOL(getSize3, objectAPIFunc);
  55. DLC_SYMBOL(objectAPIFunc) initData_3 = MAKE_SYMBOL(initData3, objectAPIFunc);
  56. DLC_SYMBOL(objectAPIFunc) freeData_3 = MAKE_SYMBOL(freeData3, objectAPIFunc);
  57. DLC_SYMBOL(objectAPIFunc) getShareVS_ = MAKE_SYMBOL(getShareVS, objectAPIFunc);
  58. DLC_SYMBOL(objectAPIFunc) get_gl3 = MAKE_SYMBOL(getGcList3, objectAPIFunc);
  59. if (addAPI(getSize_3, "obj_getDataSize", api) != 1)
  60. return 2;
  61. if (addAPI(initData_3, "obj_initData", api) != 1)
  62. return 2;
  63. if (addAPI(freeData_3, "obj_destructData", api) != 1)
  64. return 2;
  65. if (addAPI(getShareVS_, "obj_getShareVarSpace", api) != 1)
  66. return 2;
  67. if (addAPI(get_gl3, "obj_getGcList", api) != 1)
  68. return 2;
  69. addVarToProtectVarSpace(makeVar("object", 3, 3,
  70. makeObject("object", true, api, true, NULL, NULL, env),
  71. env),
  72. env);
  73. FREE_SYMBOL(getSize_3);
  74. FREE_SYMBOL(initData_3);
  75. FREE_SYMBOL(freeData_3);
  76. FREE_SYMBOL(getShareVS_);
  77. FREE_SYMBOL(get_gl3);
  78. }
  79. if (!enableEnvironment(env)) {
  80. fprintf(stderr, "Enable Error.\n");
  81. exit(EXIT_FAILURE);
  82. }
  83. freeEnvironment(env);
  84. return 0;
  85. }