-( char const *s )
-{ fprintf(stderr, "%s\n", s); }
-
-/* Initialize the class stack
- If the class_stack hasn't been allocated yet, allocates a page for pointers
- to be stored in. Initializes class stack pointer, and inserts the root class
- from IR
- Returns the root class given by IR.
-*/
-static
-ir_class class_stack_init
-( void )
-{ if (class_stack == NULL)
- { class_stack_size = (size_t) sys_pagesize;
- class_stack = (ir_class*) malloc(class_stack_size);
- if (class_stack == NULL)
- { yyerror(ERR_MEM);
- exit(1);
- }
- }
- csp = class_stack;
- return class_stack_push(ir_class_root());
-}
-
-/* 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);
+( yycstate* cs,
+ char const *s
+)
+{ ir_class* iter;
+ for (iter = cs->class_stack; iter < cs->csp; iter++)
+ fprintf(stderr, "%s/", ir_class_name(*iter));
+ fprintf(stderr, "\n\t");
+ fprintf(stderr, "%s\n", s);