]> Nishi Git Mirror - gwion.git/commitdiff
:art: Try to get clang to work
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 1 Oct 2019 21:50:31 +0000 (23:50 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 1 Oct 2019 21:50:31 +0000 (23:50 +0200)
include/operator.h
src/emit/emit.c
src/parse/check.c

index c3b0abdc0518177d84de109640073f072980fcad..f401301d65a9ec1909d59a801e6bca631bc2b026 100644 (file)
@@ -19,6 +19,7 @@ struct Op_Import {
 struct Implicit {
   Exp e;
   Type  t;
+  loc_t pos;
 };
 ANN m_bool add_op(const Gwion gwion, const struct Op_Import*);
 ANN Type   op_check(const Env, struct Op_Import*);
index 5e778d7ef607504bd9bd7aea642cd00a6a577afc..7f8aabf7074e67ae4a8599dab9b21c38a409ab53 100644 (file)
@@ -1102,7 +1102,7 @@ ANN static m_bool emit_exp_unary(const Emitter emit, const Exp_Unary* unary) {
 
 ANN static m_bool emit_implicit_cast(const Emitter emit,
     const restrict Exp  from, const restrict Type to) {
-  const struct Implicit imp = { .e=from, .t=to  };
+  const struct Implicit imp = { from, to, from->pos };
   struct Op_Import opi = { .op=insert_symbol("@implicit"), .lhs=from->type, .rhs=to, .data=(m_uint)&imp };
   return op_emit_bool(emit, &opi);
 }
index ff8b969d030b2d11aaffdb4accd683c765fa9822..fbb4fc07a9fda1d12b16248df83b2b9bdc78f0e5 100644 (file)
@@ -30,7 +30,7 @@ ANN m_bool check_class_def(const Env env, const Class_Def class_def);
 
 ANN static m_bool check_implicit(const Env env, const m_str str,
       const Exp e, const Type t) {
-  struct Implicit imp = { .e=e, .t=t };
+  struct Implicit imp = { .e=e, .t=t, .pos=e->pos };
   struct Op_Import opi = { .op=insert_symbol(str), .lhs=e->type,
         .rhs=t, .data=(uintptr_t)&imp, .pos=e->pos };
   CHECK_OB(op_check(env, &opi))
@@ -40,8 +40,7 @@ ANN static m_bool check_implicit(const Env env, const m_str str,
 
 ANN m_bool check_exp_array_subscripts(Env env, Exp exp) {
   CHECK_OB(check_exp(env, exp))
-  const Type t_int = env->gwion->type[et_int];
-  do if(isa(exp->type, t_int) < 0)
+  do if(isa(exp->type, env->gwion->type[et_int]) < 0)
       ERR_B(exp->pos, _("incompatible array subscript type '%s' ..."), exp->type->name)
   while((exp = exp->next));
   return GW_OK;
@@ -404,8 +403,7 @@ ANN static Type at_depth(const Env env, const Array_Sub array) {
 
 static inline m_bool index_is_int(const Env env, Exp e, m_uint *depth) {
 // TODO: use "@access"
-  const Type t_int = env->gwion->type[et_int];
-  do if(isa(e->type, t_int) < 0)
+  do if(isa(e->type, env->gwion->type[et_int]) < 0)
     ERR_B(e->pos, _("array index %i must be of type 'int', not '%s'"),
        *depth, e->type->name)
   while(++(*depth) && (e = e->next));
@@ -1041,8 +1039,7 @@ ANN static m_bool do_stmt_auto(const Env env, const Stmt_Auto stmt) {
 }
 
 ANN static inline m_bool cond_type(const Env env, const Exp e) {
-  const Type t_int = env->gwion->type[et_int];
-  return check_implicit(env, "@repeat", e, t_int);
+  return check_implicit(env, "@repeat", e, env->gwion->type[et_int]);
 }
 
 #define stmt_func_xxx(name, type, prolog, exp) describe_stmt_func(check, name, type, prolog, exp)