]> Nishi Git Mirror - gwion.git/commitdiff
:art: improve tdpp
authorfennecdjay <fennecdjay@gmail.com>
Fri, 29 Mar 2024 12:42:19 +0000 (13:42 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Fri, 29 Mar 2024 12:42:19 +0000 (13:42 +0100)
include/env/env.h
src/parse/type_decl.c
src/sema/sema.c

index a9cfdb309131e335ae84f72a8019e01113030d77..eebaf16718238fc1bf57d2a4dfc54419dff4158c 100644 (file)
@@ -57,7 +57,7 @@ ANN Value  mk_class(const Env env, const Type base, const loc_t);
 ANN bool   compat_func(const __restrict__ Func_Def,
                        const __restrict__ Func_Def);
 ANN Type   known_type(const Env env, Type_Decl *);
-ANN m_str tdpp(MemPool, SymTable*, const Type_Decl*, const bool no_color);
+ANN m_str tdpp(MemPool, SymTable*, const Type_Decl*, const bool no_color, const bool minimize);
 ANN Type   prim_ref(const Env env, const Type t, const Type_Decl *td);
 ANN bool   env_access(const Env env, const ae_flag flag, const loc_t);
 ANN bool   env_storage(const Env env, ae_flag flag, const loc_t);
index e30896f97f9c604e08cdaf09e7461b6127280f82..6efaa75d41f052c4169400efc2436d73de60de0d 100644 (file)
@@ -117,8 +117,9 @@ ANN static Type resolve(const Env env, Type_Decl *td) {
   return !array ? ret : array_type(env, ret, array->depth, td->tag.loc);
 }
 
-ANN m_str tdpp(MemPool mp, SymTable *st, const Type_Decl *td, bool no_color) {
-  struct GwfmtState ls     = {};
+ANN m_str tdpp(MemPool mp, SymTable *st, const Type_Decl *td,
+               const bool no_color, const bool minimize) {
+  struct GwfmtState ls     = { .minimize = minimize,};
   text_init(&ls.text, mp);
   Gwfmt gwfmter = {.mp = mp, .ls = &ls, .st = st };
   bool has_color = tcol_has_color();
@@ -129,7 +130,7 @@ ANN m_str tdpp(MemPool mp, SymTable *st, const Type_Decl *td, bool no_color) {
 }
 
 ANN static inline void *type_unknown(const Env env, const Type_Decl *td) {
-  m_str str = tdpp(env->gwion->mp, env->gwion->st, td, false);
+  m_str str = tdpp(env->gwion->mp, env->gwion->st, td, false, tcol_has_color());
   env_err(env, td->tag.loc, _("unknown type '%s'"), str);
   free_mstr(env->gwion->mp, str);
   return NULL;
index e56faad1f7b02568b0063825e05da369fbd480f0..614b9a86674742b1199b9bc694f1294ab9afee6e 100644 (file)
@@ -219,6 +219,7 @@ ANN static bool sema_exp_call(Sema *a, Exp_Call *b) {
 
 ANN static bool sema_exp_array(Sema *a, Exp_Array *b) {
   const bool ok = sema_exp(a, b->base);
+  CHECK_B(array_not_empty(a, b->array, "in array expression", exp_self(b)->loc));
   return sema_array_sub(a, b->array) && ok;
 }
 
@@ -448,7 +449,7 @@ ANN2(1, 2) static bool sema_spread(Sema *a, const Spread_Def spread, MP_Vector *
     const Type_Decl *td = *mp_vector_at(a->tmpls, Type_Decl*, i);
     fseek(f, 0, SEEK_SET);
 
-    const m_str type = tdpp(a->mp, a->st, td, true);
+    const m_str type = tdpp(a->mp, a->st, td, true, true);
     sprintf(c, "%s=%s", s_name(spread->tag.sym), type);
     pparg_add(a->ppa, c);
     free_mstr(a->mp, type);