]> Nishi Git Mirror - gwion.git/commitdiff
:art: Update
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 24 May 2021 15:04:42 +0000 (17:04 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 24 May 2021 15:04:42 +0000 (17:04 +0200)
fmt
include/env/env.h
plug
src/gwion.c
src/lib/object_op.c

diff --git a/fmt b/fmt
index 17bb211543ca36b9c53d884515afded758547945..d58f01e7f844cab87613a8084dee3e69d1582cac 160000 (submodule)
--- a/fmt
+++ b/fmt
@@ -1 +1 @@
-Subproject commit 17bb211543ca36b9c53d884515afded758547945
+Subproject commit d58f01e7f844cab87613a8084dee3e69d1582cac
index c9372b11a0621099eff4088b875068ad77291a7c..4b55911efd7eb811c36aec334a990dc75bcd8951 100644 (file)
@@ -47,6 +47,7 @@ ANN m_bool already_defined(const Env env, const Symbol s, const loc_t pos);
 ANN m_bool traverse_func_template(const Env, const Func_Def);
 ANN void env_err(const Env, const loc_t pos, const m_str fmt, ...);
 ANN void env_warn(const Env, const loc_t pos, const m_str fmt, ...);
+ANN void env_error_footer(const Env env);
 ANN Value global_string(const Env env, const m_str str);
 ANN void release_ctx(struct Env_Scope_ *a, struct Gwion_* gwion);
 
diff --git a/plug b/plug
index 4587cd028705ac2766c1897bb5d1e398b0b1de46..fb296d97fea12ee3e44a1120c47033dfe5325a62 160000 (submodule)
--- a/plug
+++ b/plug
@@ -1 +1 @@
-Subproject commit 4587cd028705ac2766c1897bb5d1e398b0b1de46
+Subproject commit fb296d97fea12ee3e44a1120c47033dfe5325a62
index 3bc2ebc4865106f4f253198ff296490e9f6b0ee3..0ab82621ddacc07e4ba713caffd9b04168acd32f 100644 (file)
@@ -156,10 +156,10 @@ ANN void gwion_end(const Gwion gwion) {
   mempool_end(gwion->mp);
 }
 
-ANN static void env_header(const Env env) {
+ANN void env_error_footer(const Env env) {
   if(env->class_def)
     gwerr_secondary("in class", env->name, env->class_def->info->cdef->pos);
-  if(env->func && env->func != (Func)1 && env->func->def)
+  if(env->func && env->func->def)
     gwerr_secondary("in function", env->name, env->func->def->base->pos);
 }
 
@@ -172,7 +172,7 @@ ANN static void env_xxx(const Env env, const loc_t pos, const m_str fmt, va_list
   char c[size + 1];
   vsprintf(c, fmt, arg);
   gwerr_basic(c, NULL, NULL, env->name, pos, 0);
-  env_header(env);
+  env_error_footer(env);
 #endif
 }
 
index a1b6525aed99ad9ac6befabc3758d66c4dd1bc71..104d6532c3bf2dac74b804fbce6c422afc834003 100644 (file)
@@ -179,10 +179,13 @@ OP_CHECK(opck_object_dot) {
   }
   CHECK_BN(not_from_owner_class(env, the_base, value, exp_self(member)->pos));
   if(!env->class_def || isa(env->class_def, value->from->owner_class) < 0) {
-    if(GET_FLAG(value, private))
-      ERR_N(exp_self(member)->pos,
-          _("can't access private '%s' outside of class..."), value->name);
-    else if(GET_FLAG(value, protect))
+    if(GET_FLAG(value, private)) {
+      gwerr_basic("invalid variable access", "is private", NULL,
+                   env->name, exp_self(member)->pos, 0);
+      env_error_footer(env);
+      gwerr_secondary("declared here", value->from->filename, value->from->loc);
+      env->context->error = true;
+    } else if(GET_FLAG(value, protect))
       exp_setprot(exp_self(member), 1);
   }
   if(base_static && vflag(value, vflag_member))