]> Nishi Git Mirror - gwion.git/commitdiff
:art: Update
authorJérémie Astor <fennecdjay@gmail.com>
Tue, 16 Mar 2021 23:50:34 +0000 (00:50 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Tue, 16 Mar 2021 23:50:34 +0000 (00:50 +0100)
ast
plug
src/emit/emit.c
src/env/type.c
src/parse/check.c
src/parse/did_you_mean.c
src/parse/scan1.c
src/parse/traverse.c
src/parse/type_decl.c

diff --git a/ast b/ast
index 88118d803a3256e2443b864a8bb3ab8c154289ba..24a5f882a8c2e6ebddf8e05f19a8de0a94d884e1 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 88118d803a3256e2443b864a8bb3ab8c154289ba
+Subproject commit 24a5f882a8c2e6ebddf8e05f19a8de0a94d884e1
diff --git a/plug b/plug
index 86beb5391447f86ff25890cb017fdb7753540e07..50e87bce8f22425e9ab55545226a9db5b67fde8e 160000 (submodule)
--- a/plug
+++ b/plug
@@ -1 +1 @@
-Subproject commit 86beb5391447f86ff25890cb017fdb7753540e07
+Subproject commit 50e87bce8f22425e9ab55545226a9db5b67fde8e
index b03152b5e5d03805933ec2bb67f9388337b0775f..87ebc59254100c529d594f11b3fcc3ff08602b6f 100644 (file)
@@ -1804,7 +1804,7 @@ ANN static m_bool _emit_stmt_each(const Emitter emit, const Stmt_Each stmt, m_ui
   loop_idx->m_val2 = -1;
   stmt->v->from->offset = offset + SZ_INT *2;
   if(stmt->idx)
-    stmt->vidx->from->offset = offset + SZ_INT;
+    stmt->idx->v->from->offset = offset + SZ_INT;
   if(n) {
     const Instr instr = emit_add_instr(emit, AutoUnrollInit);
     instr->m_val = offset-SZ_INT;
index 38b772ae6faa0b95c47ec6d04d766fa96c502adc..db2e513702dc2c5223583c3c84541461151d42e6 100644 (file)
@@ -99,6 +99,7 @@ ANN /*static */Symbol array_sym(const Env env, const Type src, const m_uint dept
 #include "operator.h"
 #include "import.h"
 ANN Type array_type(const Env env, const Type src, const m_uint depth) {
+if(src == env->gwion->type[et_auto])return src;
   const Symbol sym = array_sym(env, src, depth);
   const Type type = nspc_lookup_type1(src->info->owner, sym);
   if(type)
index 3b972e7ef3c04dbc27373d4d03deb4e15c40b225..305e02cf411ff298362dfd973150d64073c773bc 100644 (file)
@@ -1012,9 +1012,10 @@ ANN static m_bool do_stmt_each(const Env env, const Stmt_Each stmt) {
   set_vflag(stmt->v, vflag_valid);
   nspc_add_value(env->curr, stmt->sym, stmt->v);
   if(stmt->idx) {
-    stmt->vidx = new_value(env->gwion->mp, env->gwion->type[et_int], s_name(stmt->idx));
-    set_vflag(stmt->vidx, vflag_valid);
-    nspc_add_value(env->curr, stmt->idx, stmt->vidx);
+    stmt->idx->v = new_value(env->gwion->mp, env->gwion->type[et_int], s_name(stmt->idx->sym));
+    valuefrom(env, stmt->idx->v->from, stmt->idx->pos);
+    set_vflag(stmt->idx->v, vflag_valid);
+    nspc_add_value(env->curr, stmt->idx->sym, stmt->idx->v);
   }
   return check_conts(env, stmt_self(stmt), stmt->body);
 }
index cef3f5c897c6b4e55cf9bc7f4ba76ce3c23e7101..b8b3d2e88b5bcd0b1d3bf75252fcf39aba144b00 100644 (file)
@@ -40,7 +40,7 @@ ANN static void ressembles(const Vector v, const Nspc nspc, const char* name) {
       continue;
     if(wagner_fisher(name, value->name)) {
       if(!vflag(value, vflag_builtin))
-      gwerr_secondary("declared here", value->from->filename, value->from->loc);
+        gwerr_secondary("declared here", value->from->filename, value->from->loc);
     }
   }
 }
index 60441a16a35498c5a27ec673dcc0661006aa6897..2feee13894318a50ff7aac757b849e249112d0f1 100644 (file)
@@ -286,8 +286,8 @@ ANN static inline m_bool scan1_stmt_match(const restrict Env env, const Stmt_Mat
 ANN static inline m_bool stmt_each_defined(const restrict Env env, const Stmt_Each stmt) {
   if(nspc_lookup_value1(env->curr, stmt->sym))
     ERR_B(stmt_self(stmt)->pos, _("foreach value '%s' is already defined"), s_name(stmt->sym))
-  if(stmt->idx && nspc_lookup_value1(env->curr, stmt->idx))
-    ERR_B(stmt_self(stmt)->pos, _("foreach index '%s' is already defined"), s_name(stmt->idx))
+  if(stmt->idx && nspc_lookup_value1(env->curr, stmt->idx->sym))
+    ERR_B(stmt_self(stmt)->pos, _("foreach index '%s' is already defined"), s_name(stmt->idx->sym))
   return GW_OK;
 }
 
@@ -358,7 +358,7 @@ ANN static m_bool scan1_args(const Env env, Arg_List list) {
     if(list->td) {
       SET_FLAG(list->td, late);
       CHECK_OB((list->type = void_type(env, list->td)))
-      SET_FLAG(list->td, late);
+      UNSET_FLAG(list->td, late);
     }
     var->value = arg_value(env, list);
     nspc_add_value(env->curr, var->xid, var->value);
index 6e37aab56a1d8a4a6546d16fc977759eb2a589a8..802a14c20c7e0e41e38640c546bb6c1a3bb76199 100644 (file)
@@ -16,13 +16,17 @@ ANN m_bool traverse_exp(const Env env, const Exp exp) {
  return check_exp(env, exp) ? 1 : -1;
 }
 
-ANN m_bool traverse_func_def(const Env env, const Func_Def def) {
+ANN static m_bool _traverse_func_def(const Env env, const Func_Def fdef) {
+  CHECK_BB(scan1_func_def(env, fdef))
+  CHECK_BB(scan2_func_def(env, fdef))
+  return check_func_def(env, fdef);
+}
+
+ANN m_bool traverse_func_def(const Env env, const Func_Def fdef) {
   const Func former = env->func;
-  const m_bool ret = scan1_func_def(env, def) > 0 &&
-     scan2_func_def(env, def) > 0 &&
-     check_func_def(env, def) > 0;
+  const m_bool ret = _traverse_func_def(env, fdef);
   env->func = former;
-  return ret ? GW_OK : GW_ERROR;
+  return ret;
 }
 
 ANN m_bool traverse_union_def(const Env env, const Union_Def def) {
index 98b0a84d81b792ec66ceca2f5f643ec16a4f5d19..b574f368a90193c939d70d5798cdd5ac5cbc6489 100644 (file)
@@ -35,7 +35,10 @@ ANN static Type resolve(const Env env, Type_Decl* td) {
   DECL_OO(const Type, type, = scan_type(env, base, td))
   const Type t = !td->ref ? type : ref(env, td);
   const Type ret = !td->option ? t : option(env, td);
-  return !td->array ? ret : array_type(env, ret, td->array->depth);
+//  if(!td->array || ret == env->gwion->type[et_auto])
+//    return ret;
+//  return array_type(env, ret, td->array->depth);
+  return !td->array ? ret: array_type(env, ret, td->array->depth);
 }
 
 ANN static inline void* type_unknown(const Env env, const Type_Decl* td) {