]> Nishi Git Mirror - gwion.git/commitdiff
:art: Support index in 'repeat' loops (more)
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 17 May 2021 11:30:03 +0000 (13:30 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 17 May 2021 11:30:03 +0000 (13:30 +0200)
fmt
src/parse/scan1.c
tests/tree/repeat_idx_shadow.gw

diff --git a/fmt b/fmt
index 2053f83ec266a59dc070daab79bfc595ce9cb5d5..9958879019a9bca3aaf3cb92f73aff5c516d3ec3 160000 (submodule)
--- a/fmt
+++ b/fmt
@@ -1 +1 @@
-Subproject commit 2053f83ec266a59dc070daab79bfc595ce9cb5d5
+Subproject commit 9958879019a9bca3aaf3cb92f73aff5c516d3ec3
index adfc62721b808ae8f4d3657ade41dcdcf7ad7b56..1df28fda0d67c21859ccaaf89b06efa70d3e5e50 100644 (file)
@@ -303,23 +303,26 @@ ANN static inline m_bool stmt_each_defined(const restrict Env env, const Stmt_Ea
   return GW_OK;
 }
 
-ANN static inline m_bool shadow_err(const Env env, const Symbol sym, const loc_t  loc) {
-  ERR_B(loc, _("argument '%s' shadows a previously defined variable"),
-        s_name(sym))
+ANN static inline m_bool shadow_err(const Env env, const Value v, const loc_t loc) {
+  gwerr_basic(_("shadowing a previously defined variable"), NULL, NULL, env->name, loc, 0);
+  gwerr_secondary(_("defined here"), v->from->filename, v->from->loc);
+  env->context->error = true;
+  return GW_ERROR;
 }
 
 ANN static inline m_bool shadow_arg(const Env env, const Symbol sym, const loc_t  loc) {
   Nspc nspc = env->curr;
-  do if(nspc_lookup_value0(nspc, sym))
-    return shadow_err(env, sym, loc);
-  while((nspc = nspc->parent));
+  do {
+    const Value v = nspc_lookup_value0(nspc, sym);
+    if(v)
+      return shadow_err(env, v, loc);
+  } while((nspc = nspc->parent));
   return GW_OK;
 }
 
 ANN static inline m_bool shadow_var(const Env env, const Symbol sym, const loc_t  loc) {
-  if(nspc_lookup_value1(env->curr, sym))
-    return shadow_err(env, sym, loc);
-  return GW_OK;
+  const Value v = nspc_lookup_value1(env->curr, sym);
+  return !v ? GW_OK : shadow_err(env, v, loc);
 }
 
 #define describe_ret_nspc(name, type, prolog, exp) describe_stmt_func(scan1, name, type, prolog, exp)
index 2b5d7e95a3fab2a07383ab9001997dc37df2eb2a..1c01437ad534a80a1eb71fc10b251ed3c71e6403 100644 (file)
@@ -1,4 +1,4 @@
-#! [contains] shadows a previously defined variable
+#! [contains] shadowing a previously defined variable
 var int i;
 
 repeat(i, 12);