gwenhywfar  5.10.1
tm2c_virtualfn.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 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13 
14 
15 #include "tm2c_virtualfn.h"
16 #include "tm2c_misc.h"
17 
18 #include <gwenhywfar/debug.h>
19 
20 #include <ctype.h>
21 
22 
23 
25 {
26  TYPEMAKER2_VIRTUALFN_LIST *fns;
27 
29 
30  assert(fns);
31  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
32  GWEN_BUFFER *tbuf;
33  const char *s;
35 
36  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
37 
38  if (loc && *loc)
39  GWEN_Buffer_AppendArgs(tbuf, "/* definitions for virtual functions (%s) */\n", loc);
40  else
41  GWEN_Buffer_AppendString(tbuf, "/* definitions for virtual functions */\n");
42 
43  vf=Typemaker2_VirtualFn_List_First(fns);
44  while (vf) {
46  if (!(s && *s))
47  s="pre";
48  if (s && loc && strcasecmp(s, loc)==0) {
49  int access=Typemaker2_VirtualFn_GetAccess(vf);
50  TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist;
51  int i;
52 
53  GWEN_Buffer_AppendString(tbuf, "typedef ");
55  if (!(s && *s)) {
56  GWEN_Buffer_free(tbuf);
57  return GWEN_ERROR_BAD_DATA;
58  }
59  GWEN_Buffer_AppendString(tbuf, s);
60 
62  GWEN_Buffer_AppendString(tbuf, " GWENHYWFAR_CB");
63  }
64 
66 
68  if (!(s && *s)) {
69  GWEN_Buffer_free(tbuf);
70  return GWEN_ERROR_BAD_DATA;
71  }
72  while (*s) {
73  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
74  s++;
75  }
76  GWEN_Buffer_AppendString(tbuf, "_FN)(");
77 
79  GWEN_Buffer_AppendString(tbuf, "const ");
80 
82  GWEN_Buffer_AppendString(tbuf, s);
83  /* created structs are always pointers */
84  GWEN_Buffer_AppendString(tbuf, " *p_struct");
85 
87  if (plist) {
89 
90  i=1;
91  prm=Typemaker2_VirtualFn_Param_List_First(plist);
92  while (prm) {
93  const char *paramName;
94  const char *paramType;
95 
96  GWEN_Buffer_AppendString(tbuf, ", ");
97 
100 
101  GWEN_Buffer_AppendString(tbuf, paramType);
102  GWEN_Buffer_AppendString(tbuf, " ");
103 
104  if (paramName)
105  GWEN_Buffer_AppendString(tbuf, paramName);
106  else
107  GWEN_Buffer_AppendArgs(tbuf, "param%d", i);
108 
109  prm=Typemaker2_VirtualFn_Param_List_Next(prm);
110  i++;
111  }
112  }
113 
114  GWEN_Buffer_AppendString(tbuf, ");\n");
116  GWEN_Buffer_Reset(tbuf);
117  }
118 
119  vf=Typemaker2_VirtualFn_List_Next(vf);
120  }
121  GWEN_Buffer_free(tbuf);
122  }
123 
124  return 0;
125 }
126 
127 
128 
130 {
131  TYPEMAKER2_VIRTUALFN_LIST *fns;
133 
136 
137  assert(fns);
138  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
139  GWEN_BUFFER *tbuf;
140  const char *s;
142 
143  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
144 
145  GWEN_Buffer_AppendString(tbuf, "/* prototypes for virtual functions */\n");
146  vf=Typemaker2_VirtualFn_List_First(fns);
147  while (vf) {
148  int access=Typemaker2_VirtualFn_GetAccess(vf);
149  TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist;
150  int i;
151 
152  /* write APIDOC */
153  GWEN_Buffer_AppendString(tbuf, "/**\n");
155  if (s && *s) {
156  int len;
157 
158  GWEN_Buffer_AppendString(tbuf, " * ");
159  GWEN_Buffer_AppendString(tbuf, s);
160  len=strlen(s);
161  if (s[len-1]!='\n')
162  GWEN_Buffer_AppendString(tbuf, "\n");
163  }
164 
166  if (s && *s) {
167  int len;
168 
169  GWEN_Buffer_AppendString(tbuf, " * @return ");
170  GWEN_Buffer_AppendString(tbuf, s);
171  len=strlen(s);
172  if (s[len-1]!='\n')
173  GWEN_Buffer_AppendString(tbuf, "\n");
174  }
175 
176 
177  i=1;
179  if (plist) {
181 
182  i=1;
183  prm=Typemaker2_VirtualFn_Param_List_First(plist);
184  while (prm) {
185  const char *paramDescr;
186 
187  paramDescr=Typemaker2_VirtualFn_Param_GetDescr(prm);
188  if (paramDescr && *paramDescr) {
189  const char *paramName;
190  int len;
191 
192  GWEN_Buffer_AppendString(tbuf, " * @param ");
193  paramName=Typemaker2_VirtualFn_Param_GetName(prm);
194  if (paramName)
195  GWEN_Buffer_AppendString(tbuf, paramName);
196  else {
197  char numbuf[64];
198 
199  snprintf(numbuf, sizeof(numbuf)-1, "param%d", i);
200  numbuf[sizeof(numbuf)-1]=0;
201  GWEN_Buffer_AppendString(tbuf, numbuf);
202  }
203 
204  GWEN_Buffer_AppendString(tbuf, " ");
205  GWEN_Buffer_AppendString(tbuf, paramDescr);
206  len=strlen(paramDescr);
207  if (paramDescr[len-1]!='\n')
208  GWEN_Buffer_AppendString(tbuf, "\n");
209  }
210 
211  i++;
212  prm=Typemaker2_VirtualFn_Param_List_Next(prm);
213  }
214  }
215  GWEN_Buffer_AppendString(tbuf, " */\n");
216 
217 
219  if (s && *s) {
220  GWEN_Buffer_AppendString(tbuf, s);
221  GWEN_Buffer_AppendString(tbuf, " ");
222  }
223 
225  if (!(s && *s)) {
226  GWEN_Buffer_free(tbuf);
227  return GWEN_ERROR_BAD_DATA;
228  }
229  GWEN_Buffer_AppendString(tbuf, s);
230  GWEN_Buffer_AppendString(tbuf, " ");
231 
233  GWEN_Buffer_AppendString(tbuf, s);
234  GWEN_Buffer_AppendString(tbuf, "_");
236  if (!(s && *s)) {
237  GWEN_Buffer_free(tbuf);
238  return GWEN_ERROR_BAD_DATA;
239  }
240  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
241  GWEN_Buffer_AppendString(tbuf, s+1);
242  GWEN_Buffer_AppendString(tbuf, "(");
243 
245  GWEN_Buffer_AppendString(tbuf, "const ");
246 
248  GWEN_Buffer_AppendString(tbuf, s);
249  /* created structs are always pointers */
250  GWEN_Buffer_AppendString(tbuf, " *p_struct");
251 
252 
253  i=1;
255  if (plist) {
257 
258  i=1;
259  prm=Typemaker2_VirtualFn_Param_List_First(plist);
260  while (prm) {
261  const char *paramName;
262  const char *paramType;
263 
264  GWEN_Buffer_AppendString(tbuf, ", ");
265 
266  paramName=Typemaker2_VirtualFn_Param_GetName(prm);
267  paramType=Typemaker2_VirtualFn_Param_GetType(prm);
268 
269  GWEN_Buffer_AppendString(tbuf, paramType);
270  GWEN_Buffer_AppendString(tbuf, " ");
271 
272  if (paramName)
273  GWEN_Buffer_AppendString(tbuf, paramName);
274  else {
275  char numbuf[64];
276 
277  snprintf(numbuf, sizeof(numbuf)-1, "param%d", i);
278  numbuf[sizeof(numbuf)-1]=0;
279  GWEN_Buffer_AppendString(tbuf, numbuf);
280  }
281 
282  prm=Typemaker2_VirtualFn_Param_List_Next(prm);
283  i++;
284  }
285  }
286  GWEN_Buffer_AppendString(tbuf, ");\n");
288  GWEN_Buffer_Reset(tbuf);
289 
290  vf=Typemaker2_VirtualFn_List_Next(vf);
291  }
292  GWEN_Buffer_free(tbuf);
293  }
294 
295  return 0;
296 }
297 
298 
299 
301 {
302  TYPEMAKER2_VIRTUALFN_LIST *fns;
303 
305 
306  assert(fns);
307  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
308  GWEN_BUFFER *tbuf;
309  const char *s;
311 
312  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
313 
314  GWEN_Buffer_AppendString(tbuf, "/* code for virtual functions */\n");
315  vf=Typemaker2_VirtualFn_List_First(fns);
316  while (vf) {
317  TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist;
318  int i;
319 
321  if (!(s && *s)) {
322  GWEN_Buffer_free(tbuf);
323  return GWEN_ERROR_BAD_DATA;
324  }
325  GWEN_Buffer_AppendString(tbuf, s);
326  GWEN_Buffer_AppendString(tbuf, " ");
327 
329  GWEN_Buffer_AppendString(tbuf, s);
330  GWEN_Buffer_AppendString(tbuf, "_");
332  if (!(s && *s)) {
333  GWEN_Buffer_free(tbuf);
334  return GWEN_ERROR_BAD_DATA;
335  }
336  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
337  GWEN_Buffer_AppendString(tbuf, s+1);
338  GWEN_Buffer_AppendString(tbuf, "(");
339 
341  GWEN_Buffer_AppendString(tbuf, "const ");
342 
344  GWEN_Buffer_AppendString(tbuf, s);
345  /* created structs are always pointers */
346  GWEN_Buffer_AppendString(tbuf, " *p_struct");
347 
348 
349  i=1;
351  if (plist) {
353 
354  i=1;
355  prm=Typemaker2_VirtualFn_Param_List_First(plist);
356  while (prm) {
357  const char *paramName;
358  const char *paramType;
359 
360  GWEN_Buffer_AppendString(tbuf, ", ");
361 
362  paramName=Typemaker2_VirtualFn_Param_GetName(prm);
363  paramType=Typemaker2_VirtualFn_Param_GetType(prm);
364 
365  GWEN_Buffer_AppendString(tbuf, paramType);
366  GWEN_Buffer_AppendString(tbuf, " ");
367 
368  if (paramName)
369  GWEN_Buffer_AppendString(tbuf, paramName);
370  else {
371  char numbuf[64];
372 
373  snprintf(numbuf, sizeof(numbuf)-1, "param%d", i);
374  numbuf[sizeof(numbuf)-1]=0;
375  GWEN_Buffer_AppendString(tbuf, numbuf);
376  }
377 
378  prm=Typemaker2_VirtualFn_Param_List_Next(prm);
379  i++;
380  }
381  }
382  GWEN_Buffer_AppendString(tbuf, ") {\n");
383 
384  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
385  GWEN_Buffer_AppendString(tbuf, " if (p_struct->");
387  if (!(s && *s)) {
388  DBG_ERROR(0, "Virtual functions has no name");
389  GWEN_Buffer_free(tbuf);
390  return GWEN_ERROR_BAD_DATA;
391  }
392  GWEN_Buffer_AppendString(tbuf, s);
393  GWEN_Buffer_AppendString(tbuf, "Fn)\n");
394  GWEN_Buffer_AppendString(tbuf, " return p_struct->");
395  GWEN_Buffer_AppendString(tbuf, s);
396  GWEN_Buffer_AppendString(tbuf, "Fn(p_struct");
397 
398  i=1;
400  if (plist) {
402 
403  i=1;
404  prm=Typemaker2_VirtualFn_Param_List_First(plist);
405  while (prm) {
406  const char *paramName;
407 
408  GWEN_Buffer_AppendString(tbuf, ", ");
409 
410  paramName=Typemaker2_VirtualFn_Param_GetName(prm);
411 
412  if (paramName)
413  GWEN_Buffer_AppendString(tbuf, paramName);
414  else {
415  char numbuf[64];
416 
417  snprintf(numbuf, sizeof(numbuf)-1, "param%d", i);
418  numbuf[sizeof(numbuf)-1]=0;
419  GWEN_Buffer_AppendString(tbuf, numbuf);
420  }
421 
422  prm=Typemaker2_VirtualFn_Param_List_Next(prm);
423  i++;
424  }
425  }
426  GWEN_Buffer_AppendString(tbuf, ");\n");
427 
428  GWEN_Buffer_AppendString(tbuf, " else\n");
429  GWEN_Buffer_AppendString(tbuf, " return ");
431  if (!(s && *s)) {
432  DBG_ERROR(0, "No default return value");
433  GWEN_Buffer_free(tbuf);
434  return GWEN_ERROR_BAD_DATA;
435  }
436  GWEN_Buffer_AppendString(tbuf, s);
437  GWEN_Buffer_AppendString(tbuf, ";\n");
438  GWEN_Buffer_AppendString(tbuf, "}\n");
439 
441  GWEN_Buffer_Reset(tbuf);
442 
443  vf=Typemaker2_VirtualFn_List_Next(vf);
444  }
445  GWEN_Buffer_free(tbuf);
446  }
447 
448  return 0;
449 }
450 
451 
452 
454 {
455  TYPEMAKER2_VIRTUALFN_LIST *fns;
457 
460 
461  assert(fns);
462  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
463  GWEN_BUFFER *tbuf;
464  const char *s;
466 
467  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
468 
469  GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n");
470  vf=Typemaker2_VirtualFn_List_First(fns);
471  while (vf) {
472  int access=Typemaker2_VirtualFn_GetAccess(vf);
473 
475  if (s && *s) {
476  GWEN_Buffer_AppendString(tbuf, s);
477  GWEN_Buffer_AppendString(tbuf, " ");
478  }
479 
481  GWEN_Buffer_AppendString(tbuf, s);
482  GWEN_Buffer_AppendString(tbuf, "_");
484  if (!(s && *s)) {
485  GWEN_Buffer_free(tbuf);
486  return GWEN_ERROR_BAD_DATA;
487  }
488  while (*s)
489  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
490  GWEN_Buffer_AppendString(tbuf, "_FN ");
491 
493  GWEN_Buffer_AppendString(tbuf, s);
494  GWEN_Buffer_AppendString(tbuf, "_Set");
496  if (!(s && *s)) {
497  GWEN_Buffer_free(tbuf);
498  return GWEN_ERROR_BAD_DATA;
499  }
500  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
501  GWEN_Buffer_AppendString(tbuf, s+1);
502  GWEN_Buffer_AppendString(tbuf, "Fn(");
503 
505  GWEN_Buffer_AppendString(tbuf, s);
506  /* created structs are always pointers */
507  GWEN_Buffer_AppendString(tbuf, " *p_struct, ");
508 
510  GWEN_Buffer_AppendString(tbuf, s);
511  GWEN_Buffer_AppendString(tbuf, "_");
513  if (!(s && *s)) {
514  GWEN_Buffer_free(tbuf);
515  return GWEN_ERROR_BAD_DATA;
516  }
517  while (*s)
518  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
519  GWEN_Buffer_AppendString(tbuf, "_FN fn);\n");
520 
521  switch (access) {
524  break;
527  break;
530  break;
533  break;
534  default:
535  DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
536  GWEN_Buffer_free(tbuf);
537  return GWEN_ERROR_BAD_DATA;
538  }
539  GWEN_Buffer_Reset(tbuf);
540 
541  vf=Typemaker2_VirtualFn_List_Next(vf);
542  }
543  GWEN_Buffer_free(tbuf);
544  }
545 
546  return 0;
547 }
548 
549 
550 
552 {
553  TYPEMAKER2_VIRTUALFN_LIST *fns;
554 
556 
557  assert(fns);
558  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
559  GWEN_BUFFER *tbuf;
560  const char *s;
562 
563  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
564 
565  GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n");
566  vf=Typemaker2_VirtualFn_List_First(fns);
567  while (vf) {
568 
570  GWEN_Buffer_AppendString(tbuf, s);
571  GWEN_Buffer_AppendString(tbuf, "_");
572 
574  if (!(s && *s)) {
575  GWEN_Buffer_free(tbuf);
576  return GWEN_ERROR_BAD_DATA;
577  }
578  while (*s)
579  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
580  GWEN_Buffer_AppendString(tbuf, "_FN ");
581 
583  GWEN_Buffer_AppendString(tbuf, s);
584  GWEN_Buffer_AppendString(tbuf, "_Set");
586  if (!(s && *s)) {
587  GWEN_Buffer_free(tbuf);
588  return GWEN_ERROR_BAD_DATA;
589  }
590  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
591  GWEN_Buffer_AppendString(tbuf, s+1);
592  GWEN_Buffer_AppendString(tbuf, "Fn(");
593 
595  GWEN_Buffer_AppendString(tbuf, s);
596  /* created structs are always pointers */
597  GWEN_Buffer_AppendString(tbuf, " *p_struct, ");
598 
600  GWEN_Buffer_AppendString(tbuf, s);
601  GWEN_Buffer_AppendString(tbuf, "_");
603  if (!(s && *s)) {
604  GWEN_Buffer_free(tbuf);
605  return GWEN_ERROR_BAD_DATA;
606  }
607  while (*s)
608  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
609  GWEN_Buffer_AppendString(tbuf, "_FN fn){\n");
610 
611  GWEN_Buffer_AppendString(tbuf, " ");
613  GWEN_Buffer_AppendString(tbuf, s);
614  GWEN_Buffer_AppendString(tbuf, "_");
616  if (!(s && *s)) {
617  GWEN_Buffer_free(tbuf);
618  return GWEN_ERROR_BAD_DATA;
619  }
620  while (*s)
621  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
622  GWEN_Buffer_AppendString(tbuf, "_FN oldFn;\n\n");
623 
624  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
625  GWEN_Buffer_AppendString(tbuf, " oldFn=p_struct->");
627  if (!(s && *s)) {
628  GWEN_Buffer_free(tbuf);
629  return GWEN_ERROR_BAD_DATA;
630  }
631  GWEN_Buffer_AppendString(tbuf, s);
632  GWEN_Buffer_AppendString(tbuf, "Fn;\n");
633 
634  GWEN_Buffer_AppendString(tbuf, " p_struct->");
636  if (!(s && *s)) {
637  GWEN_Buffer_free(tbuf);
638  return GWEN_ERROR_BAD_DATA;
639  }
640  GWEN_Buffer_AppendString(tbuf, s);
641  GWEN_Buffer_AppendString(tbuf, "Fn=fn;\n");
642  GWEN_Buffer_AppendString(tbuf, " return oldFn;\n");
643  GWEN_Buffer_AppendString(tbuf, "}\n");
644 
646  GWEN_Buffer_Reset(tbuf);
647 
648  vf=Typemaker2_VirtualFn_List_Next(vf);
649  }
650  GWEN_Buffer_free(tbuf);
651  }
652 
653  return 0;
654 }
655 
656 
657 
659 {
660  TYPEMAKER2_VIRTUALFN_LIST *fns;
662 
665 
666  assert(fns);
667  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
668  GWEN_BUFFER *tbuf;
669  const char *s;
671 
672  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
673 
674  GWEN_Buffer_AppendString(tbuf, "/* getters for virtual functions */\n");
675  vf=Typemaker2_VirtualFn_List_First(fns);
676  while (vf) {
677  int access=Typemaker2_VirtualFn_GetAccess(vf);
678 
680  if (s && *s) {
681  GWEN_Buffer_AppendString(tbuf, s);
682  GWEN_Buffer_AppendString(tbuf, " ");
683  }
684 
686  GWEN_Buffer_AppendString(tbuf, s);
687  GWEN_Buffer_AppendString(tbuf, "_");
689  if (!(s && *s)) {
690  GWEN_Buffer_free(tbuf);
691  return GWEN_ERROR_BAD_DATA;
692  }
693  while (*s)
694  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
695  GWEN_Buffer_AppendString(tbuf, "_FN ");
696 
698  GWEN_Buffer_AppendString(tbuf, s);
699  GWEN_Buffer_AppendString(tbuf, "_Get");
701  if (!(s && *s)) {
702  GWEN_Buffer_free(tbuf);
703  return GWEN_ERROR_BAD_DATA;
704  }
705  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
706  GWEN_Buffer_AppendString(tbuf, s+1);
707  GWEN_Buffer_AppendString(tbuf, "Fn(const ");
708 
710  GWEN_Buffer_AppendString(tbuf, s);
711  /* created structs are always pointers */
712  GWEN_Buffer_AppendString(tbuf, " *p_struct);\n");
713 
715  GWEN_Buffer_Reset(tbuf);
716 
717  vf=Typemaker2_VirtualFn_List_Next(vf);
718  }
719  GWEN_Buffer_free(tbuf);
720  }
721 
722  return 0;
723 }
724 
725 
726 
728 {
729  TYPEMAKER2_VIRTUALFN_LIST *fns;
730 
732 
733  assert(fns);
734  if (Typemaker2_VirtualFn_List_GetCount(fns)) {
735  GWEN_BUFFER *tbuf;
736  const char *s;
738 
739  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
740 
741  GWEN_Buffer_AppendString(tbuf, "/* getters for virtual functions */\n");
742  vf=Typemaker2_VirtualFn_List_First(fns);
743  while (vf) {
744 
746  GWEN_Buffer_AppendString(tbuf, s);
747  GWEN_Buffer_AppendString(tbuf, "_");
748 
750  if (!(s && *s)) {
751  GWEN_Buffer_free(tbuf);
752  return GWEN_ERROR_BAD_DATA;
753  }
754  while (*s)
755  GWEN_Buffer_AppendByte(tbuf, toupper(*(s++)));
756  GWEN_Buffer_AppendString(tbuf, "_FN ");
757 
759  GWEN_Buffer_AppendString(tbuf, s);
760  GWEN_Buffer_AppendString(tbuf, "_Get");
762  if (!(s && *s)) {
763  GWEN_Buffer_free(tbuf);
764  return GWEN_ERROR_BAD_DATA;
765  }
766  GWEN_Buffer_AppendByte(tbuf, toupper(*s));
767  GWEN_Buffer_AppendString(tbuf, s+1);
768  GWEN_Buffer_AppendString(tbuf, "Fn(const ");
769 
771  GWEN_Buffer_AppendString(tbuf, s);
772  /* created structs are always pointers */
773  GWEN_Buffer_AppendString(tbuf, " *p_struct){\n");
774 
775  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
776  GWEN_Buffer_AppendString(tbuf, " return p_struct->");
778  if (!(s && *s)) {
779  GWEN_Buffer_free(tbuf);
780  return GWEN_ERROR_BAD_DATA;
781  }
782  GWEN_Buffer_AppendString(tbuf, s);
783  GWEN_Buffer_AppendString(tbuf, "Fn;\n");
784 
785  GWEN_Buffer_AppendString(tbuf, "}\n");
786 
788  GWEN_Buffer_Reset(tbuf);
789 
790  vf=Typemaker2_VirtualFn_List_Next(vf);
791  }
792  }
793 
794  return 0;
795 }
796 
797 
798 
const char * Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:326
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:133
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:695
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
TYPEMAKER2_VIRTUALFN_PARAM_LIST * Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:370
struct TYPEMAKER2_VIRTUALFN_PARAM TYPEMAKER2_VIRTUALFN_PARAM
Definition: tm_virtualfn.h:24
int TM2C_BuildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:478
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
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_BuildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
Definition: tm_virtualfn.h:21
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
const char * Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:458
int TM2C_BuildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
#define TYPEMAKER2_FLAGS_GWEN_CB
Definition: tm_type.h:50
void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
Definition: tm_builder.c:149
const char * Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:302
int TM2C_BuildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc)
const char * Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:218
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
const char * Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:194
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
Definition: buffer.c:394
const char * Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:346
#define TYPEMAKER2_FLAGS_CONST
Definition: tm_type.h:33
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:26
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
const char * Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:438
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:204
#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
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
int TM2C_BuildGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:180
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:565
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:242
const char * Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:170
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_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:282