mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-08 13:37:35 +02:00
warning on duplicate imports
This commit is contained in:
parent
3fea2b7062
commit
0420bba565
1 changed files with 18 additions and 17 deletions
29
eval.c
29
eval.c
|
@ -1771,29 +1771,27 @@ sexp sexp_make_standard_env_op (sexp ctx sexp_api_params(self, n), sexp version)
|
|||
return env;
|
||||
}
|
||||
|
||||
#if SEXP_USE_RENAME_BINDINGS
|
||||
#define sexp_same_bindingp(x, y) ((x) == (y))
|
||||
#else
|
||||
#define sexp_same_bindingp(x, y) (sexp_env_value(x) == sexp_env_value(y))
|
||||
#endif
|
||||
|
||||
sexp sexp_env_copy_op (sexp ctx sexp_api_params(self, n), sexp to, sexp from, sexp ls, sexp immutp) {
|
||||
sexp oldname, newname;
|
||||
sexp_gc_var1(value);
|
||||
sexp_gc_preserve1(ctx, value);
|
||||
sexp_gc_var2(value, oldcell);
|
||||
sexp_gc_preserve2(ctx, value, oldcell);
|
||||
if (! sexp_envp(to)) to = sexp_context_env(ctx);
|
||||
if (! sexp_envp(from)) from = sexp_context_env(ctx);
|
||||
if (sexp_not(ls)) {
|
||||
if (sexp_truep(immutp)) {
|
||||
value = sexp_make_env(ctx);
|
||||
sexp_env_parent(value) = sexp_env_parent(to);
|
||||
sexp_env_parent(to) = value;
|
||||
sexp_immutablep(value) = 1;
|
||||
sexp_immutablep(value) = sexp_truep(immutp);
|
||||
if (sexp_not(ls)) {
|
||||
sexp_env_bindings(value) = sexp_env_bindings(from);
|
||||
sexp_env_renames(value) = sexp_env_renames(from);
|
||||
} else {
|
||||
for (ls=sexp_env_bindings(from); sexp_pairp(ls); ls=sexp_env_next_cell(ls)) {
|
||||
#if SEXP_USE_RENAME_BINDINGS
|
||||
sexp_env_rename(ctx, to, sexp_car(ls), ls);
|
||||
#else
|
||||
sexp_env_define(ctx, to, sexp_car(ls), sexp_cdr(ls));
|
||||
sexp_env_renames(value) = sexp_env_renames(from);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for ( ; sexp_pairp(ls); ls=sexp_cdr(ls)) {
|
||||
if (sexp_pairp(sexp_car(ls))) {
|
||||
|
@ -1801,6 +1799,7 @@ sexp sexp_env_copy_op (sexp ctx sexp_api_params(self, n), sexp to, sexp from, se
|
|||
} else {
|
||||
newname = oldname = sexp_car(ls);
|
||||
}
|
||||
oldcell = sexp_env_cell(to, newname, 0);
|
||||
value = sexp_env_cell(from, oldname, 0);
|
||||
if (value) {
|
||||
#if SEXP_USE_RENAME_BINDINGS
|
||||
|
@ -1809,13 +1808,15 @@ sexp sexp_env_copy_op (sexp ctx sexp_api_params(self, n), sexp to, sexp from, se
|
|||
sexp_env_define(ctx, to, newname, sexp_cdr(value));
|
||||
#endif
|
||||
#if SEXP_USE_WARN_UNDEFS
|
||||
if (oldcell && !sexp_same_bindingp(oldcell, value))
|
||||
sexp_warn(ctx, "importing already defined binding: ", newname);
|
||||
} else {
|
||||
sexp_warn(ctx, "importing undefined variable: ", oldname);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
sexp_gc_release1(ctx);
|
||||
sexp_gc_release2(ctx);
|
||||
return SEXP_VOID;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue