]> Nishi Git Mirror - gwion.git/commitdiff
:fire: import statements and using
authorfennecdjay <fennecdjay@gmail.com>
Thu, 3 Oct 2024 07:28:33 +0000 (09:28 +0200)
committerfennecdjay <fennecdjay@gmail.com>
Thu, 3 Oct 2024 07:28:33 +0000 (09:28 +0200)
88 files changed:
include/env/nspc.h
include/env/type.h
include/import/fdef.h
include/parse.h
src/clean.c
src/emit/emit.c
src/env/env_utils.c
src/env/nspc.c
src/lib/union.c
src/parse/check.c
src/parse/scan0.c
src/parse/scan1.c
src/parse/scan2.c
src/parse/validate.c
src/plug.c
src/sema/sema.c
tests/error/require_fail.gw
tests/module/get_module.gw
tests/plug/array.gw
tests/plug/array_in_var_name.gw
tests/plug/array_in_var_name_fail.gw
tests/plug/array_incoherent_in_var_name.gw
tests/plug/array_invalid_in_var_name.gw
tests/plug/callback.gw
tests/plug/class_template.gw
tests/plug/class_template_fail.gw
tests/plug/class_template_invalid.gw
tests/plug/compile_file.gw
tests/plug/compile_string.gw
tests/plug/coverage.gw
tests/plug/deps.gw
tests/plug/empty_union.gw
tests/plug/end_class.gw
tests/plug/enum.gw
tests/plug/enum_fail.gw
tests/plug/enum_fail2.gw
tests/plug/enum_fail3.gw
tests/plug/extend_array.gw
tests/plug/fail_on_next_arg.gw
tests/plug/fail_on_next_arg2.gw
tests/plug/fptr.gw
tests/plug/fptr_tmpl.gw
tests/plug/fptr_tmpl_fail.gw
tests/plug/func_fail.gw
tests/plug/func_fail2.gw
tests/plug/func_fail3.gw
tests/plug/func_fail4.gw
tests/plug/func_subscript_not_empty.gw
tests/plug/func_tmpl.gw
tests/plug/func_tmpl_fail.gw
tests/plug/func_too_many_arg.gw
tests/plug/global_func.gw
tests/plug/global_var.gw
tests/plug/invalid_arg.gw
tests/plug/invalid_array.gw
tests/plug/invalid_func.gw
tests/plug/invalid_names.gw
tests/plug/invalid_names0.gw
tests/plug/invalid_names1.gw
tests/plug/invalid_names2.gw
tests/plug/invalid_names3.gw
tests/plug/invalid_type1.gw
tests/plug/invalid_type2.gw
tests/plug/invalid_type3.gw
tests/plug/mk_type_array.gw
tests/plug/no_import.gw
tests/plug/not_importing.gw
tests/plug/pass.gw
tests/plug/specialid_emit.gw
tests/plug/static_string.gw
tests/plug/str2decl.gw
tests/plug/str2list_fail.gw
tests/plug/struct.gw
tests/plug/template_arg.gw
tests/plug/trig.gw
tests/plug/typedef.gw
tests/plug/typedef_fail.gw
tests/plug/typedef_tmpl.gw
tests/plug/ugen_connect.gw
tests/plug/union.gw
tests/plug/union_fail_exp.gw
tests/plug/union_member.gw
tests/plug/union_name.gw
tests/plug/union_tmpl.gw
tests/plug/union_tmpl_fail.gw
tests/plug/union_tmpl_fail2.gw
tests/plug/union_tmpl_fail3.gw
tests/plug/vm_remove.gw

index 3a7f7abc2eb69319b1cb617d7071cdb6f5ce4d17..d7ffb30f99248791ad9fb14f6545f71240135500 100644 (file)
@@ -5,7 +5,7 @@ typedef struct NspcInfo_ {
   Scope          type;
   Scope          func;
   Scope          trait;
-  MP_Vector *using;
+  MP_Vector     *gwusing;
 } NspcInfo;
 
 typedef struct NspcOp_ {
index be29078a519d340977592daa80fd9f11d225c4ea..b6c26d971bcb290658c414bec6dee69abed77bf3 100644 (file)
@@ -43,7 +43,8 @@ enum tflag {
   tflag_packed    = 1 << 23,
   tflag_compound  = 1 << 24,
   tflag_release   = 1 << 25, // mark structs that need release
-  tflag_primitive = 1 << 26, // mark structs that need release
+  tflag_primitive = 1 << 26,
+  tflag_cxx       = 1 << 27, // do not emit parent ctors for cxx types
 } __attribute__((packed));
 
 struct Type_ {
index 48cbfaf4f8ab4034d14931dbbf0b386c72a18f6e..d465d52b78345ae9bd786f068937720ecf42b669 100644 (file)
@@ -1,15 +1,15 @@
 #ifndef __IMPORT_FUNC
 #define __IMPORT_FUNC
 
-ANN bool gwi_func_ini(const Gwi gwi, const __restrict__ m_str type,
-                       const __restrict__ m_str name);
-ANN bool gwi_func_arg(const Gwi gwi, const __restrict__ m_str t,
-                       const __restrict__ m_str n);
+ANN bool gwi_func_ini(const Gwi gwi, const m_str type,
+                       const m_str name);
+ANN bool gwi_func_arg(const Gwi gwi, const m_str t,
+                       const m_str n);
 ANN bool gwi_func_end(const Gwi gwi, const f_xfun addr, const ae_flag flag);
-ANN bool gwi_fptr_ini(const Gwi gwi, const m_str __restrict__ type,
-                       const __restrict__ m_str name);
+ANN bool gwi_fptr_ini(const Gwi gwi, const m_str type,
+                       const m_str name);
 ANN Type  gwi_fptr_end(const Gwi gwi, const ae_flag flag);
-ANN bool gwi_func_arg(const Gwi gwi, const restrict m_str t,
-                       const restrict m_str n);
+ANN bool gwi_func_arg(const Gwi gwi, const m_str t,
+                       const m_str n);
 ANN void  ck_clean_fdef(MemPool, ImportCK *);
 #endif
index a8b8d65050df7812ab7e3171b73d47c887c03249..4d2a25292bcb529b587ab4f25203c0d2dab0db55 100644 (file)
 
 #define RET_NSPC(exp)                                                          \
   ++env->scope->depth;                                                         \
-  const uint32_t nusing = env->curr->info->using                               \
-     ? env->curr->info->using->len                                             \
+  const uint32_t nusing = env->curr->info->gwusing                             \
+     ? env->curr->info->gwusing->len                                           \
      : 0;                                                                      \
   nspc_push_value(env->gwion->mp, env->curr);                                  \
   const bool ret = exp;                                                        \
   nspc_pop_value(env->gwion->mp, env->curr);                                   \
   if(nusing)                                                                   \
-    env->curr->info->using->len = nusing;                                      \
+    env->curr->info->gwusing->len = nusing;                                    \
   --env->scope->depth;                                                         \
   return ret;
 
index 6ba7155151024f76c2fb9dca2c8da969cf18c336..e66ea2e60748d64096008c7ede6eaa77f8c3fcb8 100644 (file)
@@ -240,6 +240,24 @@ ANN static void clean_stmt_defer(Clean *a, Stmt_Defer b) {
   clean_stmt(a, b->stmt);
 }
 
+ANN static void clean_stmt_using(Clean *a, Stmt_Using b) {
+  if(b->tag.sym)
+    clean_exp(a, b->d.exp);
+  else
+    clean_type_decl(a, b->d.td);
+}
+
+ANN static void clean_stmt_import(Clean *a, Stmt_Import b) {
+  if(b->selection) {
+    for(uint32_t i = 0; i < b->selection->len; i++) {
+      Stmt_Using item = mp_vector_at(b->selection, struct Stmt_Using_, i);
+      if(item->d.exp)
+        clean_exp(a, item->d.exp);
+    }
+  }
+}
+
+
 ANN static void clean_dummy(Clean *a NUSED, void *b NUSED) {}
 #define clean_stmt_jump     clean_dummy
 #define clean_stmt_pp       clean_dummy
@@ -248,9 +266,6 @@ ANN static void clean_dummy(Clean *a NUSED, void *b NUSED) {}
 #define clean_stmt_retry    clean_dummy
 #define clean_stmt_spread   clean_dummy
 
-// TODO: check me
-#define clean_stmt_using    clean_dummy
-
 DECL_STMT_FUNC(clean, void, Clean *)
 ANN static void clean_stmt(Clean *a, Stmt* b) {
   clean_stmt_func[b->stmt_type](a, &b->d);
index 947b10dcae2e8889a335727c61d5ba64e1edc28c..20678f406fe0f4c14ee8dceb0f4c6ab8c4f13ca5 100644 (file)
@@ -317,7 +317,7 @@ ANN2(1, 2)
 static ArrayInfo *emit_array_extend(const Emitter emit, const Type t,
                                           Exp* e, const uint is_ref);
 ANN static bool emit_pre_ctor(const Emitter emit, const Type type) {
-  if (type->info->parent) {
+  if (type->info->parent && !tflag(type, tflag_cxx)) {
     CHECK_B(emit_pre_ctor(emit, type->info->parent));
     if (tflag(type, tflag_typedef) && type->info->parent->array_depth)
       CHECK_B(emit_array_extend(emit, type, type->info->cdef->base.ext->array->exp, false));
@@ -2577,6 +2577,7 @@ ANN static bool emit_stmt_retry(const Emitter                  emit,
 #define emit_stmt_until emit_stmt_flow
 #define emit_stmt_spread dummy_func
 #define emit_stmt_using dummy_func
+#define emit_stmt_import dummy_func
 
 DECL_STMT_FUNC(emit, bool, Emitter);
 
index 92cf65f15b670698bc55b1ab9ad63fedebb4b8fb..f839e8df08640585985252d878aecf94d65ce259 100644 (file)
@@ -50,21 +50,21 @@ ANN Type find_initial(const Env env, const Symbol xid) {
     const Nspc nspc = (Nspc)vector_at(v, i - 1);
     RETURN_TYPE(nspc_lookup_type1(nspc, xid));
   }
-  if(env->curr->info->using) {
-  for(uint32_t i = 0; i < env->curr->info->using->len; i++) {
-    Stmt_Using using = *mp_vector_at(env->curr->info->using, Stmt_Using, i);
-      if(!using->alias.sym) {
+  if(env->curr->info->gwusing) {
+  for(uint32_t i = 0; i < env->curr->info->gwusing->len; i++) {
+    Stmt_Using using = *mp_vector_at(env->curr->info->gwusing, Stmt_Using, i);
+      if(!using->tag.sym) {
         const Type owner = known_type(env, using->d.td);
         if(owner) {
           const Type ret = nspc_lookup_type0(owner->nspc, xid);
           if(ret) return ret;
        }
-   } else if(xid == using->alias.sym) {
+   } else if(xid == using->tag.sym) {
       if(!using->d.exp->type)
         CHECK_B(traverse_exp(env, using->d.exp));
        if(is_class(env->gwion, using->d.exp->type))
          return using->d.exp->type->info->base_type;
-      ERR_B(using->alias.loc, "found an alias %s but it's not a type", s_name(using->alias.sym));
+      ERR_B(using->tag.loc, "found an alias %s but it's not a type", s_name(using->tag.sym));
    }
 }}
    return NULL;
index 6bf4c684f3aa46b2af6008ec9d697abd5c2782f9..efd9880a0eeb3514929262a2457901330dbe3f11 100644 (file)
@@ -48,8 +48,8 @@ ANN void free_nspc(const Nspc a, const Gwion gwion) {
   nspc_free_trait(a, gwion);
   if(a->operators) free_operators(a->operators, gwion);
   nspc_free_type(a, gwion);
-  if (a->info->using)
-    free_mp_vector(gwion->mp, Stmt_Using, a->info->using);
+  if (a->info->gwusing)
+    free_mp_vector(gwion->mp, Stmt_Using, a->info->gwusing);
   if (a->class_data && a->class_data_size)
     mp_free2(gwion->mp, a->class_data_size, a->class_data);
   if (a->vtable.ptr) vector_release(&a->vtable);
index 30191bf26ecd175e96d150469662ae354df206df..d92848980581e7f2d0144f4288cadec4ac1895ed 100644 (file)
@@ -63,6 +63,7 @@ ANN void union_release(const VM_Shred shred, const Type t, const m_bit *data) {
     const Value v   = (Value)map_at(map, idx - 1);
     if (tflag(v->type, tflag_compound))
       compound_release(shred, v->type, data + SZ_INT);
+    // what if there is an union instead
   }
 }
 
index 2a412d44710d4887da8f94d3d1d70ddeb25fe6f1..8bfa07ff2082d7c3666768ce6f4c60340b5ee0c8 100644 (file)
@@ -398,10 +398,10 @@ ANN static Type prim_id_non_res(const Env env, const Symbol *data) {
         return v->type;
       }
     }
-    if(env->curr->info->using) {
-      for(uint32_t i = 0; i < env->curr->info->using->len; i++) {
-          Stmt_Using using = *mp_vector_at(env->curr->info->using, Stmt_Using, i);
-          if(!using->alias.sym) {
+    if(env->curr->info->gwusing) {
+      for(uint32_t i = 0; i < env->curr->info->gwusing->len; i++) {
+          Stmt_Using using = *mp_vector_at(env->curr->info->gwusing, Stmt_Using, i);
+          if(!using->tag.sym) {
             // NOTE: we know type is valid and has nspc
             const Type type = known_type(env, using->d.td);
             Value value = nspc_lookup_value1(type->nspc, sym);
@@ -413,10 +413,12 @@ ANN static Type prim_id_non_res(const Env env, const Symbol *data) {
             exp->d.exp_dot.xid = insert_symbol(value->name);
             return check_exp(env, exp);
           }
-        } else if(sym == using->alias.sym) {
+        } else if(sym == using->tag.sym) {
           Exp *exp = prim_exp(data);
+          const loc_t loc = exp->loc;
           Exp *base = cpy_exp(env->gwion->mp, using->d.exp);
           *exp = *base;
+          exp->loc = loc;
           mp_free2(env->gwion->mp, sizeof(Exp), base);
           return check_exp(env, exp);
         }
@@ -1749,7 +1751,7 @@ ANN static bool check_stmt_defer(const Env env, const Stmt_Defer stmt) {
 }
 
 ANN static bool check_stmt_using(const Env env, const Stmt_Using stmt) {
-  if(!stmt->alias.sym) {
+  if(!stmt->tag.sym) {
     DECL_B(const Type, type, = known_type(env, stmt->d.td));
     for(m_uint i = 0; i < map_size(&type->nspc->info->value->map); ++i) {
       const Symbol sym = (Symbol)VKEY(&type->nspc->info->value->map, i);
@@ -1765,21 +1767,23 @@ ANN static bool check_stmt_using(const Env env, const Stmt_Using stmt) {
       }
     }
   } else {
-    const Value value = nspc_lookup_value1(env->curr, stmt->alias.sym);
+    const Value value = nspc_lookup_value1(env->curr, stmt->tag.sym);
     if(value) {
       char msg[256];
       sprintf(msg, "{Y}%s{0} is already defined", value->name);
-      gwlog_error(_(msg), NULL, env->name, stmt->alias.loc, 0);
+      gwlog_error(_(msg), NULL, env->name, stmt->tag.loc, 0);
       declared_here(value);
       return false;
     }
     if(!stmt->d.exp->type)
       CHECK_B(check_exp(env, stmt->d.exp));
   }
-  mp_vector_add(env->gwion->mp, &env->curr->info->using, Stmt_Using, stmt);
+  mp_vector_add(env->gwion->mp, &env->curr->info->gwusing, Stmt_Using, stmt);
   return true;
 }
 
+#define check_stmt_import dummy_func
+
 #define check_stmt_retry dummy_func
 #define check_stmt_spread dummy_func
 DECL_STMT_FUNC(check, bool, Env)
@@ -1790,8 +1794,8 @@ ANN bool check_stmt(const Env env, Stmt* stmt) {
 
 ANN bool check_stmt_list(const Env env, Stmt_List l) {
   bool ok = true;
-  const uint32_t nusing = env->curr->info->using
-    ? env->curr->info->using->len
+  const uint32_t nusing = env->curr->info->gwusing
+    ? env->curr->info->gwusing->len
     : 0;
   for(m_uint i = 0; i < l->len; i++) {
     Stmt* stmt = mp_vector_at(l, Stmt, i);
@@ -1799,8 +1803,8 @@ ANN bool check_stmt_list(const Env env, Stmt_List l) {
     if(!check_stmt(env, stmt))
       POISON_NODE(ok, env, stmt);
   }
-  if(env->curr->info->using)
-    env->curr->info->using->len = nusing;
+  if(env->curr->info->gwusing)
+    env->curr->info->gwusing->len = nusing;
   return ok;
 }
 
index 231251eb1c2b38c4988828169e438cd8f0117b75..6730933370617ea7ec0bb59d0320a7c1e6ef886a 100644 (file)
@@ -371,8 +371,8 @@ ANN static Type scan0_class_def_init(const Env env, const Class_Def cdef) {
 
 ANN static bool scan0_stmt_list(const Env env, Stmt_List l) {
   bool ok = true;
-  const uint32_t nusing = env->curr->info->using
-    ? env->curr->info->using->len
+  const uint32_t nusing = env->curr->info->gwusing
+    ? env->curr->info->gwusing->len
     : 0;
   for(m_uint i = 0; i < l->len; i++) {
     Stmt* stmt = mp_vector_at(l, Stmt, i);
@@ -380,21 +380,22 @@ ANN static bool scan0_stmt_list(const Env env, Stmt_List l) {
     if (stmt->stmt_type == ae_stmt_pp) {
       if (stmt->d.stmt_pp.pp_type == ae_pp_include)
         env->name = stmt->d.stmt_pp.data;
-      else if (stmt->d.stmt_pp.pp_type == ae_pp_import) {
-        if(!plugin_ini(env->gwion, stmt->d.stmt_pp.data, stmt->loc))
-          POISON_NODE(ok, env, stmt);
-      }
     } else if(stmt->stmt_type == ae_stmt_using) {
-      if(!env->curr->info->using)
-        env->curr->info->using = new_mp_vector(env->gwion->mp, Stmt_Using, 0);
-      mp_vector_add(env->gwion->mp, &env->curr->info->using, Stmt_Using, &stmt->d.stmt_using);
-    } /*else if (stmt->stmt_type == ae_stmt_spread) {
-      if(!spreadable(env)) // TODO: we can prolly get rid of this
-        ERR_OK_NODE(ok, stmt, stmt->loc, "spread statement outside of variadic environment");
-    }*/
+      if(!env->curr->info->gwusing)
+        env->curr->info->gwusing = new_mp_vector(env->gwion->mp, Stmt_Using, 0);
+      mp_vector_add(env->gwion->mp, &env->curr->info->gwusing, Stmt_Using, &stmt->d.stmt_using);
+    } else if(stmt->stmt_type == ae_stmt_import) {
+      if(!env->scope->depth && !env->class_def) {
+        if(!plugin_ini(env->gwion, s_name(stmt->d.stmt_import.tag.sym), stmt->loc))
+          POISON_NODE(ok, env, stmt);
+      } else {
+        env_err(env, stmt->loc, "import statements must be at file scope");
+        POISON_NODE(ok, env, stmt);
+      } 
+    }
   }
-  if(env->curr->info->using && env->scope->depth)
-    env->curr->info->using->len = nusing;
+  if(env->curr->info->gwusing && env->scope->depth)
+    env->curr->info->gwusing->len = nusing;
   return ok;
 }
 
index f54912e87301b764ef42b66b6da82b4b40a0f19c..e84225ba1a83a4253e6dd7be07fdd584b0edcf6c 100644 (file)
@@ -266,14 +266,16 @@ ANN static inline bool scan1_stmt_match_case(const restrict Env env,
 
 ANN static inline bool scan1_stmt_using(const restrict Env env,
                                         const Stmt_Using stmt) {
-  if(stmt->alias.sym)
+  if(stmt->tag.sym)
     CHECK_B(scan1_exp(env, stmt->d.exp));
-  if(!env->curr->info->using)
-    env->curr->info->using = new_mp_vector(env->gwion->mp, Stmt_Using, 0);
-  mp_vector_add(env->gwion->mp, &env->curr->info->using, Stmt_Using, stmt);
+  if(!env->curr->info->gwusing)
+    env->curr->info->gwusing = new_mp_vector(env->gwion->mp, Stmt_Using, 0);
+  mp_vector_add(env->gwion->mp, &env->curr->info->gwusing, Stmt_Using, stmt);
   return true;
 }
 
+#define scan1_stmt_import dummy_func
+
 ANN static inline bool
     _scan1_stmt_match(const restrict Env env, const Stmt_Match stmt) {
   if (stmt->where) CHECK_B(scan1_stmt(env, stmt->where));
@@ -652,8 +654,8 @@ ANN static void dead_code(const Env env, Stmt_List l, uint32_t len) {
 ANN static bool scan1_stmt_list(const Env env, Stmt_List l) {
   uint32_t i;
   bool ok = true;
-  const uint32_t nusing = env->curr->info->using
-    ? env->curr->info->using->len
+  const uint32_t nusing = env->curr->info->gwusing
+    ? env->curr->info->gwusing->len
     : 0;
   for(i = 0; i < l->len; i++) {
     Stmt* stmt = mp_vector_at(l, Stmt, i);
@@ -664,8 +666,8 @@ ANN static bool scan1_stmt_list(const Env env, Stmt_List l) {
     }
     if(end_flow(stmt)) break;
   }
-  if(env->curr->info->using)
-    env->curr->info->using->len = nusing;
+  if(env->curr->info->gwusing)
+    env->curr->info->gwusing->len = nusing;
   if(++i < l->len) dead_code(env, l, i);
   return ok;
 }
index fb318edfedf9b3b360ec65925dfe10c53bffc1f6..f29862813b68e654be0d09fbcb2e3a7edcefbee5 100644 (file)
@@ -263,12 +263,14 @@ ANN static bool scan2_stmt_defer(const Env env, const Stmt_Defer stmt) {
 
 ANN static inline bool scan2_stmt_using(const restrict Env env,
                                         const Stmt_Using stmt) {
-  if(stmt->alias.sym)
+  if(stmt->tag.sym)
     CHECK_B(scan2_exp(env, stmt->d.exp));
-  mp_vector_add(env->gwion->mp, &env->curr->info->using, Stmt_Using, stmt);
+  mp_vector_add(env->gwion->mp, &env->curr->info->gwusing, Stmt_Using, stmt);
   return true;
 }
 
+#define scan2_stmt_import dummy_func
+
 #define scan2_stmt_spread dummy_func
 
 DECL_STMT_FUNC(scan2, bool, Env)
@@ -279,8 +281,8 @@ ANN static bool scan2_stmt(const Env env, Stmt* stmt) {
 
 ANN static bool scan2_stmt_list(const Env env, Stmt_List l) {
   bool ok = true;
-  const uint32_t nusing = env->curr->info->using
-    ? env->curr->info->using->len
+  const uint32_t nusing = env->curr->info->gwusing
+    ? env->curr->info->gwusing->len
     : 0;
   for(m_uint i = 0; i < l->len; i++) {
     Stmt* stmt = mp_vector_at(l, Stmt, i);
@@ -288,8 +290,8 @@ ANN static bool scan2_stmt_list(const Env env, Stmt_List l) {
     if(!scan2_stmt(env, stmt))
       POISON_NODE(ok, env, stmt);
   }
-  if(env->curr->info->using)
-    env->curr->info->using->len = nusing;
+  if(env->curr->info->gwusing)
+    env->curr->info->gwusing->len = nusing;
   return ok;
 }
 
index cd0226c7e1fadf77434faea787f3e5a90f20a85e..4fc3d0296ad3e5d46adaeb218c885ca2e9fc5102 100644 (file)
@@ -85,6 +85,7 @@ ANN static bool validate_prim_id(Validate *a, Exp_Primary *b) {
   struct SpecialId_ *spid = specialid_get(a->env->gwion, b->d.var);
   if(spid) return true;
   if (!b->value) {// assume it's an operator
+    // turns out it could be a _ in a case expression
     env_err(a->env, exp_self(b)->loc, "missing value for operator");
     return false;
   }
@@ -382,6 +383,7 @@ ANN static bool validate_stmt_spread(Validate *a NUSED, Spread_Def b NUSED) {
 }
 
 #define validate_stmt_using dummy_func
+#define validate_stmt_import dummy_func
 
 DECL_STMT_FUNC(validate, bool, Validate*)
 ANN static bool validate_stmt(Validate *a, Stmt* b) {
index 3e90825169c53f849f3c3e37b6d33ea28d4739b5..e251af59527194244380e9953808e09c0ffb98f1 100644 (file)
@@ -153,6 +153,8 @@ ANN bool plug_run(const struct Gwion_ *gwion, const Map mod) {
   return true;
 }
 
+ANN static bool _plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc, const bool initial);
+
 ANN static bool dependencies(struct Gwion_ *gwion, const Plug plug, const loc_t loc) {
   const gwdepend_t dep = plug->depend;
   bool ret = true;
@@ -160,8 +162,8 @@ ANN static bool dependencies(struct Gwion_ *gwion, const Plug plug, const loc_t
     m_str *const base = dep();
     m_str *      deps = base;
     while (*deps) {
-      if(!plugin_ini(gwion, *deps, loc)) {
-        gw_err("%s: no such plugin (dependency)\n", *deps);
+      if(!_plugin_ini(gwion, *deps, loc, false)) {
+        env_err(gwion->env, loc, "%s: no such plugin (dependency)\n", *deps);
         ret = false;
       }
       ++deps;
@@ -177,7 +179,10 @@ ANN static void set_parent(const Nspc nspc, const Gwion gwion ) {
 }
 
 ANN static bool start(const Plug plug, const Gwion gwion, const m_str iname, const loc_t loc) {
-  if(!plug->plugin) return false;
+  if(!plug->plugin) {
+    env_err(gwion->env, loc, "%s: file exist but does not contain plugin\n", iname);
+    return false;
+  }
   const bool cdoc = gwion->data->cdoc;
   gwion->data->cdoc = 0; // check cdoc
   CHECK_B(dependencies(gwion, plug, loc));
@@ -203,14 +208,16 @@ ANN static bool started(const Plug plug, const Gwion gwion, const m_str iname) {
   return true;
 }
 
-ANN static bool _plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc) {
+ANN static bool _plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc, const bool initial) {
   const Map map = &gwion->data->plugs->map;
   for (m_uint i = 0; i < map_size(map); ++i) {
     const Plug   plug = (Plug)VVAL(map, i);
     const m_str  base = (m_str)VKEY(map, i);
     if (!strcmp(iname, base)) {
       if (!plug->nspc) return start(plug, gwion, iname, loc);
-      else return started(plug, gwion, iname);
+      if(initial)
+        env_warn(gwion->env, loc, "%s already loaded", iname); // should be warning
+      return started(plug, gwion, iname);
     }
   }
   return false;
@@ -218,7 +225,7 @@ ANN static bool _plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t
 
 ANN bool plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc) {
   const Env env = gwion->env;
-  if(!_plugin_ini(gwion, iname, loc)) {
+  if(!_plugin_ini(gwion, iname, loc, true)) {
     env_err(env, loc, "%s: no such plugin\n", iname);
     return false;
   }
@@ -227,7 +234,11 @@ ANN bool plugin_ini(struct Gwion_ *gwion, const m_str iname, const loc_t loc) {
 
 ANN gwdriver_t driver_ini(const struct Gwion_ *gwion, struct SoundInfo_ *si) {
   const Map  map   = &gwion->data->plugs->map;
-  m_str      dname = strdup(si->arg);
+  // NOTE: we can do better
+  // calculate lenght of the string til `=` if it exists
+  // maybe implement some mstrndup function?
+  // or even an mstr function that returns a string up to char
+  m_str      dname = mstrdup(gwion->mp, si->arg);
   m_str      opt   = strchr(dname, '=');
   if (opt) *opt = '\0';
   for (m_uint i = 0; i < map_size(map); ++i) {
@@ -235,12 +246,12 @@ ANN gwdriver_t driver_ini(const struct Gwion_ *gwion, struct SoundInfo_ *si) {
     if (!strcmp(name, dname)) {
       const Plug     plug = (Plug)VVAL(map, i);
       const gwdriver_t drv  = plug->driver;
-      free(dname);
+      free_mstr(gwion->mp, dname);
       return drv;
     }
   }
   gw_err("%s: no such driver\n", dname);
-  free(dname);
+  free_mstr(gwion->mp, dname);
   return NULL;
 }
 
@@ -254,3 +265,16 @@ ANN void *get_module(const struct Gwion_ *gwion, const m_str name) {
   }
   return NULL;
 }
+
+// TODO: make some error API from this
+// NOTE: warn when a plugin is already loaded (but not when it's a dependency)
+// NOTE: warn when a dependency is already loaded
+// some question arises from the use of :[] in plug names
+//
+//
+// NOTE: plugs could use args just like modules
+//
+// NOTE: we need gwerr gwwarn gwout
+// also to set in gwiond?
+// or just set one
+// maybe have the message be [Foo] prefixed
index ecd027d9d9c988f668e4ae58b6f02fae230ff1e4..c1d96a3603fec40714ed41bc87922304c6934fd3 100644 (file)
@@ -568,6 +568,7 @@ ANN static bool sema_stmt_spread(Sema *a, Spread_Def b) {
 }
 
 #define sema_stmt_using dummy_func
+#define sema_stmt_import dummy_func
 
 DECL_STMT_FUNC(sema, bool, Sema*)
 ANN static bool sema_stmt(Sema *a, Stmt* b, bool in_list) {
@@ -626,6 +627,28 @@ ANN static bool sema_stmt_list(Sema *a, Stmt_List *b) {
     Stmt* c = mp_vector_at(*b, Stmt, i);
     if(!sema_stmt(a, c, true))
       POISON_OK(a, c, ok);
+    
+    if(c->stmt_type == ae_stmt_import &&
+       c->d.stmt_import.selection) {
+      const uint32_t len = (*b)->len;
+      ImportList selection = c->d.stmt_import.selection;
+      c->d.stmt_import.selection = NULL;
+      mp_vector_resize(a->mp, b, sizeof(Stmt), len + selection->len);
+        memmove((*b)->ptr + (i + 1 + selection->len) * sizeof(Stmt), 
+                (*b)->ptr + (i + 1) * sizeof(Stmt),
+                (len - i) * sizeof(Stmt));
+      for(uint32_t j = 0; j < selection->len; j++) {
+        Stmt *stmt = mp_vector_at(*b, Stmt, i + j + 1);
+        struct Stmt_Using_ using = *mp_vector_at(selection, struct Stmt_Using_, j);
+        stmt->d.stmt_using = using;
+        stmt->stmt_type = ae_stmt_using;
+        stmt->loc = using.tag.loc;
+        stmt->poison = false;
+      }
+      stmt_list = b;
+      free_mp_vector(a->mp, struct Stmt_Using_, selection);
+    }
+    
   }
   a->stmt_list = stmt_list;
   return ok;
index 8f806880c9296b7badc272799c1a49b1cef08147..5e58cee0b5f6b66d4153f86dcc26fe5131aff472 100644 (file)
@@ -1,4 +1,4 @@
-#import NonExisting
+import NonExisting;
 
 var ftbl f;
 <<< var SinOsc s >>>;
index 6169266559f17936cd44fefdafc909b38d9c62b1..ce148ee1c6317760eef9075c6609a3d5b32f1ee3 100644 (file)
@@ -1,2 +1,2 @@
-#import get_module
+import get_module;
 <<< __file__ >>>;
index bcbe8c9e811ff280b0238f4ff73b52934a7b9f72..cd0ba9b093ed1b3781b652dd10e88258567b53de 100644 (file)
@@ -1,2 +1,2 @@
-#import array
+import array;
 <<< __file__ >>>;
index d50dfbafa7e430766becf3982c7300d7ba58b6ca..225ccda3c480f40c0ced33fe5547ed16465420be 100644 (file)
@@ -1,2 +1,2 @@
-#import array_in_var_name
+import array_in_var_name;
 <<< __file__ >>>;
index 9d0928c1598c7144197d3b086a0bee0528ce0a68..e8c200a40209f07585af28c48e5df0c081328e3b 100644 (file)
@@ -1,2 +1,2 @@
-#import array_in_var_name_fail
+import array_in_var_name_fail;
 <<< __file__ >>>;
index b385c34cfbe7ccd02bccff36a446c2238acbc670..0bc67422ff2aa2fbdb4d26cadf945cafb039f48b 100644 (file)
@@ -1,2 +1,2 @@
-#import array_incoherent_in_var_name
+import array_incoherent_in_var_name;
 <<< __file__ >>>;
index d5e5542f385872449d34a6e821945b4d1ee7f3b8..276ddd933f91ede5f155dc38e2ae837b5101ff1c 100644 (file)
@@ -1,2 +1,2 @@
-#import array_invalid_in_var_name
+import array_invalid_in_var_name;
 <<< __file__ >>>;
index a0aeef7f2de96c726131c8ffbe49246a4e50eba6..82182259aca11e5eea265e4842c1b7a6e8c1ef7e 100644 (file)
@@ -1,2 +1,2 @@
-#import callback
+import callback;
 <<< __file__ >>>;
index 6eb3670ad0f4499c3650d9925ec5e7945e966fd9..acbde639741e02232aec8bae20f7a0e4d8c263ea 100644 (file)
@@ -1,3 +1,3 @@
-#import class_template
+import class_template;
 var ClassTemplate:[int, int] ct;
 <<< ct.key >>>;
index 57307bc29497217449182a3ef3ffd5f0aebbb58d..e89492a93835a96581c48c8b34295e952c42f294 100644 (file)
@@ -1,2 +1,2 @@
-#import class_template_fail
+import class_template_fail;
 <<< __file__ >>>;
index 591b14e81a35c24754b74fb0d23dc24dd146e920..3eb23411f8b67377d778cbc67f1ca790e06a42bb 100644 (file)
@@ -1,2 +1,2 @@
-#import class_template_invalid
+import class_template_invalid;
 <<< __file__ >>>;
index 97b775becd8197afa496ad0ac739f75d4ca91072..74d8a409803a4e69c44229f7e4baa190eccfe888 100644 (file)
@@ -1,2 +1,2 @@
-#import compile_file
+import compile_file;
 <<< __file__ >>>;
index ef61424190599d517d4103eed779d38ce86c6240..ed5b9bf75d7341b6d309c7875059ae8a1a880582 100644 (file)
@@ -1,2 +1,2 @@
-#import compile_string
+import compile_string;
 <<< __file__ >>>;
index 2ad0c6bcd561634295533ca1b2961dc3e47af1e8..b3ab6eccab19774e79e10da77603eed08c85330b 100644 (file)
@@ -1,5 +1,5 @@
-#import coverage
-#import coverage
+import coverage;
+import coverage;
 
 <<< var float f >>>;
 var Coverage c;
index 4ea4a97cb3412a25772140bd61524c95a68ece8b..4ff8df415f1baaaf84c845c6cd4b73080474d501 100644 (file)
@@ -1,3 +1,3 @@
-#import deps
+import deps;
 
 <<< __file__ >>>;
index c81f573964f7bf0c7d8918a1b537444797941b99..0689d59c4e19c68e61d120045a0be9b09ad07034 100644 (file)
@@ -1,2 +1,2 @@
-#import empty_union
+import empty_union;
 <<< __file__ >>>;
index 63a716d199c3950216ce2b9f6b6c2d9ed8caf394..1f3f9a22842f5841b7f478182502676a8b67288b 100644 (file)
@@ -1,2 +1,2 @@
-#import end_class
+import end_class;
 <<< __file__ >>>;
index 2321b08ffe542b5a279bc467f66940b36356f257..6ed8d9e4cdd9571f2ba1634d5686b67dd037f7e7 100644 (file)
@@ -1,4 +1,4 @@
-#import enum
+import enum;
 
 #! typed global enum
 <<< TYPED_ENUM0 >>>;
index 5943bf3a588acfe0523da0d6afe7c27e19ae5a8f..9200361fdb40cbf4189b0d32e8e9360dd0ad97b5 100644 (file)
@@ -1,2 +1,2 @@
-#import enum_fail
+import enum_fail;
 <<< __file__ >>>;
index 622052f58e457439a6c29c5f38665d7daa70cf4c..a03da3c0c6bd38da207d56f60850698e8d37310a 100644 (file)
@@ -1,2 +1,2 @@
-#import enum_fail2
+import enum_fail2;
 <<< __file__ >>>;
index 9466decc1be727458b2e624f1c7d817a1ed59999..c73ead82d18629323feb76dddcb59d968e0f824a 100644 (file)
@@ -1,2 +1,2 @@
-#import enum_fail3
+import enum_fail3;
 <<< __file__ >>>;
index 5e9747e5f49387495ef64c92b0259df21c2a8d84..db80e3ee4e88755cd05f5e5e7d24841e6f249400 100644 (file)
@@ -1,4 +1,4 @@
-#import extend_array
+import extend_array;
 var ArrayExt a;
 <<< a >>>;
 <<< a.size() >>>;
index efe07cd08ae3bb89f154f44cc28d21dd6482d8ff..45455ce8a8a4c49756c413fc4a3f12448d97b85d 100644 (file)
@@ -1,2 +1,2 @@
-#import fail_on_next_arg
+import fail_on_next_arg;
 <<< __file__ >>>;
index 61f54de9af5125f33e1409198076a23501f527b0..fdcf9d89def64dadc9bdf3277ca0daa2337ab3e2 100644 (file)
@@ -1,2 +1,2 @@
-#import fail_on_next_arg2
+import fail_on_next_arg2;
 <<< __file__ >>>;
index ae1732d5c99a3123800d58acd61fa6949077fa28..ed6d3d58e3be2887af99b5886b6e3a0e9af00ec1 100644 (file)
@@ -1,4 +1,4 @@
-#import fptr
+import fptr;
 fun void test(){ <<< "test" >>>; }
 var PtrType ptr;
 test();
index e000218bcf666c8ae6aacda4441069cf1e034043..1dae1fd10babe18dcfc8171c2778409f103800f9 100644 (file)
@@ -1,2 +1,2 @@
-#import fptr_tmpl
+import fptr_tmpl;
 <<< __file__ >>>;
index ac0e0d54ba6a2c470213aeea0dc75881c3505ffa..f0897aac0f46c9014429f96ce7669ce16da36915 100644 (file)
@@ -1,2 +1,2 @@
-#import fptr_tmpl_fail
+import fptr_tmpl_fail;
 <<< __file__ >>>;
index 69a957a2691adb0d461acae48993ffdd90abb8e6..9dfe266b35ee00790e1f7ed051d511a8d4ea113e 100644 (file)
@@ -1,2 +1,2 @@
-#import func_fail
+import func_fail;
 <<< __file__ >>>;
index 317de91f291c93a3f426bc288712512a78dd0e16..78eb54c269510f2eaf46fd3e2d7eb6b02d854fe4 100644 (file)
@@ -1,2 +1,2 @@
-#import func_fail2
+import func_fail2;
 <<< __file__ >>>;
index e0928a3fb6d8beced34b0b80c72629d36063f086..eb202e0b4774628ad914aaded0a89a92647b5a20 100644 (file)
@@ -1,2 +1,2 @@
-#import func_fail3
+import func_fail3;
 <<< __file__ >>>;
index 73c50c0d45449e5f5bc5878ef2a940b5b392aa0a..f6f18d568d0f561647898119e7bedaf532022ed6 100644 (file)
@@ -1,2 +1,2 @@
-#import func_fail4
+import func_fail4;
 <<< __file__ >>>;
index 2fb66a10d8abbc48dd1a161d6cf1d1281fcb643d..2ca8853c4cb3682585d737e17b6a3e4e2a6b962a 100644 (file)
@@ -1,2 +1,2 @@
-#import func_subscript_not_empty
+import func_subscript_not_empty;
 <<< __file__ >>>;
index 124ab9c4914b637bacecd433a9a944c744960e20..8a04d75ae81b97160e1065f7fd5eed4ac55aa664 100644 (file)
@@ -1,3 +1,3 @@
-#import func_tmpl
+import func_tmpl;
 test:[int](1);
 test(1);
index 0d320bf8df7a64375b4a8bedb1fb240508f1aceb..c5dbc25b051ddad9d70043ab1f02feaa28396cfe 100644 (file)
@@ -1,2 +1,2 @@
-#import func_tmpl_fail
+import func_tmpl_fail;
 <<< __file__ >>>;
index 740ffe61eb027206eb98b4327693d9d632f6d326..25023a4d45f459dd402439f0e2545d55e7d24351 100644 (file)
@@ -1,2 +1,2 @@
-#import func_too_many_arg
+import func_too_many_arg;
 <<< __file__ >>>;
index bd590e861f895668e3a4412cdae5bd3169fc6ee2..390662da2de436f10bc86d82aed4bb8fb32e6358 100644 (file)
@@ -1,3 +1,3 @@
-#import global_func
+import global_func;
 <<< test >>>;
 <<< 1 => test >>>;
index e03e005d58fd4dd887b59f08f1cf8cd0ff28e060..7475578fb673cefa8cab0a31c118a9d794926dd7 100644 (file)
@@ -1,4 +1,4 @@
-#import global_var
+import global_var;
 <<< i >>>;
 <<< "other test" :=> i >>>;
 <<< 12 :=> f >>>;
index eaaff14a869a0da8a1af34269623d25af4b23870..c6661bd5274571f18249890454e5640c983a4506 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_arg
+import invalid_arg;
 <<< __file__ >>>;
index ed0ff7a4e019b9fa8b287310610bfb17cede04b3..27bd9f1c299be21ef2c7d6d75e48f2c47ff80e38 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_array
+import invalid_array;
 <<< __file__ >>>;
index 1d4b257adcd2ee61ad1d67e9ef6c1e2545a1d5d4..ecbc4022e7886a88fa550baab11deac5206756ae 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_func
+import invalid_func;
 <<< __file__ >>>;
index f2ce7c238c7bd896a1430b5869828f3fa6b53f47..b00ef6715e0c6a22d3b30111298bf0300952f9d9 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_names
+import invalid_names;
 <<< __file__ >>>;
index f063328744bb53080dce3a0b8b72da10ca393bc2..a1f49465ad64154192086802fa790a1cdae22886 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_names0
+import invalid_names0;
 <<< __file__ >>>;
index d5fb5ca271d9f89c8594589b78c28be4e495df86..367aeec52128e1d37d4d0df5b70a5d99b11dea6f 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_names1
+import invalid_names1;
 <<< __file__ >>>;
index d26dc6484948a2f75ddebd8262d8f3b6b5856a83..b1e9780012bac053af74e01f61c1c3fbf8db87f9 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_names2
+import invalid_names2;
 <<< __file__ >>>;
index 16832a86da2074c9d67f7ddbab1aff93586a4ef9..5fe2c93f8976dc31d69a5c1f0bfb7fa97e523c78 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_names3
+import invalid_names3;
 <<< __file__ >>>;
index 31b70266961b0492ffb0351fffa5efaefbb2a1b0..0db704023ce800d176ce2adc4d04d7d50c77776e 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_type1
+import invalid_type1;
 <<< __file__ >>>;
index c0cb84adc1338685bdb84a959a6a3c7fdb238b48..67bcc25484366b40c67d041c496c955848150dce 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_type2
+import invalid_type2;
 <<< __file__ >>>;
index e735ba71c74b813a5bee9719a2269820fb9db8c2..7e85000dadd2b5ca2441f147c052931af049f16e 100644 (file)
@@ -1,2 +1,2 @@
-#import invalid_type3
+import invalid_type3;
 <<< __file__ >>>;
index ce617bb57a41979391e144245cd830b5f86b1819..a8bc527440677cbf7a41ceb9fa0ab9c16cb332ac 100644 (file)
@@ -1,2 +1,2 @@
-#import mk_type_array
+import mk_type_array;
 <<< __file__ >>>;
index ec6d8146cf6c417a344410f5f736affca7d8a587..4cb23edf1e96fa08d3b1df280f4ef3df00400b34 100644 (file)
@@ -1,2 +1,2 @@
-#import no_import
+import no_import;
 <<< __file__ >>>;
index 9882c422d70611997923ebaff4d5b30cd3898f34..e639f555263ea93932e2577dc0556f96bafaff62 100644 (file)
@@ -1,2 +1,2 @@
-#import not_importing
+import not_importing;
 <<< __file__ >>>;
index 288427a78bdcc182ca063f1b5fa4562205774c54..7ebaf8bb659c24bb6b80b0f874ebd787b6e6f3a4 100644 (file)
@@ -1,2 +1,2 @@
-#import pass
+import pass;
 <<< __file__ >>>;
index 229d6a40c0a329637c8690d43f067fa18db35fb0..57866aa5a1a4557e7df10be139d09da6368e5dc9 100644 (file)
@@ -1,2 +1,2 @@
-#import specialid_emit
+import specialid_emit;
 <<< testid >>>;
index a6d93b7f5799eadb55521dcba480c2ecaefbcbad..c93e6b038da0835a603fc3a5053502020c36e8b2 100644 (file)
@@ -1,3 +1,3 @@
-#import static_string
+import static_string;
 #!<<< StaticString.self >>>;
 <<< self >>>;
index 59b5fe3504fb2fd684ab4d10636d88999cfbda55..6dad2b726a0314b204adfb2198c0e973137de545 100644 (file)
@@ -1,2 +1,2 @@
-#import str2td
+import str2td;
 <<< __file__ >>>;
index 119f88abd6173087e90742e1d7f864748c5b9aa3..aff6f3df099777a634dd3fd429a819edad16b003 100644 (file)
@@ -1,2 +1,2 @@
-#import str2list_fail
+import str2list_fail;
 <<< __file__ >>>;
index 48f725122a872b71c1b6a5fa94e71a27cd03e2f5..016f3920b7514db0d15ae362c141598f3c1a8066 100644 (file)
@@ -1,4 +1,4 @@
-#import struct
+import struct;
 
 <<< var float f >>>;
 var Struct c;
index 87a93362d4cf769bcdc10f85560afcd19decc768..55368a4ac8cfe15cb9f1c5563a8465fe932b56ce 100644 (file)
@@ -1,2 +1,2 @@
-#import template_arg
+import template_arg;
 <<< __file__ >>>;
index 4cce8a0977e3fbc23e56b9349c2280423f7ee327..2e080e403195b3b47d66e666c369976531a6cb11 100644 (file)
@@ -1,4 +1,4 @@
-#import trig
+import trig;
 var Trig trig => dac;
 adc :=> trig;
 adc :=< trig;
index f4e2a0209ea92dc972b52e30386123e2a50da4e5..b752e9637d9db44d800402c0d0d3db01a8a64b6b 100644 (file)
@@ -1,4 +1,4 @@
-#import typedef
+import typedef;
 var Typedef t;
 #!fun int test(int i) { <<< i >>>; }
 #!test :=> t;
index bff45f17114f917dc558942208ba797104ed8fe1..4a6d5163151ef0ce1e87b660535e44afeab4ac40 100644 (file)
@@ -1,2 +1,2 @@
-#import typedef_fail
+import typedef_fail;
 <<< __file__ >>>;
index 42c584c55d785e7bf2c5956ba06de702e5e06b99..350467d10ee7cfa02a8baec8c0cef84d35df464d 100644 (file)
@@ -1,2 +1,2 @@
-#import typedef_tmpl
+import typedef_tmpl;
 <<< __file__ >>>;
index 1ef7f36a4356f107a6f856705b3a78f89ffdc76b..4403c85b7f8a9cdf7e58f2f3ea95a746943deca4 100644 (file)
@@ -1,2 +1,2 @@
-#import ugen_connect
+import ugen_connect;
 <<< __file__ >>>;
index 27568187026a2b6a6e8deef1cf47fa24a443a989..e93a8fd91f0dbbb599f3b52309c6ced4ac7543d8 100644 (file)
@@ -1,4 +1,4 @@
-#import union
+import union;
 var Union u;
 <<< u.i >>>;
 <<< 12 :=> u.f >>>;
index 88f7810ecb417f3390258e652e198e81f5463570..6d2d2069302a45c9a984a08e280b70a9acd2a043 100644 (file)
@@ -1,2 +1,2 @@
-#import union_fail_exp
+import union_fail_exp;
 <<< __file__ >>>;
index a5cbcf4b9c64bc3dd4fd4fbb901c5b1ba5688dfa..ee3f89281582e35d3e46b8563f83d7e2b4f50ce2 100644 (file)
@@ -1,2 +1,2 @@
-#import union_member
+import union_member;
 <<< __file__ >>>;
index 58730694e11a2030a2abd84abb88b101df48c1df..b311d05aa9159bfaabc9ae65556a855b93af637b 100644 (file)
@@ -1,3 +1,3 @@
-#import union_name
+import union_name;
 <<< my_union >>>;
 <<<my_union.i>>>;
index 433f177c544fa3ffa0dcb85b309c1138d7b027f9..e9e13a6560a88238cdb8db4d6dbc7cebbedfcca3 100644 (file)
@@ -1,3 +1,3 @@
-#import union_tmpl
+import union_tmpl;
 <<< var U:[Event] u>>>;
 <<< u.a >>>;
index b499f12f155bd91bf29a019511e2525b40e28a32..18914740cb9e09b1bdc7a4a8e71125047160ad72 100644 (file)
@@ -1,2 +1,2 @@
-#import union_tmpl_fail
+import union_tmpl_fail;
 <<< __file__ >>>;
index ac613c34ed0ab439d71b41ab2df9c2969d53e600..d9207249faaa96dcc8623881d8676f8b7f64ecb0 100644 (file)
@@ -1,2 +1,2 @@
-#import union_tmpl_fail2
+import union_tmpl_fail2;
 <<< __file__ >>>;
index 28903bec76125065689c68921f4d729e3603217c..a21db94cbebdea2d224e97e01574273f552db5b3 100644 (file)
@@ -1,2 +1,2 @@
-#import union_tmpl_fail3
+import union_tmpl_fail3;
 <<< __file__ >>>;
index 3f45535185fb27d99b7487e26464a85dadcdded1..dcc9b262dea2d95964e864871a5371bd51d029f1 100644 (file)
@@ -1,3 +1,3 @@
-#import vm_remove
+import vm_remove;
 test(12);
 test(1);