-/* Add a Class to the Stack
- Allocated in page-sized chunks, potentially infinite depth is supported.
- Returns the input class.
-*/
-static
-ir_class class_stack_push
-#define class_size (sizeof(*class_stack))
-( ir_class class )
-{ size_t class_stack_len = csp - class_stack;
- ir_class* new_class_stack;
- if ((class_stack_len * class_size + class_size) > class_stack_size)
- { class_stack_size += (size_t) sys_pagesize;
- new_class_stack = (ir_class*) realloc(class_stack, class_stack_size);
- if (new_class_stack == NULL)
- { free(class_stack); //realloc failure does not free class_stack
- yyerror("realloc " ERR_MEM);
- exit(1);
- }
- class_stack = new_class_stack;
- csp = class_stack + class_stack_len;
- }
- return (*csp++ = class);
-}
+static inline
+ir_class yyclass_pop
+( yycstate* cs )
+{ return *((cs->csp)--); }
+
+static inline
+ir_class yyclass_push
+( yycstate* cs,
+ ir_class class
+)
+{ return *++(cs->csp) = class; }
+
+void yycstate_delete
+( yycstate* class_state )
+{ free(class_state); }