4 /*****************************************************************************/
9 /* Number of fields. */
11 /* Number of locals. */
14 unsigned char* c_body
;
15 /* Body text length. */
21 /*****************************************************************************/
22 static struct class* c_list_head
= NULL
;
23 static struct class* c_list_tail
= NULL
;
24 static size_t c_first_unalloc
= 0;
26 /*****************************************************************************/
27 struct class* class_search(size_t number
)
29 struct class* cur
= c_list_head
;
32 if(number
== cur
->c_class_number
)
40 /*****************************************************************************/
41 void class_register(struct class* class)
43 struct class* nxt
= class->c_next
;
46 class->c_class_number
= c_first_unalloc
++;
48 c_list_tail
= c_list_tail
->c_next
= class;
50 c_list_tail
= c_list_head
= class;
56 /*****************************************************************************/
57 void class_unregister_all()
62 c_list_head
= c_list_head
->c_next
;
68 /*****************************************************************************/
69 struct class* class_make(size_t fields
, size_t locals
,
70 unsigned char* instructions
, size_t ins_len
)
73 class = malloc(sizeof(struct class));
75 fprintf(stderr
, "Out of memory!\n");
79 class->c_fields
= fields
;
80 class->c_locals
= locals
;
81 class->c_body
= instructions
;
82 class->c_body_length
= ins_len
;
88 /*****************************************************************************/
89 size_t class_field_count(struct class* class)
91 return class->c_fields
;
94 /*****************************************************************************/
95 size_t class_local_count(struct class* class)
97 return class->c_locals
;
100 /*****************************************************************************/
101 size_t class_ins_count(struct class* class)
103 return class->c_body_length
;
106 /*****************************************************************************/
107 unsigned char class_get_ins(struct class* class, size_t position
)
109 if(position
>= class->c_body_length
)
111 return class->c_body
[position
];