gwenhywfar  5.14.1
tm_builder_c.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Thu Jul 02 2009
3  copyright : (C) 2018 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * Please see toplevel file COPYING for license details *
8  ***************************************************************************/
9 
10 
11 
12 #include "tm_builder_c.h"
13 #include "tm2c_enums.h"
14 #include "tm2c_constructor.h"
15 #include "tm2c_destructor.h"
16 #include "tm2c_typedef.h"
17 #include "tm2c_struct.h"
18 #include "tm2c_getter.h"
19 #include "tm2c_setter.h"
20 #include "tm2c_readdb.h"
21 #include "tm2c_writedb.h"
22 #include "tm2c_readxml.h"
23 #include "tm2c_writexml.h"
24 #include "tm2c_readobject.h"
25 #include "tm2c_writeobject.h"
26 #include "tm2c_dup.h"
27 #include "tm2c_copy.h"
28 #include "tm2c_macros.h"
29 #include "tm2c_list1.h"
30 #include "tm2c_tree1.h"
31 #include "tm2c_tree2.h"
32 #include "tm2c_signal.h"
33 #include "tm2c_slot.h"
34 #include "tm2c_object.h"
35 #include "tm2c_virtualfn.h"
36 
37 
38 #include <gwenhywfar/debug.h>
39 
40 #include <ctype.h>
41 #include <string.h>
42 
43 
44 
45 /* DEBUG */
46 /*DBG_ERROR(0, "Member %s has flags %x", Typemaker2_Member_GetName(tm), Typemaker2_Member_GetFlags(tm));*/
47 
48 
49 
51 {
52  GWEN_BUFFER *tbuf;
53  TYPEMAKER2_MEMBER_LIST *tml;
54 
55  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
56 
58  if (tml) {
60 
61  tm=Typemaker2_Member_List_First(tml);
62  while (tm) {
65  "#define %s %d\n",
68  tm=Typemaker2_Member_List_Next(tm);
69  }
70  }
71 
72  GWEN_Buffer_AppendArgs(tbuf, "#define %s %d\n",
75 
77  GWEN_Buffer_free(tbuf);
78 
79  return 0;
80 }
81 
82 
84 {
85  GWEN_BUFFER *tbuf;
87  TYPEMAKER2_HEADER_LIST *hl;
88 
90  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
91 
92  /* handle post-headers */
94  if (hl) {
96 
97  h=Typemaker2_Header_List_First(hl);
98  if (h) {
99  GWEN_Buffer_AppendString(tbuf, "/* post-headers */\n");
100  while (h) {
102  GWEN_Buffer_AppendString(tbuf, "#include ");
103 
106  else
108  GWEN_Buffer_AppendString(tbuf, "\n");
109  }
110  h=Typemaker2_Header_List_Next(h);
111  }
112  }
113  GWEN_Buffer_AppendString(tbuf, "\n");
114  }
115 
117  GWEN_Buffer_free(tbuf);
118 
119  return 0;
120 }
121 
122 
123 
125 {
126  GWEN_BUFFER *tbuf;
128  TYPEMAKER2_HEADER_LIST *hl;
129 
131  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
132 
133  /* handle post-headers */
135  if (hl) {
137  int markAdded=0;
138 
139  h=Typemaker2_Header_List_First(hl);
140  while (h) {
142  if (!markAdded) {
143  GWEN_Buffer_AppendString(tbuf, "/* end-headers */\n");
144  markAdded=1;
145  }
146  GWEN_Buffer_AppendString(tbuf, "#include ");
147 
150  else
152  GWEN_Buffer_AppendString(tbuf, "\n");
153  }
154  h=Typemaker2_Header_List_Next(h);
155  }
156  GWEN_Buffer_AppendString(tbuf, "\n");
157  }
158 
160  GWEN_Buffer_free(tbuf);
161 
162  return 0;
163 }
164 
165 
166 
168 {
169  GWEN_BUFFER *tbuf;
170  TYPEMAKER2_MEMBER_LIST *tml;
171  uint32_t flags;
172  /* TYPEMAKER2_TYPEMANAGER *tym; */
173 
174  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
175  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
176 
177  flags=Typemaker2_Type_GetFlags(ty);
178 
180  if (tml) {
181  TYPEMAKER2_MEMBER *tm;
182 
183  tm=Typemaker2_Member_List_First(tml);
184  while (tm) {
185  TYPEMAKER2_TYPE *mty;
186  int rv;
187 
189  assert(mty);
190 
192  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
193  rv=TM2C_BuildList1GetByMember(tb, ty, tm);
194  if (rv<0) {
195  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
196  return rv;
197  }
198  }
199 
200  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) {
201  rv=TM2C_BuildTreeGetByMember(tb, ty, tm);
202  if (rv<0) {
203  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
204  return rv;
205  }
206  }
207 
208  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) {
209  rv=TM2C_BuildTree2GetByMember(tb, ty, tm);
210  if (rv<0) {
211  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
212  return rv;
213  }
214  }
215 
216  }
217  tm=Typemaker2_Member_List_Next(tm);
218  }
219  GWEN_Buffer_AppendString(tbuf, " return p_cl;\n");
220  }
221 
222  return 0;
223 }
224 
225 
226 
228 {
229  TYPEMAKER2_MEMBER_LIST *tml;
230  uint32_t flags;
231 
232  flags=Typemaker2_Type_GetFlags(ty);
233 
235  if (tml) {
236  TYPEMAKER2_MEMBER *tm;
237 
238  tm=Typemaker2_Member_List_First(tml);
239  while (tm) {
240  TYPEMAKER2_TYPE *mty;
241  int rv;
242 
244  assert(mty);
245 
247  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
248  rv=TM2C_BuildList1SortByMember(tb, ty, tm);
249  if (rv<0) {
250  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
251  return rv;
252  }
253  }
254  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) {
255  rv=TM2C_BuildTree2SortByMember(tb, ty, tm);
256  if (rv<0) {
257  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
258  return rv;
259  }
260  }
261  }
262  tm=Typemaker2_Member_List_Next(tm);
263  }
264  }
265 
266  return 0;
267 }
268 
269 
270 
272 {
273  TYPEMAKER2_DEFINE_LIST *defines;
274 
275  defines=Typemaker2_Type_GetDefines(ty);
276 
277  assert(defines);
278  if (Typemaker2_Define_List_GetCount(defines)) {
279  GWEN_BUFFER *tbuf;
280  const char *s;
281  TYPEMAKER2_DEFINE *td;
282 
283  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
284 
285  td=Typemaker2_Define_List_First(defines);
286  while (td) {
287  const char *prefix;
288  TYPEMAKER2_ITEM *ti;
289  int access=TypeMaker2_Access_Public;
291 
292  GWEN_Buffer_AppendString(tbuf, "/* define ");
294  if (s && *s)
295  GWEN_Buffer_AppendString(tbuf, s);
296  GWEN_Buffer_AppendString(tbuf, " */\n");
297 
298  prefix=Typemaker2_Define_GetPrefix(td);
299  if (prefix==NULL || *prefix==0) {
300  DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in define definition");
301  GWEN_Buffer_free(tbuf);
302  return GWEN_ERROR_BAD_DATA;
303  }
304 
305  ti=Typemaker2_Item_List_First(Typemaker2_Define_GetItems(td));
306  while (ti) {
307  GWEN_Buffer_AppendString(tbuf, "#define ");
308  if (prefix)
309  GWEN_Buffer_AppendString(tbuf, prefix);
311  if (s && *s) {
312  GWEN_Buffer_AppendString(tbuf, s);
313  }
315  if (s) {
316  GWEN_Buffer_AppendString(tbuf, " ");
317  GWEN_Buffer_AppendString(tbuf, s);
318  }
319  else {
320  char numbuf[32];
321  int k=0;
322 
323  switch (Typemaker2_Define_GetMode(td)) {
325  k=1<<j;
326  break;
328  default:
329  k=j;
330  }
331  snprintf(numbuf, sizeof(numbuf)-1, "%d", k);
332  numbuf[sizeof(numbuf)-1]=0;
333  GWEN_Buffer_AppendString(tbuf, " ");
334  GWEN_Buffer_AppendString(tbuf, numbuf);
335  j++;
336  }
337 
338  GWEN_Buffer_AppendString(tbuf, "\n");
339  ti=Typemaker2_Item_List_Next(ti);
340  }
341  GWEN_Buffer_AppendString(tbuf, "\n");
342 
343  switch (access) {
346  break;
349  break;
352  break;
355  break;
356  default:
357  DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
358  GWEN_Buffer_free(tbuf);
359  return GWEN_ERROR_BAD_DATA;
360  }
361  GWEN_Buffer_Reset(tbuf);
362 
363  td=Typemaker2_Define_List_Next(td);
364  }
365  }
366  return 0;
367 }
368 
369 
370 
372 {
373  GWEN_BUFFER *tbuf;
374  const char *s;
376  TYPEMAKER2_MEMBER_LIST *tml;
377  const char *sTypeId;
378  const char *sTypePrefix;
379 
381  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
382 
383  sTypeId=Typemaker2_Type_GetIdentifier(ty);
384  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
385 
386  /* prototype */
388  if (s && *s)
389  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
390  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer);\n",
391  sTypePrefix, sTypeId);
393  GWEN_Buffer_Reset(tbuf);
394 
395  /* implementation */
396  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer) {\n",
397  sTypePrefix, sTypeId);
398  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
399 
401  if (tml) {
402  TYPEMAKER2_MEMBER *tm;
403 
404  tm=Typemaker2_Member_List_First(tml);
405  while (tm) {
406  TYPEMAKER2_TYPE *mty;
407  const char *sMemberName;
408 
410  assert(mty);
411  sMemberName=Typemaker2_Member_GetName(tm);
412 
414  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\"*/\n", sMemberName);
415  /* toHashString */
416  if (1) {
417  GWEN_BUFFER *srcbuf;
418  int rv;
419 
420  srcbuf=GWEN_Buffer_new(0, 256, 0, 1);
421  GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName);
422 
423  GWEN_Buffer_AppendString(tbuf, " ");
425  GWEN_Buffer_GetStart(srcbuf),
426  NULL, /* no dest */
427  tbuf);
428  GWEN_Buffer_free(srcbuf);
429  if (rv<0) {
430  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
431  GWEN_Buffer_free(tbuf);
432  return rv;
433  }
434  GWEN_Buffer_AppendString(tbuf, "\n");
435  }
436 
437  GWEN_Buffer_AppendString(tbuf, " GWEN_Buffer_AppendByte(p_buffer, \':\');\n");
438  }
439  else
440  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" doesn't have with_hash flag, ignoring */\n", sMemberName);
441 
442  tm=Typemaker2_Member_List_Next(tm);
443  } /* while tm */
444  }
445 
446  GWEN_Buffer_AppendString(tbuf, "}\n");
447 
449  GWEN_Buffer_free(tbuf);
450 
451  return 0;
452 }
453 
454 
455 
457 {
458  GWEN_BUFFER *tbuf;
459  uint32_t flags;
460 
461  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
462 
463  flags=Typemaker2_Type_GetFlags(ty);
464 
465  while (ty) {
466  TYPEMAKER2_INLINE *ti;
467 
468  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(ty));
469  while (ti) {
471  const char *content;
472 
473  content=Typemaker2_Inline_GetContent(ti);
474  if (content && *content) {
475  GWEN_DB_NODE *db;
476  int rv;
477 
479  assert(db);
480  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
481  if (rv<0) {
482  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
483  GWEN_Buffer_free(tbuf);
484  return rv;
485  }
486 
487  /* include code */
488  switch (Typemaker2_Inline_GetLocation(ti)) {
491  break;
492 
495  break;
496  }
497  }
498  GWEN_Buffer_Reset(tbuf);
499  }
500 
501  ti=Typemaker2_Inline_List_Next(ti);
502  }
504  }
505  GWEN_Buffer_free(tbuf);
506 
507  return 0;
508 }
509 
510 
511 
513 {
514  TYPEMAKER2_TYPE *structType;
515  GWEN_BUFFER *tbuf;
516  /* TYPEMAKER2_TYPEMANAGER *tym; */
517 
518  structType=ty;
519 
520  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
521  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
522 
523  while (ty) {
524  TYPEMAKER2_MEMBER_LIST *tml;
525 
527  if (tml) {
528  TYPEMAKER2_MEMBER *tm;
529 
530  tm=Typemaker2_Member_List_First(tml);
531  while (tm) {
532  TYPEMAKER2_TYPE *mty;
533  uint32_t memberFlags;
534 
535  memberFlags=Typemaker2_Member_GetFlags(tm);
537  /* TODO: Check that we don't create duplicate code here!! */
538  if (mty && mty!=structType && mty!=ty) {
539  TYPEMAKER2_INLINE *ti;
540 
541  /* get inlines from member type */
542  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(mty));
543  while (ti) {
545  const char *content;
546 
547  content=Typemaker2_Inline_GetContent(ti);
548  if (content && *content) {
549  GWEN_DB_NODE *db;
550  int rv;
551 
552  /* replace vars in context of the struct type, not the particular member type */
554  assert(db);
555  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
556  if (rv<0) {
557  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
558  GWEN_Buffer_free(tbuf);
559  return rv;
560  }
561 
562  /* include code */
563  switch (Typemaker2_Inline_GetLocation(ti)) {
566  break;
567 
570  break;
571  }
572  }
573  GWEN_Buffer_Reset(tbuf);
574  }
575 
576  ti=Typemaker2_Inline_List_Next(ti);
577  }
578  } /* if mty */
579 
580  tm=Typemaker2_Member_List_Next(tm);
581  } /* while tm */
582  } /* if tml */
583 
585  }
586 
587  return 0;
588 }
589 
590 
591 
593 {
594  GWEN_BUFFER *tbuf;
595  const char *s;
597  const char *sTypeId;
598  const char *sTypePrefix;
599 
601  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
602 
603  sTypeId=Typemaker2_Type_GetIdentifier(ty);
604  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
605 
606  /* prototype */
608  if (s && *s)
609  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
610 
611  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct);\n", sTypePrefix, sTypeId);
612 
614  GWEN_Buffer_Reset(tbuf);
615 
616  /* implementation */
617  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct) {\n", sTypePrefix, sTypeId);
618  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
619  GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n");
620  GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount++;\n");
621  GWEN_Buffer_AppendString(tbuf, "}\n");
622 
624  GWEN_Buffer_free(tbuf);
625 
626  return 0;
627 }
628 
629 
630 
632 {
633  GWEN_BUFFER *tbuf;
635  const char *sApi;
636  const char *sTypePrefix;
637 
639  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
640 
642  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
643 
644  /* public prototypes */
645  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
646 
647  if (sApi && *sApi)
648  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
649  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Attach(void *ptr);\n", sTypePrefix);
650  GWEN_Buffer_AppendString(tbuf, "\n");
651 
652  if (sApi && *sApi)
653  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
654  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Free(void *ptr);\n", sTypePrefix);
655  GWEN_Buffer_AppendString(tbuf, "\n");
656 
658  GWEN_Buffer_Reset(tbuf);
659 
660  /* implementations */
661  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
662  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Attach(void *ptr) {\n", sTypePrefix);
663  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
664  GWEN_Buffer_AppendString(tbuf, "}\n");
665  GWEN_Buffer_AppendString(tbuf, "\n");
666 
667  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Free(void *ptr) {\n", sTypePrefix);
668  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
669  GWEN_Buffer_AppendString(tbuf, "}\n");
670  GWEN_Buffer_AppendString(tbuf, "\n");
671 
673  GWEN_Buffer_free(tbuf);
674 
675  return 0;
676 }
677 
678 
679 
681  TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf)
682 {
683  const char *s;
684  TYPEMAKER2_GROUP *childGrp;
685  TYPEMAKER2_MEMBER_LIST *members;
686  const char *sTypeIdentifier;
687  const char *sTypePrefix;
688 
689  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
690  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
691 
692  /* write title */
694  GWEN_Buffer_AppendString(buf, "\n\n");
695  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n", depth, (s && *s)?s:"Unnamed Group", depth);
696  GWEN_Buffer_AppendString(buf, "\n");
697 
699  if (s && *s) {
700  GWEN_DB_NODE *dbCall;
701  int rv;
702 
704  assert(dbCall);
705  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
706  if (rv<0) {
707  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
708  GWEN_DB_Group_free(dbCall);
709  GWEN_Buffer_free(buf);
710  return rv;
711  }
712  GWEN_DB_Group_free(dbCall);
713  GWEN_Buffer_AppendString(buf, "\n");
714  }
715 
716  /* write member docs */
717  members=Typemaker2_Type_GetMembers(ty);
718  if (members) {
719  TYPEMAKER2_MEMBER *tm;
720 
721  tm=Typemaker2_Member_List_First(members);
722  while (tm) {
723  if (Typemaker2_Member_GetGroupPtr(tm)==grp) {
724  const char *sMemberName;
725 
726  sMemberName=Typemaker2_Member_GetName(tm);
727  GWEN_Buffer_AppendArgs(buf, "\n\n@anchor %s_%s\n", sTypeIdentifier, sMemberName);
728  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n\n", depth+1, sMemberName, depth+1);
729 
730  /* add description, if any */
732  if (s && *s) {
733  GWEN_DB_NODE *dbCall;
734  int rv;
735 
736  dbCall=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, NULL, NULL);
737  assert(dbCall);
738  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
739  if (rv<0) {
740  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
741  GWEN_DB_Group_free(dbCall);
742  GWEN_Buffer_free(buf);
743  return rv;
744  }
745  GWEN_DB_Group_free(dbCall);
746  GWEN_Buffer_AppendString(buf, "\n");
747  }
748 
749  /* add setter/getter info */
751  "<p>Set this property with @ref %s_Set%c%s(), ",
752  sTypePrefix, toupper(*sMemberName), sMemberName+1);
754  "get it with @ref %s_Get%c%s().</p>\n",
755  sTypePrefix, toupper(*sMemberName), sMemberName+1);
756  }
757  tm=Typemaker2_Member_List_Next(tm);
758  }
759  }
760 
761  /* write children groups */
762  childGrp=Typemaker2_Group_Tree_GetFirstChild(grp);
763  while (childGrp) {
764  int rv;
765 
766  rv=_buildGroupApiDoc(tb, ty, childGrp, depth+1, buf);
767  if (rv<0) {
768  DBG_ERROR(0, "here (%d)", rv);
769  return rv;
770  }
771  childGrp=Typemaker2_Group_Tree_GetNext(childGrp);
772  }
773 
774  return 0;
775 }
776 
777 
778 
779 
781 {
782  TYPEMAKER2_GROUP_TREE *groupTree;
783  TYPEMAKER2_GROUP *grp;
784  GWEN_BUFFER *tbuf;
785  const char *sTypeIdentifier;
786 
787  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
788 
789  groupTree=Typemaker2_Type_GetGroupTree(ty);
790 
791  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
792 
793  GWEN_Buffer_AppendArgs(tbuf, "/** @page P_%s Structure %s\n", sTypeIdentifier, sTypeIdentifier);
794  GWEN_Buffer_AppendArgs(tbuf, "<p>This page describes the properties of %s.</p>\n", sTypeIdentifier);
795  GWEN_Buffer_AppendString(tbuf, "\n");
796 
797  grp=Typemaker2_Group_Tree_GetFirst(groupTree);
798  while (grp) {
799  _buildGroupApiDoc(tb, ty, grp, 1, tbuf);
800  grp=Typemaker2_Group_Tree_GetNext(grp);
801  }
802  GWEN_Buffer_AppendString(tbuf, "\n");
803  GWEN_Buffer_AppendString(tbuf, "*/\n");
804 
806 
807  GWEN_Buffer_free(tbuf);
808 
809  return 0;
810 }
811 
812 
813 
814 
815 
816 
817 
818 
820 {
821  int rv;
822  uint32_t flags;
823 
824  flags=Typemaker2_Type_GetFlags(ty);
825 
826  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
829  if (rv<0) {
830  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
831  return rv;
832  }
833  }
834 
835 
836  rv=TM2C_SetEnumStringFns(ty);
837  if (rv<0) {
838  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
839  return rv;
840  }
841 
842  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
843  rv=_buildFieldIds(tb, ty);
844  if (rv<0) {
845  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
846  return rv;
847  }
848  }
849 
850  rv=_buildApiDoc(tb, ty);
851  if (rv<0) {
852  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
853  return rv;
854  }
855 
856  rv=_buildDefineDefines(tb, ty);
857  if (rv<0) {
858  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
859  return rv;
860  }
861 
862  rv=TM2C_BuildTypedef(tb, ty);
863  if (rv<0) {
864  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
865  return rv;
866  }
867 
868  rv=TM2C_BuildDefineEnums(tb, ty);
869  if (rv<0) {
870  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
871  return rv;
872  }
873 
874  rv=TM2C_BuildDefineVirtualFns(tb, ty, "pre");
875  if (rv<0) {
876  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
877  return rv;
878  }
879 
880  rv=_buildPostHeaders(tb, ty);
881  if (rv<0) {
882  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
883  return rv;
884  }
885 
886  rv=TM2C_BuildDefineVirtualFns(tb, ty, "post");
887  if (rv<0) {
888  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
889  return rv;
890  }
891 
892  rv=TM2C_BuildStruct(tb, ty);
893  if (rv<0) {
894  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
895  return rv;
896  }
897 
898  rv=TM2C_BuildMacroFunctions(tb, ty);
899  if (rv<0) {
900  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
901  return rv;
902  }
903 
904  rv=TM2C_BuildEnumFromString(tb, ty);
905  if (rv<0) {
906  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
907  return rv;
908  }
909 
910  rv=TM2C_BuildEnumToString(tb, ty);
911  if (rv<0) {
912  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
913  return rv;
914  }
915 
916  rv=TM2C_BuildConstructor(tb, ty);
917  if (rv<0) {
918  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
919  return rv;
920  }
921 
922  rv=TM2C_BuildDestructor(tb, ty);
923  if (rv<0) {
924  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
925  return rv;
926  }
927 
929  rv=_buildAttach(tb, ty);
930  if (rv<0) {
931  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
932  return rv;
933  }
934  }
935 
936  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
937  rv=TM2C_BuildDup(tb, ty);
938  if (rv<0) {
939  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
940  return rv;
941  }
942  }
943 
944  if (!(flags & TYPEMAKER2_TYPEFLAGS_NOCOPY)) {
945  rv=TM2C_BuildCopy(tb, ty);
946  if (rv<0) {
947  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
948  return rv;
949  }
950  }
951 
952  rv=TM2C_BuildGetter(tb, ty);
953  if (rv<0) {
954  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
955  return rv;
956  }
957 
958  rv=TM2C_BuildSetter(tb, ty);
959  if (rv<0) {
960  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
961  return rv;
962  }
963 
964  rv=TM2C_BuildProtoVirtualFns(tb, ty);
965  if (rv<0) {
966  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
967  return rv;
968  }
969 
970  rv=TM2C_BuildCodeVirtualFns(tb, ty);
971  if (rv<0) {
972  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
973  return rv;
974  }
975 
977  if (rv<0) {
978  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
979  return rv;
980  }
981 
982  rv=TM2C_BuildSetterVirtualFns(tb, ty);
983  if (rv<0) {
984  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
985  return rv;
986  }
987 
989  if (rv<0) {
990  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
991  return rv;
992  }
993 
994  rv=TM2C_BuildGetterVirtualFns(tb, ty);
995  if (rv<0) {
996  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
997  return rv;
998  }
999 
1000  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
1001  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
1002  rv=TM2C_BuildList1Dup(tb, ty);
1003  if (rv<0) {
1004  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1005  return rv;
1006  }
1007  }
1008  }
1009 
1010  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_DB) {
1011  rv=TM2C_BuildReadDb(tb, ty);
1012  if (rv<0) {
1013  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1014  return rv;
1015  }
1016 
1017  rv=TM2C_BuildWriteDb(tb, ty);
1018  if (rv<0) {
1019  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1020  return rv;
1021  }
1022 
1023  rv=TM2C_BuildFromDb(tb, ty);
1024  if (rv<0) {
1025  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1026  return rv;
1027  }
1028 
1029  rv=TM2C_BuildToDb(tb, ty);
1030  if (rv<0) {
1031  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1032  return rv;
1033  }
1034 
1035  }
1036 
1037  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_XML) {
1038  rv=TM2C_BuildReadXml(tb, ty);
1039  if (rv<0) {
1040  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1041  return rv;
1042  }
1043 
1044  rv=TM2C_BuildWriteXml(tb, ty);
1045  if (rv<0) {
1046  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1047  return rv;
1048  }
1049 
1050  rv=TM2C_BuildToXml(tb, ty);
1051  if (rv<0) {
1052  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1053  return rv;
1054  }
1055 
1056  rv=TM2C_BuildFromXml(tb, ty);
1057  if (rv<0) {
1058  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1059  return rv;
1060  }
1061  }
1062 
1063  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
1064  rv=TM2C_BuildReadObject(tb, ty);
1065  if (rv<0) {
1066  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1067  return rv;
1068  }
1069 
1070  rv=TM2C_BuildWriteObject(tb, ty);
1071  if (rv<0) {
1072  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1073  return rv;
1074  }
1075 
1076  rv=TM2C_BuildToObject(tb, ty);
1077  if (rv<0) {
1078  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1079  return rv;
1080  }
1081 
1082  rv=TM2C_BuildFromObject(tb, ty);
1083  if (rv<0) {
1084  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1085  return rv;
1086  }
1087 
1088  rv=TM2C_BuildCreateColumnList(tb, ty);
1089  if (rv<0) {
1090  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1091  return rv;
1092  }
1093 
1094  rv=TM2C_BuildCreateTable(tb, ty);
1095  if (rv<0) {
1096  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1097  return rv;
1098  }
1099 
1100  rv=TM2C_BuildCreateObject(tb, ty);
1101  if (rv<0) {
1102  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1103  return rv;
1104  }
1105  }
1106 
1107  rv=_buildGetByMember(tb, ty);
1108  if (rv<0) {
1109  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1110  return rv;
1111  }
1112 
1113  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_HASH) {
1114  rv=_buildToHashString(tb, ty);
1115  if (rv<0) {
1116  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1117  return rv;
1118  }
1119  }
1120 
1121  rv=_buildMemberInlines(tb, ty);
1122  if (rv<0) {
1123  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1124  return rv;
1125  }
1126 
1127 
1128  rv=_buildSortByMember(tb, ty);
1129  if (rv<0) {
1130  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1131  return rv;
1132  }
1133 
1134 
1135  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) {
1136  rv=TM2C_BuildSignalFunctions(tb, ty);
1137  if (rv<0) {
1138  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1139  return rv;
1140  }
1141  }
1142 
1143  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
1144  rv=TM2C_BuildSlotFunctions(tb, ty);
1145  if (rv<0) {
1146  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1147  return rv;
1148  }
1149  }
1150 
1151  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS) {
1152  rv=_buildCacheFunctions(tb, ty);
1153  if (rv<0) {
1154  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1155  return rv;
1156  }
1157  }
1158 
1159  rv=_buildInlines(tb, ty);
1160  if (rv<0) {
1161  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1162  return rv;
1163  }
1164 
1165  rv=_buildEndHeaders(tb, ty);
1166  if (rv<0) {
1167  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1168  return rv;
1169  }
1170 
1171  return 0;
1172 }
1173 
1174 
1175 
1177 {
1178  TYPEMAKER2_BUILDER *tb;
1179 
1182 
1183  return tb;
1184 }
1185 
1186 
1187 
1188 
1189 
int TM2C_BuildSlotFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:24
const char * Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct)
Definition: tm_item.c:101
int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:90
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
Definition: tm_type.h:71
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:133
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
Definition: tm_builder.c:352
int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:24
#define DBG_ERROR(dbg_logger, format,...)
Definition: debug.h:97
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:467
int TM2C_BuildDestructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:237
int TM2C_BuildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_tree1.c:30
#define TYPEMAKER2_TYPEFLAGS_WITH_HASH
Definition: tm_type.h:69
const char * Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:68
#define TYPEMAKER2_TYPEFLAGS_NODUP
Definition: tm_type.h:66
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:136
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
const char * Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:69
int TM2C_BuildReadXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readxml.c:31
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:692
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:171
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:629
#define TYPEMAKER2_TYPEFLAGS_NOCOPY
Definition: tm_type.h:68
int TM2C_BuildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
static int _buildCacheFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:631
int TM2C_BuildSetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_setter.c:35
const char * Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:149
#define NULL
Definition: binreloc.c:300
int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:108
int TM2C_BuildConstructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:69
#define TYPEMAKER2_TYPEFLAGS_WITH_XML
Definition: tm_type.h:54
static int _buildToHashString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:371
int TM2C_BuildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_signal.c:25
int TM2C_BuildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_getter.c:32
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
Definition: tm_group.h:19
#define GWEN_LOGDOMAIN
Definition: logger.h:32
#define TYPEMAKER2_FLAGS_WITH_GETBYMEMBER
Definition: tm_type.h:46
static int _buildFieldIds(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:50
#define TYPEMAKER2_TYPEFLAGS_WITH_SLOTS
Definition: tm_type.h:63
struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE
Definition: tm_define.h:24
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
int TM2C_BuildTree2SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_tree2.c:57
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
#define TYPEMAKER2_FLAGS_SORTBYMEMBER
Definition: tm_type.h:44
struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM
Definition: tm_item.h:22
const char * Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:190
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:653
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:196
int TM2C_BuildReadDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readdb.c:31
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
Definition: tm_builder.c:548
int TM2C_BuildDup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_dup.c:34
const char * Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct)
Definition: tm_item.c:107
int TM2C_BuildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int TM2C_BuildWriteObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
static int _buildMemberInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:512
struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE
Definition: tm_inline.h:19
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
int TM2C_BuildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:140
static int _buildGroupApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf)
Definition: tm_builder_c.c:680
int TM2C_BuildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:184
void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
Definition: tm_builder.c:149
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:728
static int _buildPostHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:83
int TM2C_BuildMacroFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_macros.c:24
int TM2C_BuildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:93
int TM2C_BuildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_list1.c:59
int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:539
int TM2C_BuildReadObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:214
int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:127
int TM2C_BuildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc)
int TM2C_BuildWriteDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writedb.c:32
static int _buildSortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:227
#define TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS
Definition: tm_type.h:62
#define TYPEMAKER2_FLAGS_WITH_HASH
Definition: tm_type.h:47
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:585
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:188
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
Definition: buffer.c:1087
#define TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS
Definition: tm_type.h:64
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
Definition: tm_type.h:60
static int Typemaker2_Builder_C_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:819
int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:198
static int _buildApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:780
int TM2C_BuildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_typedef.c:31
TYPEMAKER2_ITEM_LIST * Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:202
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:773
static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:271
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:26
void TM2C_DelVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:267
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:683
int TM2C_BuildProtoGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
int TM2C_BuildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:289
int TM2C_BuildTree2GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_tree2.c:41
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:204
static int _buildAttach(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:592
int TM2C_BuildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writexml.c:32
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:172
int TM2C_BuildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writedb.c:161
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
TYPEMAKER2_BUILDER * Typemaker2_Builder_C_new()
int TM2C_BuildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:25
static int _buildInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:456
int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:91
int TM2C_BuildGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:180
int TM2C_BuildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_list1.c:75
static int _buildGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:167
#define TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT
Definition: tm_type.h:61
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:607
int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:109
TYPEMAKER2_GROUP * Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:521
int TM2C_BuildStruct(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_struct.c:30
int TM2C_AddVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:187
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
Definition: tm_builder.c:53
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
#define DBG_INFO(dbg_logger, format,...)
Definition: debug.h:181
int TM2C_BuildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_list1.c:43
int TM2C_SetEnumStringFns(TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:126
int TM2C_BuildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readxml.c:171
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:764
int TM2C_BuildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readdb.c:171
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:361
int TM2C_BuildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:83
static int _buildEndHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:124
#define TYPEMAKER2_FLAGS_VOLATILE
Definition: tm_type.h:32
#define TYPEMAKER2_TYPEFLAGS_WITH_OBJECT
Definition: tm_type.h:55
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:710
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:791
int TM2C_BuildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:179
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:992
int TM2C_BuildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int Typemaker2_Builder_Invoke_ToHashStringFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf)
#define TYPEMAKER2_TYPEFLAGS_WITH_DB
Definition: tm_type.h:53
int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:208
GWEN_DB_NODE * Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst)
Definition: tm_builder.c:371
int TM2C_BuildCopy(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_copy.c:34
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
Definition: tm_type.h:56