]> Nishi Git Mirror - gwion.git/commitdiff
:art: Add var names to unions
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 14 Dec 2020 00:21:16 +0000 (01:21 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 14 Dec 2020 00:21:16 +0000 (01:21 +0100)
23 files changed:
include/import/checker.h
include/import/udef.h
src/clean.c
src/import/import_udef.c
src/lib/object_op.c
src/lib/union.c
src/parse/operator.c
src/parse/scan0.c
src/parse/scan1.c
src/parse/scan2.c
tests/error/union_array_empty.gw
tests/error/union_global_private.gw
tests/error/union_global_private_static.gw
tests/error/union_global_static.gw
tests/plug/array_in_var_name_fail.c
tests/plug/union.c
tests/plug/union_fail_exp.c
tests/plug/union_member.c
tests/plug/union_name.c
tests/plug/union_tmpl.c
tests/plug/union_tmpl_fail.c
tests/plug/union_tmpl_fail2.c
tests/plug/union_tmpl_fail3.c

index 69a357ddf77865914b31b7d23e368e1dfa82d499..210fc79a6c23c963e936f432f1f9f6c134a7ee40 100644 (file)
@@ -22,7 +22,7 @@ typedef struct ImportCK { // name_checker ?
     f_xfun addr;
   };
   union {
-    Type_List list;// union
+    Union_List list;// union
     struct Vector_ v;
 //    ID_List curr;// enum
   };
index a11c1f1035ee0535a46e2f15a78987c81e653979..dc25503cf445b8bca7589e50c0fd3da9787e32e7 100644 (file)
@@ -2,7 +2,7 @@
 #define __IMPORT_UNION
 
 ANN2(1) m_int gwi_union_ini(const Gwi gwi, const m_str name);
-ANN m_int gwi_union_add(const Gwi gwi, const __restrict__ m_str type);
+ANN m_int gwi_union_add(const Gwi gwi, const __restrict__ m_str type, const __restrict__ m_str name);
 ANN Type gwi_union_end(const Gwi gwi, const ae_flag flag);
 ANN void ck_clean_udef(MemPool, ImportCK*);
 
index 007d6a116b4a7bbe3b9c5955b4f4ce8b8dd97b7e..48ba283edaaf38f773d6eb4a2e395bbe30b332c3 100644 (file)
@@ -307,8 +307,14 @@ ANN static void clean_enum_def(Clean *a, Enum_Def b) {
     vector_release(&b->values);
 }
 
+ANN static void clean_union_list(Clean *a, Union_List b) {
+  clean_type_decl(a, b->td);
+  if(b->next)
+    clean_union_list(a, b->next);
+}
+
 ANN static void clean_union_def(Clean *a, Union_Def b) {
-  clean_type_list(a, b->l);
+  clean_union_list(a, b->l);
   if(b->tmpl)
     clean_tmpl(a, b->tmpl);
 }
index af9be60cfd4393f4e5343a0b3d8ce24374317bc7..029ca26a6818c99f677b0e1873d9e7c3b7439c07 100644 (file)
@@ -31,10 +31,13 @@ ANN m_int gwi_union_ini(const Gwi gwi, const m_str name) {
   return GW_OK;
 }
 
-ANN m_int gwi_union_add(const Gwi gwi, const restrict m_str type) {
+ANN m_int gwi_union_add(const Gwi gwi, const restrict m_str type, const restrict m_str name) {
   CHECK_BB(ck_ok(gwi, ck_udef))
   DECL_OB(Type_Decl*, td, = str2decl(gwi->gwion, type, gwi->loc))
-  gwi->ck->list = new_type_list(gwi->gwion->mp, td, gwi->ck->list);
+  DECL_OB(const Symbol, xid, = str2sym(gwi->gwion, name, gwi->loc))
+  const Union_List l = new_union_list(gwi->gwion->mp, td, xid, loc(gwi));
+  l->next = gwi->ck->list;
+  gwi->ck->list = l;
   return GW_OK;
 }
 
@@ -73,7 +76,7 @@ ANN Type gwi_union_end(const Gwi gwi, const ae_flag flag) {
 
 ANN void ck_clean_udef(MemPool mp, ImportCK* ck) {
   if(ck->list)
-    free_type_list(mp, ck->list);
+    free_union_list(mp, ck->list);
   if(ck->tmpl)
     free_id_list(mp, ck->tmpl);
 }
index c98925d7c63706e15c1cf953f3edae4402fa0683..519009c2f361382facd8afc67256bc1616cc5126 100644 (file)
@@ -322,7 +322,7 @@ ANN static OP_EMIT(opem_option_uncond) {
 
 ANN static m_bool scantmpl_union_def(const Env env, struct tmpl_info *info) {
   const Union_Def u = info->base->info->udef;
-  const Union_Def udef = new_union_def(env->gwion->mp, cpy_type_list(env->gwion->mp, u->l),
+  const Union_Def udef = new_union_def(env->gwion->mp, cpy_union_list(env->gwion->mp, u->l),
     loc_cpy(env->gwion->mp, u->pos));
   udef->xid = info->name;
   udef->tmpl = mk_tmpl(env, u->tmpl, info->td->types);
index e285d03bbab77f1b67befba2c5a0c03f13ec3776..1a33a181111248785684630775c2683f0c838be4 100644 (file)
 #include "specialid.h"
 #include "gack.h"
 
-#define UNION_IDX(a) (*(m_uint*)(a->data))
-
 static GACK(gack_none) {
   INTERP_PRINTF("None")
 }
 
-static OP_CHECK(opck_any_at_union) {
-  Exp_Binary *bin = (Exp_Binary*)data;
-  CHECK_NN(opck_rassign(env, data, mut)) // check those two lines
-  const Type lhs = bin->lhs->info->type;
-  const Nspc nspc = bin->rhs->info->type->nspc;
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(lhs == *(Type*)(nspc->info->class_data + i))
-      return bin->rhs->info->type;
-  }
-  return env->gwion->type[et_error]; // err_msg
-}
-
-static inline Type curr_type(const M_Object o) {
-  const m_uint idx = UNION_IDX(o);
-  if(!idx)
-    return NULL;
-  const Type curr = *(Type*)(o->type_ref->nspc->info->class_data + ((idx-1) * SZ_INT));
-  return curr;
-}
-
 static INSTR(UnionSet) {
-  POP_REG(shred, SZ_INT);
-  const M_Object o = **(M_Object**)REG(0);
-  memcpy(o->data + SZ_INT, REG(-instr->m_val), instr->m_val);
-  UNION_IDX(o) = instr->m_val2;
-  PUSH_REG(shred, SZ_INT-instr->m_val);
-  *(M_Object*)REG(-SZ_INT) = o;
-  _release(o, shred);
-}
-
-static OP_EMIT(opem_any_at_union) {
-  Exp_Binary *bin = (Exp_Binary*)data;
-  const Type lhs = bin->lhs->info->type;
-  const Nspc nspc = bin->rhs->info->type->nspc;
-  const Instr instr = emit_add_instr(emit, UnionSet);
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(lhs == *(Type*)(nspc->info->class_data + i)) {
-      instr->m_val2 = i/SZ_INT + 1;
-      instr->m_val = lhs->size;
-      return instr;
-    }
-  }
-  return NULL;
-}
-
-static OP_CHECK(opck_union_at_any) {
-  CHECK_NN(opck_rassign(env, data, mut)) // check those two lines
-  Exp_Binary *bin = (Exp_Binary*)data;
-  const Type rhs = bin->rhs->info->type;
-  const Nspc nspc = bin->lhs->info->type->nspc;
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(rhs == *(Type*)(nspc->info->class_data + i))
-      return rhs;
-  }
-  return env->gwion->type[et_error]; // err_msg
-}
-
-static INSTR(UnionGet) {
-  const M_Object o = *(M_Object*)REG(-SZ_INT*2);
-  if(UNION_IDX(o) != instr->m_val2)
-    Except(shred, "invalid union access");
-  memcpy(*(m_bit**)REG(-SZ_INT), o->data + SZ_INT, instr->m_val);
-  POP_REG(shred, SZ_INT*2 - instr->m_val);
-  memcpy(REG(-instr->m_val), o->data + SZ_INT, instr->m_val);
-  _release(o, shred);
-}
-
-static OP_EMIT(opem_union_at_any) {
-  Exp_Binary *bin = (Exp_Binary*)data;
-  const Type rhs = bin->rhs->info->type;
-  const Nspc nspc = bin->lhs->info->type->nspc;
-  // TODO: compound
-  const Instr instr = emit_add_instr(emit, UnionGet);
-  if(isa(rhs, emit->gwion->type[et_object]) > 0) {
-    const Instr instr = emit_add_instr(emit, RegAddRef);
-    instr->m_val = -SZ_INT;
-  }
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(rhs == *(Type*)(nspc->info->class_data + i)) {
-      instr->m_val2 = i/SZ_INT + 1;
-      instr->m_val = rhs->size;
-      return instr;
-    }
-  }
-  return NULL;
-}
-
-static OP_CHECK(opck_union_eq_class) {
-  Exp_Binary *bin = (Exp_Binary*)data;
-  const Type rhs = bin->rhs->info->type->info->base_type;
-  const Nspc nspc = bin->lhs->info->type->nspc;
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(rhs == *(Type*)(nspc->info->class_data + i))
-      return env->gwion->type[et_bool];
-  }
-  return NULL; // err_msg
+  const M_Object o = *(M_Object*)REG(-SZ_INT);
+  *(m_uint*)o->data = instr->m_val;
+  memcpy(o->data + SZ_INT, REG(-SZ_INT-instr->m_val2), instr->m_val2);
+  *(m_bit**)REG(-SZ_INT) = o->data + SZ_INT;
 }
 
-static INSTR(UnionEqClass) {
-  POP_REG(shred, SZ_INT);
+static INSTR(UnionCheck) {
   const M_Object o = *(M_Object*)REG(-SZ_INT);
-  *(m_uint*)REG(-SZ_INT) = (UNION_IDX(o) == instr->m_val2);
-  _release(o, shred);
+  if(*(m_uint*)o->data != instr->m_val)
+    Except(shred, _("invalid union access"))
+  POP_REG(shred, SZ_INT - instr->m_val2);
+  memcpy(REG(-instr->m_val2), o->data + SZ_INT, instr->m_val2);
 }
 
-static OP_EMIT(opem_union_eq_class) {
-  Exp_Binary *bin = (Exp_Binary*)data;
-  const Type rhs = bin->rhs->info->type->info->base_type;
-  const Nspc nspc = bin->lhs->info->type->nspc;
-  const Instr instr = emit_add_instr(emit, UnionEqClass);
-  if(!strcmp(s_name(bin->op), "!="))
-    (void)emit_add_instr(emit, IntNot);
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    if(rhs == *(Type*)(nspc->info->class_data + i)) {
-      instr->m_val2 = i/SZ_INT + 1;
+static OP_EMIT(opem_union_dot) {
+  const Exp_Dot *member = (Exp_Dot*)data;
+  const Map map = &member->t_base->nspc->info->value->map;
+  for(m_uint i = 0; i < map_size(map); ++i) {
+    if(VKEY(map, i) == (m_uint)member->xid) {
+      CHECK_BO(emit_exp(emit, member->base))
+      const Instr instr = emit_add_instr(emit,
+        !exp_getvar(exp_self(member)) ? UnionCheck : UnionSet);
+      instr->m_val = i + 1;
+      instr->m_val2 = ((Value)VVAL(map, i))->type->size;
       return instr;
     }
   }
   return NULL;
 }
 
-static INSTR(UnionNot) {
-  const M_Object o = *(M_Object*)REG(-SZ_INT);
-  const m_uint idx = UNION_IDX(o);
-  if(idx) {
-    const Type none = shred->info->vm->gwion->type[et_none];
-    const Type curr = *(Type*)(o->type_ref->nspc->info->class_data + ((idx-1) * SZ_INT));
-    *(m_uint*)REG(-SZ_INT) = curr == none;
-  } else
-    *(m_uint*)REG(-SZ_INT) = 1;
-  _release(o, shred);
-}
-
 static DTOR(UnionDtor) {
   const m_uint idx = *(m_uint*)o->data;
   if(idx) {
@@ -175,29 +71,13 @@ ANN GWION_IMPORT(union) {
   GWI_BB(gwi_class_end(gwi))
   gwi->gwion->type[et_union] = t_union;
 
-  GWI_BB(gwi_oper_ini(gwi, (m_str)OP_ANY_TYPE, "@Union", NULL))
-  GWI_BB(gwi_oper_add(gwi, opck_any_at_union))
-  GWI_BB(gwi_oper_emi(gwi, opem_any_at_union))
-  GWI_BB(gwi_oper_end(gwi, "?=>", NULL))
-
   GWI_BB(gwi_oper_ini(gwi, "@Union", (m_str)OP_ANY_TYPE, NULL))
-  GWI_BB(gwi_oper_add(gwi, opck_union_at_any))
-  GWI_BB(gwi_oper_emi(gwi, opem_union_at_any))
-  GWI_BB(gwi_oper_end(gwi, "?=>", NULL))
-
-  GWI_BB(gwi_oper_ini(gwi, "@Union", "@Class", NULL))
-  GWI_BB(gwi_oper_add(gwi, opck_union_eq_class))
-  GWI_BB(gwi_oper_emi(gwi, opem_union_eq_class))
-  GWI_BB(gwi_oper_end(gwi, "==", NULL))
-  GWI_BB(gwi_oper_add(gwi, opck_union_eq_class))
-  GWI_BB(gwi_oper_emi(gwi, opem_union_eq_class))
-  GWI_BB(gwi_oper_end(gwi, "!=", NULL))
-  GWI_BB(gwi_oper_ini(gwi, NULL, "@Union", "bool"))
-  GWI_BB(gwi_oper_end(gwi, "!", UnionNot))
+  GWI_BB(gwi_oper_emi(gwi, opem_union_dot))
+  GWI_BB(gwi_oper_end(gwi, "@dot", NULL))
 
   GWI_BB(gwi_union_ini(gwi, "Option:[A]"))
-  GWI_BB(gwi_union_add(gwi, "A"))
-  GWI_BB(gwi_union_add(gwi, "None"))
+  GWI_BB(gwi_union_add(gwi, "None", "none"))
+  GWI_BB(gwi_union_add(gwi, "A", "val"))
   GWI_BB(gwi_union_end(gwi, ae_flag_none))
 
   return GW_OK;
index 56089f33325b0bc791b5bb2320c82c5ccd6fea28..e21530f55520bd7e6da1eef98b28f940c2e6bc53 100644 (file)
@@ -265,9 +265,13 @@ ANN Instr op_emit(const Emitter emit, const struct Op_Import* opi) {
         continue;
       const M_Operator* mo = operator_find(v, l, r);
       if(mo) {
-        if(mo->em)
-          return mo->em(emit, (void*)opi->data);
-        return handle_instr(emit, mo);
+        if(mo->em) {
+          const Instr ret = mo->em(emit, (void*)opi->data);
+          if(ret)
+            return ret;
+        }
+        else if(mo->func || mo->instr)
+          return handle_instr(emit, mo);
       }
     } while(r && (r = op_parent(emit->env, r)));
   } while(l && (l = op_parent(emit->env, l)));
index b66fc18cf1fb33fcd48cae1882d0ddc335d81cf7..223638b63b879286c622a81b39428fa056dc2934 100644 (file)
@@ -244,9 +244,10 @@ ANN m_bool scan0_union_def(const Env env, const Union_Def udef) {
     context_global(env);
   CHECK_BB(scan0_defined(env, udef->xid, udef->pos))
   udef->type = union_type(env, udef->xid);
-  Type_List tl = udef->l;
-  do udef->type->nspc->info->class_data_size += SZ_INT;
-  while((tl = tl->next));
+  Union_List l = udef->l;
+  do udef->type->nspc->info->offset += SZ_INT;
+  while((l = l->next));
+  udef->type->nspc->info->offset += SZ_INT;
   SET_ACCESS(udef, udef->type);
   if(udef->tmpl)
     union_tmpl(env, udef);
index 1331a2f51053688b4d4628b2ee1d5be20c6d5780..a91a7ec449de21267f09bf1862c7594c13807889 100644 (file)
@@ -401,16 +401,21 @@ ANN m_bool scan1_type_def(const Env env, const Type_Def tdef) {
 
 ANN static inline m_bool scan1_union_def_inner_loop(const Env env, Union_Def udef) {
   nspc_allocdata(env->gwion->mp, udef->type->nspc);
-  Type_List l = udef->l;
+  Union_List l = udef->l;
   m_uint sz = 0;
-  const Nspc nspc = udef->type->nspc;
-  for(m_uint i = 0; i < nspc->info->class_data_size; i += SZ_INT) {
-    DECL_OB(const Type, t, =(*(Type*)(nspc->info->class_data + i) = known_type(env, l->td)))
+  do {
+    DECL_OB(const Type, t, = known_type(env, l->td))
+    if(nspc_lookup_value0(env->curr, l->xid))
+      ERR_B(l->pos, _("'%s' already declared in union"), s_name(l->xid))
+// check name
+puts(env->curr->name);
+    const Value v = new_value(env->gwion->mp, t, s_name(l->xid));
+    v->from->offset = SZ_INT;
+    valuefrom(env ,v->from);
+    nspc_add_value_front(env->curr, l->xid, v);
     if(t->size > sz)
       sz = t->size;
-    l = l->next;
-  }
-  nspc->info->offset = sz + SZ_INT;
+  } while((l = l->next));
   return GW_OK;
 }
 
index a578d1b55fa176d49ddc9a2a99efea29c0413eb6..9af08dbf9d0022f937dd49a1823833df05845bda 100644 (file)
@@ -259,7 +259,7 @@ ANN static m_bool scan2_stmt_jump(const Env env, const Stmt_Jump stmt) {
   return GW_OK;
 }
 
-ANN m_bool scan2_union_def(const Env env, const Union_Def udef) {
+ANN m_bool scan2_union_def(const Env env NUSED, const Union_Def udef) {
   if(tmpl_base(udef->tmpl))
     return GW_OK;
   set_tflag(udef->type, tflag_scan2);
index 0c99543b9c7bbc95416445c0691a0c04333c3e1b..c9f63041d11d1a76fa58d9a7758da247d16d3347 100644 (file)
@@ -1,2 +1,5 @@
 #! [contains] must be defined with empty
-union U { int : int [4] };
+union U {
+  int i;
+  int[4] j;
+}
index 98f3a2ddb50adea51906a0ae581ed06b79c478e9..61975b7ddbabacca0ad60607101eb338a28f6af2 100644 (file)
@@ -1,2 +1,2 @@
 #! [contains] can only be used at class scope.
-union static U { int };
+union static U { int i; }
index 6c0b5b44fee1cc77530744e540a5ffc79766ae3c..f4ef299f73b14e8170d71926094696ed96039329 100644 (file)
@@ -1,2 +1,2 @@
 #! [contains] can only be used at class scope.
-union private  static U { int };
+union private  static U { int i; }
index f1c95c5107541ca2af408eb2e762be1c3ae84ba6..834d48b960226cdafb38ea0b770e886439d96988 100644 (file)
@@ -1,2 +1,2 @@
 #! [contains] can only be used at class scope.
-union private U { int };
+union private U { int i; }
index 6963aaf201ab8d06ed17f72ce35980d33e5fed92..7d4ed74b7719f889a7b8e509875daffd8bfa7262 100644 (file)
@@ -11,6 +11,6 @@
 
 GWION_IMPORT(checker) {
   GWI_BB(gwi_union_ini(gwi, "U"))
-  GWI_BB(gwi_union_add(gwi, "int"))
+  GWI_BB(gwi_union_add(gwi, "int", "i"))
   return GW_OK;
 }
index fe8127afa6d59d440573ffb8aa91f3dcb540726f..5dd8357fe0ff1221402a949e4681fc957f55d156 100644 (file)
@@ -10,8 +10,8 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index fe6645fa7c2b5b542f9dd7f190b0df3743e16f12..6d4bc0447d3ad40dfaae2c32178140994cb068cf 100644 (file)
@@ -10,8 +10,8 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U"))
-  GWI_BB(gwi_union_add(gwi,"Float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
+  GWI_BB(gwi_union_add(gwi,"Float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index 65e2fcd2a67918eeaa6b5d8b21e48e15e0f1deb0..830e3181fb8bba9a298b4b24b91468d00abb65af 100644 (file)
@@ -11,8 +11,8 @@
 GWION_IMPORT(union_member) {
   GWI_OB(gwi_class_ini(gwi, "UnionMember", NULL))
     GWI_BB(gwi_union_ini(gwi, "U"))
-    GWI_BB(gwi_union_add(gwi,"float"))
-    GWI_BB(gwi_union_add(gwi,"int[]"))
+    GWI_BB(gwi_union_add(gwi,"float", "f"))
+    GWI_BB(gwi_union_add(gwi,"int[]", "array"))
     GWI_OB(gwi_union_end(gwi, ae_flag_none))
   GWI_BB(gwi_class_end(gwi))
   return GW_OK;
index 17cf8856b23d393dcc9d37bbcdcbb8e05328e6de..671280d2fe6ee5d4fa275644e6d336616debd86c 100644 (file)
@@ -10,8 +10,8 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "my_union"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index 637251b293bebf83f1ccbb3c7b122c2f025af304..83aee39ea617d7329322a16f469eeb5491306768 100644 (file)
@@ -10,9 +10,9 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U:[A]"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
-  GWI_BB(gwi_union_add(gwi,"A"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
+  GWI_BB(gwi_union_add(gwi,"A", "a"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index 637251b293bebf83f1ccbb3c7b122c2f025af304..83aee39ea617d7329322a16f469eeb5491306768 100644 (file)
@@ -10,9 +10,9 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U:[A]"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
-  GWI_BB(gwi_union_add(gwi,"A"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
+  GWI_BB(gwi_union_add(gwi,"A", "a"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }
index e8310372eb21e67448040cd39423070566b98642..cc23bc1b27be21a7f30e481d4cc955ea40818fdb 100644 (file)
@@ -10,9 +10,9 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U:[A]"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
-  GWI_BB(gwi_union_add(gwi,"A"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
+  GWI_BB(gwi_union_add(gwi,"A", "a"))
   GWI_BB(gwi_union_ini(gwi, "U:[A]"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
index 637251b293bebf83f1ccbb3c7b122c2f025af304..83aee39ea617d7329322a16f469eeb5491306768 100644 (file)
@@ -10,9 +10,9 @@
 
 GWION_IMPORT(union_test) {
   GWI_BB(gwi_union_ini(gwi, "U:[A]"))
-  GWI_BB(gwi_union_add(gwi,"float"))
-  GWI_BB(gwi_union_add(gwi,"int"))
-  GWI_BB(gwi_union_add(gwi,"A"))
+  GWI_BB(gwi_union_add(gwi,"float", "f"))
+  GWI_BB(gwi_union_add(gwi,"int", "i"))
+  GWI_BB(gwi_union_add(gwi,"A", "a"))
   GWI_OB(gwi_union_end(gwi, 0))
   return GW_OK;
 }