projects
/
henge
/
apc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixes
[henge/apc.git]
/
src
/
parser.y
diff --git
a/src/parser.y
b/src/parser.y
index
9fe82df
..
41c4095
100644
(file)
--- a/
src/parser.y
+++ b/
src/parser.y
@@
-24,10
+24,10
@@
extern long sys_pagesize;
extern int lexer();
extern long sys_pagesize;
extern int lexer();
- static void yyerror(char const*);
+ static void yyerror(yycstate*, char const*);
+ static inline ir_class yyclass_push(yycstate*, ir_class);
+ static inline ir_class yyclass_pop(yycstate*);
/* Stack-based class handler */
/* Stack-based class handler */
- #define CLASS_POP(CS) (*--(CS-csp))
- #define CLASS_PUSH(CS,CL) (*(CS->csp)++ = CL)
#define yyclass(CS) (*(CS->csp))
#define yyclassld(CS) (ir_classld_from_class(yyclass(CS)))
}
#define yyclass(CS) (*(CS->csp))
#define yyclassld(CS) (ir_classld_from_class(yyclass(CS)))
}
@@
-79,9
+79,9
@@
class_list:
;
class:
;
class:
- NAME CLOPEN {
CLASS_PUSH(cs,ir_class_addchild(yyclass
, $1)); }
+ NAME CLOPEN {
yyclass_push(cs,ir_class_addchild(yyclass(cs)
, $1)); }
progn
progn
- CLCLOSE {
CLASS_POP
(cs); }
+ CLCLOSE {
yyclass_pop
(cs); }
;
statement_list:
;
statement_list:
@@
-109,13
+109,13
@@
data_spec:
;
set_spec:
;
set_spec:
- set_spec NAME { $$ = ir_set_addchild($1,$2);
}
-| NAME { $$ = ir_class_addset(yyclass,$1); }
+ set_spec NAME { $$ = ir_set_addchild($1,$2); }
+| NAME { $$ = ir_class_addset(yyclass
(cs)
,$1); }
;
set_link:
set_link NAME { $$ = ir_setld_addchild($1,$2); }
;
set_link:
set_link NAME { $$ = ir_setld_addchild($1,$2); }
-| NAME { $$ = ir_setld_from_classld(yyclassld
,$1)
}
+| NAME { $$ = ir_setld_from_classld(yyclassld
(cs),$1);
}
;
set_ld:
;
set_ld:
@@
-133,7
+133,9
@@
frame_spec:
static
void yyerror
static
void yyerror
-( char const *s )
+( yycstate* cs,
+ char const *s
+)
{ fprintf(stderr, "%s\n", s); }
yycstate* yycstate_new
{ fprintf(stderr, "%s\n", s); }
yycstate* yycstate_new
@@
-141,14
+143,28
@@
yycstate* yycstate_new
{ yycstate* class_state;
class_state = (yycstate*) malloc((size_t) sys_pagesize);
if(class_state == NULL)
{ yycstate* class_state;
class_state = (yycstate*) malloc((size_t) sys_pagesize);
if(class_state == NULL)
- { yyerror(
ERR_MEM
);
-
exit(1)
;
+ { yyerror(
class_state, "Memory allocation error."
);
+
return NULL
;
}
class_state->csp = &class_state->class_stack[0];
}
class_state->csp = &class_state->class_stack[0];
-
CLASS_PUSH
(class_state, ir_class_root());
+
yyclass_push
(class_state, ir_class_root());
return class_state;
}
return class_state;
}
+static inline
+ir_class yyclass_pop
+( yycstate* cs )
+{ return *(cs->csp)--; }
+
+static inline
+ir_class yyclass_push
+( yycstate* cs,
+ ir_class class
+)
+{ *++cs->csp = class;
+ return class;
+}
+
void yycstate_delete
( yycstate* class_state )
{ free(class_state); }
void yycstate_delete
( yycstate* class_state )
{ free(class_state); }