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
|
tokenname.h
|
||||||
type.c
|
type.c
|
||||||
type.str
|
type.str
|
||||||
|
util.str
|
||||||
|
util.c
|
||||||
|
|
|
@ -10,7 +10,7 @@ CID = $(EMHOME)/bin/cid
|
||||||
# Libraries and EM interface definitions
|
# Libraries and EM interface definitions
|
||||||
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
||||||
EMKLIB = $(EMHOME)/modules/lib/libemk.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
|
STRLIB = $(EMHOME)/modules/lib/libstring.a
|
||||||
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
||||||
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
||||||
|
|
|
@ -13,7 +13,7 @@ LINT = /usr/new/lint
|
||||||
# Libraries and EM interface definitions
|
# Libraries and EM interface definitions
|
||||||
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
SYSLIB = $(EMHOME)/modules/lib/libsystem.a
|
||||||
EMKLIB = $(EMHOME)/modules/lib/libemk.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
|
STRLIB = $(EMHOME)/modules/lib/libstring.a
|
||||||
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
PRTLIB = $(EMHOME)/modules/lib/libprint.a
|
||||||
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
EMMESLIB = $(EMHOME)/modules/lib/libem_mes.a
|
||||||
|
|
|
@ -120,14 +120,17 @@ type_specifier(struct type **tpp;)
|
||||||
;
|
;
|
||||||
|
|
||||||
single_type_specifier(register struct decspecs *ds;):
|
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);}
|
{idf2type(dot.tk_idf, &ds->ds_type);}
|
||||||
|
|
|
|
||||||
IDENTIFIER
|
IDENTIFIER
|
||||||
{error("%s is not a type identifier", dot.tk_idf->id_text);
|
{
|
||||||
dot.tk_idf->id_def->df_type = error_type;
|
error("%s is not a type identifier", dot.tk_idf->id_text);
|
||||||
dot.tk_idf->id_def->df_sc = TYPEDEF;
|
ds->ds_type = error_type;
|
||||||
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)
|
struct_or_union_specifier(&ds->ds_type)
|
||||||
|
|
|
@ -40,7 +40,7 @@ do_decspecs(ds)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level == L_FORMAL2) {
|
if (level == L_FORMAL2) {
|
||||||
if (ds->ds_sc_given && ds->ds_sc != AUTO &&
|
if (ds->ds_sc_given &&
|
||||||
ds->ds_sc != REGISTER){
|
ds->ds_sc != REGISTER){
|
||||||
extern char *symbol2str();
|
extern char *symbol2str();
|
||||||
error("%s formal illegal", symbol2str(ds->ds_sc));
|
error("%s formal illegal", symbol2str(ds->ds_sc));
|
||||||
|
|
|
@ -242,7 +242,7 @@ do_include()
|
||||||
inctable[0] = WorkingDir;
|
inctable[0] = WorkingDir;
|
||||||
if (filenm) {
|
if (filenm) {
|
||||||
if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){
|
if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){
|
||||||
fatal("cannot find include file \"%s\"", filenm);
|
fatal("cannot open include file \"%s\"", filenm);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
WorkingDir = getwdir(result);
|
WorkingDir = getwdir(result);
|
||||||
|
|
|
@ -24,7 +24,17 @@
|
||||||
|
|
||||||
extern char options[];
|
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;
|
static struct switch_hdr *switch_stack = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue