gwenhywfar  5.10.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 
138  h=Typemaker2_Header_List_First(hl);
139  if (h) {
140  GWEN_Buffer_AppendString(tbuf, "/* end-headers */\n");
141  while (h) {
143  GWEN_Buffer_AppendString(tbuf, "#include ");
144 
147  else
149  GWEN_Buffer_AppendString(tbuf, "\n");
150  }
151  h=Typemaker2_Header_List_Next(h);
152  }
153  }
154  GWEN_Buffer_AppendString(tbuf, "\n");
155  }
156 
158  GWEN_Buffer_free(tbuf);
159 
160  return 0;
161 }
162 
163 
164 
166 {
167  GWEN_BUFFER *tbuf;
168  TYPEMAKER2_MEMBER_LIST *tml;
169  uint32_t flags;
170  /* TYPEMAKER2_TYPEMANAGER *tym; */
171 
172  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
173  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
174 
175  flags=Typemaker2_Type_GetFlags(ty);
176 
178  if (tml) {
179  TYPEMAKER2_MEMBER *tm;
180 
181  tm=Typemaker2_Member_List_First(tml);
182  while (tm) {
183  TYPEMAKER2_TYPE *mty;
184  int rv;
185 
187  assert(mty);
188 
190  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
191  rv=TM2C_BuildList1GetByMember(tb, ty, tm);
192  if (rv<0) {
193  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
194  return rv;
195  }
196  }
197 
198  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) {
199  rv=TM2C_BuildTreeGetByMember(tb, ty, tm);
200  if (rv<0) {
201  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
202  return rv;
203  }
204  }
205 
206  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) {
207  rv=TM2C_BuildTree2GetByMember(tb, ty, tm);
208  if (rv<0) {
209  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
210  return rv;
211  }
212  }
213 
214  }
215  tm=Typemaker2_Member_List_Next(tm);
216  }
217  GWEN_Buffer_AppendString(tbuf, " return p_cl;\n");
218  }
219 
220  return 0;
221 }
222 
223 
224 
226 {
227  TYPEMAKER2_MEMBER_LIST *tml;
228  uint32_t flags;
229 
230  flags=Typemaker2_Type_GetFlags(ty);
231 
233  if (tml) {
234  TYPEMAKER2_MEMBER *tm;
235 
236  tm=Typemaker2_Member_List_First(tml);
237  while (tm) {
238  TYPEMAKER2_TYPE *mty;
239  int rv;
240 
242  assert(mty);
243 
245  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
246  rv=TM2C_BuildList1SortByMember(tb, ty, tm);
247  if (rv<0) {
248  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
249  return rv;
250  }
251  }
252  }
253  tm=Typemaker2_Member_List_Next(tm);
254  }
255  }
256 
257  return 0;
258 }
259 
260 
261 
263 {
264  TYPEMAKER2_DEFINE_LIST *defines;
265 
266  defines=Typemaker2_Type_GetDefines(ty);
267 
268  assert(defines);
269  if (Typemaker2_Define_List_GetCount(defines)) {
270  GWEN_BUFFER *tbuf;
271  const char *s;
272  TYPEMAKER2_DEFINE *td;
273 
274  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
275 
276  td=Typemaker2_Define_List_First(defines);
277  while (td) {
278  const char *prefix;
279  TYPEMAKER2_ITEM *ti;
280  int access=TypeMaker2_Access_Public;
282 
283  GWEN_Buffer_AppendString(tbuf, "/* define ");
285  if (s && *s)
286  GWEN_Buffer_AppendString(tbuf, s);
287  GWEN_Buffer_AppendString(tbuf, " */\n");
288 
289  prefix=Typemaker2_Define_GetPrefix(td);
290  if (prefix==NULL || *prefix==0) {
291  DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in define definition");
292  GWEN_Buffer_free(tbuf);
293  return GWEN_ERROR_BAD_DATA;
294  }
295 
296  ti=Typemaker2_Item_List_First(Typemaker2_Define_GetItems(td));
297  while (ti) {
298  GWEN_Buffer_AppendString(tbuf, "#define ");
299  if (prefix)
300  GWEN_Buffer_AppendString(tbuf, prefix);
302  if (s && *s) {
303  GWEN_Buffer_AppendString(tbuf, s);
304  }
306  if (s) {
307  GWEN_Buffer_AppendString(tbuf, " ");
308  GWEN_Buffer_AppendString(tbuf, s);
309  }
310  else {
311  char numbuf[32];
312  int k=0;
313 
314  switch (Typemaker2_Define_GetMode(td)) {
316  k=1<<j;
317  break;
319  default:
320  k=j;
321  }
322  snprintf(numbuf, sizeof(numbuf)-1, "%d", k);
323  numbuf[sizeof(numbuf)-1]=0;
324  GWEN_Buffer_AppendString(tbuf, " ");
325  GWEN_Buffer_AppendString(tbuf, numbuf);
326  j++;
327  }
328 
329  GWEN_Buffer_AppendString(tbuf, "\n");
330  ti=Typemaker2_Item_List_Next(ti);
331  }
332  GWEN_Buffer_AppendString(tbuf, "\n");
333 
334  switch (access) {
337  break;
340  break;
343  break;
346  break;
347  default:
348  DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
349  GWEN_Buffer_free(tbuf);
350  return GWEN_ERROR_BAD_DATA;
351  }
352  GWEN_Buffer_Reset(tbuf);
353 
354  td=Typemaker2_Define_List_Next(td);
355  }
356  }
357  return 0;
358 }
359 
360 
361 
363 {
364  GWEN_BUFFER *tbuf;
365  const char *s;
367  TYPEMAKER2_MEMBER_LIST *tml;
368  const char *sTypeId;
369  const char *sTypePrefix;
370 
372  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
373 
374  sTypeId=Typemaker2_Type_GetIdentifier(ty);
375  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
376 
377  /* prototype */
379  if (s && *s)
380  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
381  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer);\n",
382  sTypePrefix, sTypeId);
384  GWEN_Buffer_Reset(tbuf);
385 
386  /* implementation */
387  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer) {\n",
388  sTypePrefix, sTypeId);
389  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
390 
392  if (tml) {
393  TYPEMAKER2_MEMBER *tm;
394 
395  tm=Typemaker2_Member_List_First(tml);
396  while (tm) {
397  TYPEMAKER2_TYPE *mty;
398  const char *sMemberName;
399 
401  assert(mty);
402  sMemberName=Typemaker2_Member_GetName(tm);
403 
405  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\"*/\n", sMemberName);
406  /* toHashString */
407  if (1) {
408  GWEN_BUFFER *srcbuf;
409  int rv;
410 
411  srcbuf=GWEN_Buffer_new(0, 256, 0, 1);
412  GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName);
413 
414  GWEN_Buffer_AppendString(tbuf, " ");
416  GWEN_Buffer_GetStart(srcbuf),
417  NULL, /* no dest */
418  tbuf);
419  GWEN_Buffer_free(srcbuf);
420  if (rv<0) {
421  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
422  GWEN_Buffer_free(tbuf);
423  return rv;
424  }
425  GWEN_Buffer_AppendString(tbuf, "\n");
426  }
427 
428  GWEN_Buffer_AppendString(tbuf, " GWEN_Buffer_AppendByte(p_buffer, \':\');\n");
429  }
430  else
431  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" doesn't have with_hash flag, ignoring */\n", sMemberName);
432 
433  tm=Typemaker2_Member_List_Next(tm);
434  } /* while tm */
435  }
436 
437  GWEN_Buffer_AppendString(tbuf, "}\n");
438 
440  GWEN_Buffer_free(tbuf);
441 
442  return 0;
443 }
444 
445 
446 
448 {
449  GWEN_BUFFER *tbuf;
450  uint32_t flags;
451 
452  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
453 
454  flags=Typemaker2_Type_GetFlags(ty);
455 
456  while (ty) {
457  TYPEMAKER2_INLINE *ti;
458 
459  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(ty));
460  while (ti) {
462  const char *content;
463 
464  content=Typemaker2_Inline_GetContent(ti);
465  if (content && *content) {
466  GWEN_DB_NODE *db;
467  int rv;
468 
470  assert(db);
471  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
472  if (rv<0) {
473  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
474  GWEN_Buffer_free(tbuf);
475  return rv;
476  }
477 
478  /* include code */
479  switch (Typemaker2_Inline_GetLocation(ti)) {
482  break;
483 
486  break;
487  }
488  }
489  GWEN_Buffer_Reset(tbuf);
490  }
491 
492  ti=Typemaker2_Inline_List_Next(ti);
493  }
495  }
496 
497  return 0;
498 }
499 
500 
501 
503 {
504  GWEN_BUFFER *tbuf;
505  uint32_t flags;
506  /* TYPEMAKER2_TYPEMANAGER *tym; */
507 
508  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
509  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
510 
511  flags=Typemaker2_Type_GetFlags(ty);
512 
513  while (ty) {
514  TYPEMAKER2_MEMBER_LIST *tml;
515 
517  if (tml) {
518  TYPEMAKER2_MEMBER *tm;
519 
520  tm=Typemaker2_Member_List_First(tml);
521  while (tm) {
522  TYPEMAKER2_TYPE *mty;
523 
525  if (mty) {
526  TYPEMAKER2_INLINE *ti;
527 
528  /* get inlines from member type */
529  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(mty));
530  while (ti) {
532  const char *content;
533 
534  content=Typemaker2_Inline_GetContent(ti);
535  if (content && *content) {
536  GWEN_DB_NODE *db;
537  int rv;
538 
539  /* replace vars in context of the struct type, not the particular member type */
541  assert(db);
542  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
543  if (rv<0) {
544  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
545  GWEN_Buffer_free(tbuf);
546  return rv;
547  }
548 
549  /* include code */
550  switch (Typemaker2_Inline_GetLocation(ti)) {
553  break;
554 
557  break;
558  }
559  }
560  GWEN_Buffer_Reset(tbuf);
561  }
562 
563  ti=Typemaker2_Inline_List_Next(ti);
564  }
565  } /* if mty */
566 
567  tm=Typemaker2_Member_List_Next(tm);
568  } /* while tm */
569  } /* if tml */
570 
572  }
573 
574  return 0;
575 }
576 
577 
578 
580 {
581  GWEN_BUFFER *tbuf;
582  const char *s;
584  const char *sTypeId;
585  const char *sTypePrefix;
586 
588  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
589 
590  sTypeId=Typemaker2_Type_GetIdentifier(ty);
591  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
592 
593  /* prototype */
595  if (s && *s)
596  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
597 
598  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct);\n", sTypePrefix, sTypeId);
599 
601  GWEN_Buffer_Reset(tbuf);
602 
603  /* implementation */
604  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct) {\n", sTypePrefix, sTypeId);
605  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
606  GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n");
607  GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount++;\n");
608  GWEN_Buffer_AppendString(tbuf, "}\n");
609 
611  GWEN_Buffer_free(tbuf);
612 
613  return 0;
614 }
615 
616 
617 
619 {
620  GWEN_BUFFER *tbuf;
622  const char *sApi;
623  const char *sTypePrefix;
624 
626  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
627 
629  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
630 
631  /* public prototypes */
632  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
633 
634  if (sApi && *sApi)
635  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
636  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Attach(void *ptr);\n", sTypePrefix);
637  GWEN_Buffer_AppendString(tbuf, "\n");
638 
639  if (sApi && *sApi)
640  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
641  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Free(void *ptr);\n", sTypePrefix);
642  GWEN_Buffer_AppendString(tbuf, "\n");
643 
645  GWEN_Buffer_Reset(tbuf);
646 
647  /* implementations */
648  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
649  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Attach(void *ptr) {\n", sTypePrefix);
650  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
651  GWEN_Buffer_AppendString(tbuf, "}\n");
652  GWEN_Buffer_AppendString(tbuf, "\n");
653 
654  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Free(void *ptr) {\n", sTypePrefix);
655  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
656  GWEN_Buffer_AppendString(tbuf, "}\n");
657  GWEN_Buffer_AppendString(tbuf, "\n");
658 
660  GWEN_Buffer_free(tbuf);
661 
662  return 0;
663 }
664 
665 
666 
668  TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf)
669 {
670  const char *s;
671  TYPEMAKER2_GROUP *childGrp;
672  TYPEMAKER2_MEMBER_LIST *members;
673  const char *sTypeIdentifier;
674  const char *sTypePrefix;
675 
676  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
677  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
678 
679  /* write title */
681  GWEN_Buffer_AppendString(buf, "\n\n");
682  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n", depth, (s && *s)?s:"Unnamed Group", depth);
683  GWEN_Buffer_AppendString(buf, "\n");
684 
686  if (s && *s) {
687  GWEN_DB_NODE *dbCall;
688  int rv;
689 
691  assert(dbCall);
692  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
693  if (rv<0) {
694  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
695  GWEN_DB_Group_free(dbCall);
696  GWEN_Buffer_free(buf);
697  return rv;
698  }
699  GWEN_DB_Group_free(dbCall);
700  GWEN_Buffer_AppendString(buf, "\n");
701  }
702 
703  /* write member docs */
704  members=Typemaker2_Type_GetMembers(ty);
705  if (members) {
706  TYPEMAKER2_MEMBER *tm;
707 
708  tm=Typemaker2_Member_List_First(members);
709  while (tm) {
710  if (Typemaker2_Member_GetGroupPtr(tm)==grp) {
711  const char *sMemberName;
712 
713  sMemberName=Typemaker2_Member_GetName(tm);
714  GWEN_Buffer_AppendArgs(buf, "\n\n@anchor %s_%s\n", sTypeIdentifier, sMemberName);
715  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n\n", depth+1, sMemberName, depth+1);
716 
717  /* add description, if any */
719  if (s && *s) {
720  GWEN_DB_NODE *dbCall;
721  int rv;
722 
723  dbCall=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, NULL, NULL);
724  assert(dbCall);
725  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
726  if (rv<0) {
727  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
728  GWEN_DB_Group_free(dbCall);
729  GWEN_Buffer_free(buf);
730  return rv;
731  }
732  GWEN_DB_Group_free(dbCall);
733  GWEN_Buffer_AppendString(buf, "\n");
734  }
735 
736  /* add setter/getter info */
738  "<p>Set this property with @ref %s_Set%c%s(), ",
739  sTypePrefix, toupper(*sMemberName), sMemberName+1);
741  "get it with @ref %s_Get%c%s().</p>\n",
742  sTypePrefix, toupper(*sMemberName), sMemberName+1);
743  }
744  tm=Typemaker2_Member_List_Next(tm);
745  }
746  }
747 
748  /* write children groups */
749  childGrp=Typemaker2_Group_Tree_GetFirstChild(grp);
750  while (childGrp) {
751  int rv;
752 
753  rv=_buildGroupApiDoc(tb, ty, childGrp, depth+1, buf);
754  if (rv<0) {
755  DBG_ERROR(0, "here (%d)", rv);
756  return rv;
757  }
758  childGrp=Typemaker2_Group_Tree_GetNext(childGrp);
759  }
760 
761  return 0;
762 }
763 
764 
765 
766 
768 {
769  TYPEMAKER2_GROUP_TREE *groupTree;
770  TYPEMAKER2_GROUP *grp;
771  GWEN_BUFFER *tbuf;
772  const char *sTypeIdentifier;
773 
774  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
775 
776  groupTree=Typemaker2_Type_GetGroupTree(ty);
777 
778  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
779 
780  GWEN_Buffer_AppendArgs(tbuf, "/** @page P_%s Structure %s\n", sTypeIdentifier, sTypeIdentifier);
781  GWEN_Buffer_AppendArgs(tbuf, "<p>This page describes the properties of %s.</p>\n", sTypeIdentifier);
782  GWEN_Buffer_AppendString(tbuf, "\n");
783 
784  grp=Typemaker2_Group_Tree_GetFirst(groupTree);
785  while (grp) {
786  _buildGroupApiDoc(tb, ty, grp, 1, tbuf);
787  grp=Typemaker2_Group_Tree_GetNext(grp);
788  }
789  GWEN_Buffer_AppendString(tbuf, "\n");
790  GWEN_Buffer_AppendString(tbuf, "*/\n");
791 
793 
794  GWEN_Buffer_free(tbuf);
795 
796  return 0;
797 }
798 
799 
800 
801 
802 
803 
804 
805 
807 {
808  int rv;
809  uint32_t flags;
810 
811  flags=Typemaker2_Type_GetFlags(ty);
812 
813  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
816  if (rv<0) {
817  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
818  return rv;
819  }
820  }
821 
822 
823  rv=TM2C_SetEnumStringFns(ty);
824  if (rv<0) {
825  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
826  return rv;
827  }
828 
829  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
830  rv=_buildFieldIds(tb, ty);
831  if (rv<0) {
832  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
833  return rv;
834  }
835  }
836 
837  rv=_buildApiDoc(tb, ty);
838  if (rv<0) {
839  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
840  return rv;
841  }
842 
843  rv=_buildDefineDefines(tb, ty);
844  if (rv<0) {
845  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
846  return rv;
847  }
848 
849  rv=TM2C_BuildTypedef(tb, ty);
850  if (rv<0) {
851  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
852  return rv;
853  }
854 
855  rv=TM2C_BuildDefineEnums(tb, ty);
856  if (rv<0) {
857  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
858  return rv;
859  }
860 
861  rv=TM2C_BuildDefineVirtualFns(tb, ty, "pre");
862  if (rv<0) {
863  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
864  return rv;
865  }
866 
867  rv=_buildPostHeaders(tb, ty);
868  if (rv<0) {
869  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
870  return rv;
871  }
872 
873  rv=TM2C_BuildDefineVirtualFns(tb, ty, "post");
874  if (rv<0) {
875  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
876  return rv;
877  }
878 
879  rv=TM2C_BuildStruct(tb, ty);
880  if (rv<0) {
881  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
882  return rv;
883  }
884 
885  rv=TM2C_BuildMacroFunctions(tb, ty);
886  if (rv<0) {
887  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
888  return rv;
889  }
890 
891  rv=TM2C_BuildEnumFromString(tb, ty);
892  if (rv<0) {
893  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
894  return rv;
895  }
896 
897  rv=TM2C_BuildEnumToString(tb, ty);
898  if (rv<0) {
899  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
900  return rv;
901  }
902 
903  rv=TM2C_BuildConstructor(tb, ty);
904  if (rv<0) {
905  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
906  return rv;
907  }
908 
909  rv=TM2C_BuildDestructor(tb, ty);
910  if (rv<0) {
911  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
912  return rv;
913  }
914 
916  rv=_buildAttach(tb, ty);
917  if (rv<0) {
918  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
919  return rv;
920  }
921  }
922 
923  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
924  rv=TM2C_BuildDup(tb, ty);
925  if (rv<0) {
926  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
927  return rv;
928  }
929  }
930 
931  if (!(flags & TYPEMAKER2_TYPEFLAGS_NOCOPY)) {
932  rv=TM2C_BuildCopy(tb, ty);
933  if (rv<0) {
934  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
935  return rv;
936  }
937  }
938 
939  rv=TM2C_BuildGetter(tb, ty);
940  if (rv<0) {
941  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
942  return rv;
943  }
944 
945  rv=TM2C_BuildSetter(tb, ty);
946  if (rv<0) {
947  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
948  return rv;
949  }
950 
951  rv=TM2C_BuildProtoVirtualFns(tb, ty);
952  if (rv<0) {
953  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
954  return rv;
955  }
956 
957  rv=TM2C_BuildCodeVirtualFns(tb, ty);
958  if (rv<0) {
959  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
960  return rv;
961  }
962 
964  if (rv<0) {
965  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
966  return rv;
967  }
968 
969  rv=TM2C_BuildSetterVirtualFns(tb, ty);
970  if (rv<0) {
971  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
972  return rv;
973  }
974 
976  if (rv<0) {
977  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
978  return rv;
979  }
980 
981  rv=TM2C_BuildGetterVirtualFns(tb, ty);
982  if (rv<0) {
983  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
984  return rv;
985  }
986 
987  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
988  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
989  rv=TM2C_BuildList1Dup(tb, ty);
990  if (rv<0) {
991  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
992  return rv;
993  }
994  }
995  }
996 
997  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_DB) {
998  rv=TM2C_BuildReadDb(tb, ty);
999  if (rv<0) {
1000  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1001  return rv;
1002  }
1003 
1004  rv=TM2C_BuildWriteDb(tb, ty);
1005  if (rv<0) {
1006  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1007  return rv;
1008  }
1009 
1010  rv=TM2C_BuildFromDb(tb, ty);
1011  if (rv<0) {
1012  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1013  return rv;
1014  }
1015 
1016  rv=TM2C_BuildToDb(tb, ty);
1017  if (rv<0) {
1018  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1019  return rv;
1020  }
1021 
1022  }
1023 
1024  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_XML) {
1025  rv=TM2C_BuildReadXml(tb, ty);
1026  if (rv<0) {
1027  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1028  return rv;
1029  }
1030 
1031  rv=TM2C_BuildWriteXml(tb, ty);
1032  if (rv<0) {
1033  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1034  return rv;
1035  }
1036 
1037  rv=TM2C_BuildToXml(tb, ty);
1038  if (rv<0) {
1039  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1040  return rv;
1041  }
1042 
1043  rv=TM2C_BuildFromXml(tb, ty);
1044  if (rv<0) {
1045  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1046  return rv;
1047  }
1048  }
1049 
1050  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
1051  rv=TM2C_BuildReadObject(tb, ty);
1052  if (rv<0) {
1053  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1054  return rv;
1055  }
1056 
1057  rv=TM2C_BuildWriteObject(tb, ty);
1058  if (rv<0) {
1059  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1060  return rv;
1061  }
1062 
1063  rv=TM2C_BuildToObject(tb, ty);
1064  if (rv<0) {
1065  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1066  return rv;
1067  }
1068 
1069  rv=TM2C_BuildFromObject(tb, ty);
1070  if (rv<0) {
1071  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1072  return rv;
1073  }
1074 
1075  rv=TM2C_BuildCreateColumnList(tb, ty);
1076  if (rv<0) {
1077  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1078  return rv;
1079  }
1080 
1081  rv=TM2C_BuildCreateTable(tb, ty);
1082  if (rv<0) {
1083  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1084  return rv;
1085  }
1086 
1087  rv=TM2C_BuildCreateObject(tb, ty);
1088  if (rv<0) {
1089  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1090  return rv;
1091  }
1092  }
1093 
1094  rv=_buildGetByMember(tb, ty);
1095  if (rv<0) {
1096  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1097  return rv;
1098  }
1099 
1100  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_HASH) {
1101  rv=_buildToHashString(tb, ty);
1102  if (rv<0) {
1103  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1104  return rv;
1105  }
1106  }
1107 
1108  rv=_buildMemberInlines(tb, ty);
1109  if (rv<0) {
1110  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1111  return rv;
1112  }
1113 
1114 
1115  rv=_buildSortByMember(tb, ty);
1116  if (rv<0) {
1117  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1118  return rv;
1119  }
1120 
1121 
1122  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) {
1123  rv=TM2C_BuildSignalFunctions(tb, ty);
1124  if (rv<0) {
1125  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1126  return rv;
1127  }
1128  }
1129 
1130  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
1131  rv=TM2C_BuildSlotFunctions(tb, ty);
1132  if (rv<0) {
1133  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1134  return rv;
1135  }
1136  }
1137 
1138  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS) {
1139  rv=_buildCacheFunctions(tb, ty);
1140  if (rv<0) {
1141  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1142  return rv;
1143  }
1144  }
1145 
1146  rv=_buildInlines(tb, ty);
1147  if (rv<0) {
1148  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1149  return rv;
1150  }
1151 
1152  rv=_buildEndHeaders(tb, ty);
1153  if (rv<0) {
1154  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1155  return rv;
1156  }
1157 
1158  return 0;
1159 }
1160 
1161 
1162 
1164 {
1165  TYPEMAKER2_BUILDER *tb;
1166 
1169 
1170  return tb;
1171 }
1172 
1173 
1174 
1175 
1176 
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
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:650
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:587
#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:618
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:362
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:35
#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
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:650
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:502
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:667
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:686
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:225
#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:543
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:1084
#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:806
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:767
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:731
static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:262
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:641
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:30
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:579
int TM2C_BuildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writexml.c:32
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
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:447
int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:91
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
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:165
#define TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT
Definition: tm_type.h:61
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:565
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
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:722
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:341
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:668
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:749
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:989
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