fix comparsion of source module for imports
svn: r3204
This commit is contained in:
parent
bc07332cc2
commit
4ecd4fcb53
|
@ -186,8 +186,6 @@ static Scheme_Object *default_module_resolver(int argc, Scheme_Object **argv);
|
|||
static void qsort_provides(Scheme_Object **exs, Scheme_Object **exsns, Scheme_Object **exss, char *exps,
|
||||
int start, int count, int do_uninterned);
|
||||
|
||||
static int same_modidx(Scheme_Object *a, Scheme_Object *b);
|
||||
|
||||
#define MODCHAIN_TABLE(p) ((Scheme_Hash_Table *)(SCHEME_VEC_ELS(p)[0]))
|
||||
|
||||
/**********************************************************************/
|
||||
|
@ -1716,6 +1714,16 @@ int same_modidx(Scheme_Object *a, Scheme_Object *b)
|
|||
return scheme_equal(a, b);
|
||||
}
|
||||
|
||||
int same_resolved_modidx(Scheme_Object *a, Scheme_Object *b)
|
||||
{
|
||||
if (SAME_TYPE(SCHEME_TYPE(a), scheme_module_index_type))
|
||||
a = scheme_module_resolve(a);
|
||||
if (SAME_TYPE(SCHEME_TYPE(b), scheme_module_index_type))
|
||||
b = scheme_module_resolve(b);
|
||||
|
||||
return scheme_equal(a, b);
|
||||
}
|
||||
|
||||
static Scheme_Object *_module_resolve_k(void);
|
||||
|
||||
static Scheme_Object *_module_resolve(Scheme_Object *modidx, Scheme_Object *stx)
|
||||
|
@ -3704,7 +3712,7 @@ static void check_require_name(Scheme_Object *prnt_name, Scheme_Object *name, Sc
|
|||
/* Not required, or required from same module: */
|
||||
vec = scheme_hash_get(required, name);
|
||||
if (vec) {
|
||||
if (same_modidx(SCHEME_VEC_ELS(vec)[1], modidx)
|
||||
if (same_resolved_modidx(SCHEME_VEC_ELS(vec)[1], modidx)
|
||||
&& SAME_OBJ(SCHEME_VEC_ELS(vec)[2], exname)) {
|
||||
/* already required, same source; add redundant nominal (for re-provides) */
|
||||
nml = scheme_make_pair(nominal_modidx, SCHEME_VEC_ELS(vec)[0]);
|
||||
|
@ -5727,7 +5735,7 @@ static void check_dup_require(Scheme_Object *prnt_name, Scheme_Object *name, Sch
|
|||
i = scheme_hash_get((Scheme_Hash_Table *)ht, name);
|
||||
|
||||
if (i) {
|
||||
if (same_modidx(modidx, SCHEME_CAR(i)) && SAME_OBJ(srcname, SCHEME_CDR(i)))
|
||||
if (same_resolved_modidx(modidx, SCHEME_CAR(i)) && SAME_OBJ(srcname, SCHEME_CDR(i)))
|
||||
return; /* same source */
|
||||
scheme_wrong_syntax(NULL, prnt_name, form, "duplicate import identifier");
|
||||
} else
|
||||
|
|
Loading…
Reference in New Issue
Block a user