projects
/
henge
/
apc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
aad1701
)
parser pops yyclass when unexpected CLCLOSE encountered
author
ken
<ken@mihrtec.com>
Fri, 20 Jan 2017 03:30:02 +0000
(19:30 -0800)
committer
ken
<ken@mihrtec.com>
Fri, 20 Jan 2017 03:30:02 +0000
(19:30 -0800)
src/parser.y
patch
|
blob
|
history
diff --git
a/src/parser.y
b/src/parser.y
index
e1fe896
..
1677c6c
100644
(file)
--- a/
src/parser.y
+++ b/
src/parser.y
@@
-31,7
+31,7
@@
/* Stack-based class handler */
#define yyclass(CS) (*(CS->csp))
#define yyclassld(CS) (ir_classld_from_class(yyclass(CS)))
/* Stack-based class handler */
#define yyclass(CS) (*(CS->csp))
#define yyclassld(CS) (ir_classld_from_class(yyclass(CS)))
- #define DEFAULT_VARIANT "default"
+ #define DEFAULT_VARIANT
(uint8_t*)
"default"
}
%define parse.error verbose
%define parse.lac full
}
%define parse.error verbose
%define parse.lac full
@@
-85,7
+85,6
@@
class:
NAME CLOPEN { yyclass_push(cs,ir_class_addchild(yyclass(cs), $1)); }
progn
CLCLOSE { yyclass_pop(cs); }
NAME CLOPEN { yyclass_push(cs,ir_class_addchild(yyclass(cs), $1)); }
progn
CLCLOSE { yyclass_pop(cs); }
-| CLCLOSE { yyclass_pop(cs); }
;
statement_list:
;
statement_list:
@@
-145,8
+144,10
@@
void yyerror
)
{ ir_class* iter;
fprintf(stderr, "[class->");
)
{ ir_class* iter;
fprintf(stderr, "[class->");
- for (iter = cs->class_stack; iter < cs->csp; iter++)
+ for (iter = cs->class_stack; iter <
=
cs->csp; iter++)
fprintf(stderr, "%s/", ir_class_name(*iter));
fprintf(stderr, "%s/", ir_class_name(*iter));
+ if (strstr(s,"unexpected CLCLOSE") != NULL)
+ yyclass_pop(cs);
fprintf(stderr, "]\n\t");
fprintf(stderr, "%s\n", s);
}
fprintf(stderr, "]\n\t");
fprintf(stderr, "%s\n", s);
}
@@
-167,9
+168,7
@@
yycstate* yycstate_new
static inline
ir_class yyclass_pop
( yycstate* cs )
static inline
ir_class yyclass_pop
( yycstate* cs )
-{ cs->csp--;
- return *(cs->csp + 1);
-}
+{ return *cs->csp--; }
static inline
ir_class yyclass_push
static inline
ir_class yyclass_push