D_BUSY added, to check recursive deps in def modules
This commit is contained in:
parent
33a89a8684
commit
a92c8bf067
|
@ -97,7 +97,7 @@ struct def { /* list of definitions for a name */
|
|||
#define D_VALUE (D_PROCEDURE|D_VARIABLE|D_FIELD|D_ENUM|D_CONST|D_PROCHEAD)
|
||||
#define D_ISTYPE (D_HIDDEN|D_TYPE|D_FTYPE)
|
||||
#define is_type(dfx) ((dfx)->df_kind & D_ISTYPE)
|
||||
char df_flags;
|
||||
unsigned short df_flags;
|
||||
#define D_NOREG 0x01 /* set if it may not reside in a register */
|
||||
#define D_USED 0x02 /* set if used (future use ???) */
|
||||
#define D_DEFINED 0x04 /* set if it is assigned a value (future use ???) */
|
||||
|
@ -105,6 +105,7 @@ struct def { /* list of definitions for a name */
|
|||
#define D_VALPAR 0x10 /* set if it is a value parameter */
|
||||
#define D_EXPORTED 0x20 /* set if exported */
|
||||
#define D_QEXPORTED 0x40 /* set if qualified exported */
|
||||
#define D_BUSY 0x80 /* set if busy reading this definition module */
|
||||
struct type *df_type;
|
||||
union {
|
||||
struct module df_module;
|
||||
|
@ -120,8 +121,6 @@ struct def { /* list of definitions for a name */
|
|||
} df_value;
|
||||
};
|
||||
|
||||
#define SetUsed(df) ((df)->df_flags |= D_USED)
|
||||
|
||||
/* ALLOCDEF "def" 50 */
|
||||
|
||||
extern struct def
|
||||
|
|
|
@ -55,7 +55,7 @@ GetDefinitionModule(id, incr)
|
|||
We may have to read the definition module itself.
|
||||
Also increment level by "incr".
|
||||
*/
|
||||
struct def *df;
|
||||
register struct def *df;
|
||||
static int level;
|
||||
struct scopelist *vis;
|
||||
|
||||
|
@ -101,6 +101,10 @@ GetDefinitionModule(id, incr)
|
|||
df->mod_vis = vis;
|
||||
}
|
||||
}
|
||||
else if (df->df_flags & D_BUSY) {
|
||||
error("definition module \"%s\" depends on itself",
|
||||
id->id_text);
|
||||
}
|
||||
else if (df == Defined && level == 1) {
|
||||
error("cannot import from currently defined module");
|
||||
df->df_kind = D_ERROR;
|
||||
|
|
|
@ -121,6 +121,7 @@ DefinitionModule
|
|||
} :
|
||||
DEFINITION
|
||||
MODULE IDENT { df = define(dot.TOK_IDF, GlobalScope, D_MODULE);
|
||||
df->df_flags |= D_BUSY;
|
||||
if (!Defined) Defined = df;
|
||||
if (df->df_idf != DefId) {
|
||||
error("DEFINITION MODULE name is not \"%s\"",
|
||||
|
@ -155,6 +156,7 @@ node_warning(exportlist, W_OLDFASHIONED, "export list in definition module ignor
|
|||
}
|
||||
DefinitionModule--;
|
||||
match_id(df->df_idf, dot.TOK_IDF);
|
||||
df->df_flags &= ~D_BUSY;
|
||||
}
|
||||
'.'
|
||||
;
|
||||
|
|
|
@ -383,7 +383,7 @@ set_type(tp)
|
|||
}
|
||||
|
||||
tp = construct_type(T_SET, tp);
|
||||
tp->tp_size = WA(((ub - lb) + 8) >> 3);
|
||||
tp->tp_size = WA((ub - lb + 8) >> 3);
|
||||
return tp;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue