fixed some bugs:
- switch with BIG difference between lower and upper now handled correctly - made sure an added error production is never chosen as the default one - don't allow AUTO as specification for a parameter
This commit is contained in:
parent
8fb2664584
commit
efcb9468f4
7 changed files with 25 additions and 10 deletions
|
@ -86,3 +86,5 @@ tokenname.c
|
|||
tokenname.h
|
||||
type.c
|
||||
type.str
|
||||
util.str
|
||||
util.c
|
||||
|
|
|
@ -10,7 +10,7 @@ CID = $(EMHOME)/bin/cid
|
|||
# Libraries and EM interface definitions
|
||||
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
||||
EMKLIB = $(EMHOME)/modules/lib/libemk.a
|
||||
EMELIB = $(EMHOME)/modules/lib/libeme.a
|
||||
EMELIB = $(EMHOME)/modules/lib/libeme.a $(EMHOME)/lib/em_data.a
|
||||
STRLIB = $(EMHOME)/modules/lib/libstring.a
|
||||
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
||||
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
||||
|
|
|
@ -13,7 +13,7 @@ LINT = /usr/new/lint
|
|||
# Libraries and EM interface definitions
|
||||
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
||||
EMKLIB = $(EMHOME)/modules/lib/libemk.a
|
||||
EMELIB = $(EMHOME)/modules/lib/libeme.a
|
||||
EMELIB = $(EMHOME)/modules/lib/libeme.a $(EMHOME)/lib/em_data.a
|
||||
STRLIB = $(EMHOME)/modules/lib/libstring.a
|
||||
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
||||
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
||||
|
|
|
@ -120,14 +120,17 @@ type_specifier(struct type **tpp;)
|
|||
;
|
||||
|
||||
single_type_specifier(register struct decspecs *ds;):
|
||||
TYPE_IDENTIFIER /* this includes INT, CHAR, etc. */
|
||||
%default TYPE_IDENTIFIER /* this includes INT, CHAR, etc. */
|
||||
{idf2type(dot.tk_idf, &ds->ds_type);}
|
||||
|
|
||||
IDENTIFIER
|
||||
{error("%s is not a type identifier", dot.tk_idf->id_text);
|
||||
dot.tk_idf->id_def->df_type = error_type;
|
||||
dot.tk_idf->id_def->df_sc = TYPEDEF;
|
||||
ds->ds_type = error_type;
|
||||
{
|
||||
error("%s is not a type identifier", dot.tk_idf->id_text);
|
||||
ds->ds_type = error_type;
|
||||
if (dot.tk_idf->id_def) {
|
||||
dot.tk_idf->id_def->df_type = error_type;
|
||||
dot.tk_idf->id_def->df_sc = TYPEDEF;
|
||||
}
|
||||
}
|
||||
|
|
||||
struct_or_union_specifier(&ds->ds_type)
|
||||
|
|
|
@ -40,7 +40,7 @@ do_decspecs(ds)
|
|||
}
|
||||
|
||||
if (level == L_FORMAL2) {
|
||||
if (ds->ds_sc_given && ds->ds_sc != AUTO &&
|
||||
if (ds->ds_sc_given &&
|
||||
ds->ds_sc != REGISTER){
|
||||
extern char *symbol2str();
|
||||
error("%s formal illegal", symbol2str(ds->ds_sc));
|
||||
|
|
|
@ -242,7 +242,7 @@ do_include()
|
|||
inctable[0] = WorkingDir;
|
||||
if (filenm) {
|
||||
if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){
|
||||
fatal("cannot find include file \"%s\"", filenm);
|
||||
fatal("cannot open include file \"%s\"", filenm);
|
||||
}
|
||||
else {
|
||||
WorkingDir = getwdir(result);
|
||||
|
|
|
@ -24,7 +24,17 @@
|
|||
|
||||
extern char options[];
|
||||
|
||||
#define compact(nr, low, up) (nr != 0 && (up - low) / nr <= (DENSITY - 1))
|
||||
compact(nr, low, up)
|
||||
arith low, up;
|
||||
{
|
||||
/* Careful! up - low might not fit in an arith. And then,
|
||||
the test "up-low < 0" might also not work to detect this
|
||||
situation! Or is this just a bug in the M68020/M68000?
|
||||
*/
|
||||
arith diff = up - low;
|
||||
|
||||
return (nr != 0 && diff >= 0 && diff / nr <= (DENSITY - 1));
|
||||
}
|
||||
|
||||
static struct switch_hdr *switch_stack = 0;
|
||||
|
||||
|
|
Loading…
Reference in a new issue