MCPcopy Create free account
hub / github.com/Meridian59/Meridian59 / codegen_classes

Function codegen_classes

blakcomp/codegen.c:46–90  ·  view source on GitHub ↗

/ * codegen_classes: Generate code for all classes. */

Source from the content-addressed store, hash-verified

44 * codegen_classes: Generate code for all classes.
45 */
46void codegen_classes(void)
47{
48 list_type templist, c = NULL;
49 int numclasses, classpos, endpos, i;
50
51 /* Make list of only classes which appeared in current source file */
52 for (templist = st.classes; templist != NULL; templist = templist->next)
53 if ( ((class_type) (templist->data))->is_new)
54 c = list_add_item(c, templist->data);
55
56 /* Write out # of classes */
57 numclasses = list_length(c);
58 OutputInt(outfile, numclasses);
59
60 classpos = FileCurPos(outfile);
61
62 /* Write out class table */
63 for (i=0; i < numclasses; i++)
64 {
65 /* Leave space for class id # */
66 OutputInt(outfile, 0);
67
68 /* Leave space for class offset */
69 OutputInt(outfile, 0);
70 }
71
72 /* Loop through classes found in source code */
73 for ( ; c != NULL; c = c->next)
74 {
75 class_type each_class = (class_type) (c->data);
76
77 /* Backpatch in class id # and offset of current class */
78 endpos = FileCurPos(outfile);
79 FileGoto(outfile, classpos);
80 OutputInt(outfile, each_class->class_id->idnum);
81 OutputInt(outfile, endpos);
82 classpos = FileCurPos(outfile); /* Move to next entry */
83 FileGotoEnd(outfile);
84
85 codegen_class(each_class);
86
87 if (!codegen_ok)
88 return;
89 }
90}
91/************************************************************************/
92/*
93 * codegen_string_table: Write out string table.

Callers 1

codegenFunction · 0.85

Calls 4

OutputIntFunction · 0.85
codegen_classFunction · 0.85
list_add_itemFunction · 0.70
list_lengthFunction · 0.70

Tested by

no test coverage detected