]> Nishi Git Mirror - gwion.git/commitdiff
:art: code cleaning
authorJérémie Astor <fennecdjay@gmail.com>
Sun, 13 Jun 2021 17:50:54 +0000 (19:50 +0200)
committerJérémie Astor <fennecdjay@gmail.com>
Sun, 13 Jun 2021 17:50:54 +0000 (19:50 +0200)
include/compile.h
src/arg.c
src/compile.c
src/import/cleaner.c
src/lib/lib_func.c
src/lib/object_op.c
src/parse/did_you_mean.c

index f8865c199108d2df44b451ffbd0b77dfc2ec91f6..a59c03def960ee9322d991ca2974fef46a867648 100644 (file)
@@ -4,4 +4,10 @@ m_uint compile_filename(struct Gwion_ *vm, const m_str filename);
 m_uint compile_string(struct Gwion_ *vm, const m_str filename,
                       const m_str data);
 m_uint compile_file(struct Gwion_ *vm, const m_str filename, FILE *file);
+m_uint compile_filename_xid(struct Gwion_ *vm, const m_str filename,
+                            const m_uint xid);
+m_uint compile_string_xid(struct Gwion_ *vm, const m_str filename,
+                          const m_str data, const m_uint xid);
+m_uint compile_file_xid(struct Gwion_ *vm, const m_str filename, FILE *file,
+                        const m_uint xid);
 #endif
index 85df3182c041bf7c19a1d1b178c4b0ba4711d54c..2157e6700db0ae894e5c92be602f2aa92f1600a1 100644 (file)
--- a/src/arg.c
+++ b/src/arg.c
@@ -195,9 +195,9 @@ ANN static void split_line(const m_str line, const Vector v) {
 }
 
 ANN static Vector get_config(const char *name) {
-  char *  line = NULL;
-  size_t  len  = 0;
-  FILE *  f = fopen(name, "r");
+  char * line = NULL;
+  size_t len  = 0;
+  FILE * f    = fopen(name, "r");
   CHECK_OO(f);
   const Vector v = (Vector)xmalloc(sizeof(struct Vector_));
   vector_init(v);
index e41207882c005deb652d305dcda1f19bd77995ee..34744434bf109ab2a5deec338cc7efa6b9e9224b 100644 (file)
@@ -18,6 +18,7 @@ struct Compiler {
   FILE *            file;
   Ast               ast;
   struct Vector_    args;
+  VM_Shred          shred;
   enum compile_type type;
 };
 
@@ -134,11 +135,11 @@ ANN static m_uint _compile(struct Gwion_ *gwion, struct Compiler *c) {
   if (compiler_open(c) < 0) return 0;
   if (_check(gwion, c) < 0) return 0;
   if (gwion->emit->info->code) {
-    const VM_Shred shred  = new_vm_shred(gwion->mp, gwion->emit->info->code);
-    shred->info->args.ptr = c->args.ptr;
-    vm_add_shred(gwion->vm, shred);
+    c->shred                 = new_vm_shred(gwion->mp, gwion->emit->info->code);
+    c->shred->info->args.ptr = c->args.ptr;
+    vm_add_shred(gwion->vm, c->shred);
     gwion->emit->info->code = NULL;
-    return shred->tick->xid;
+    return c->shred->tick->xid;
   }
   return GW_OK;
 }
@@ -168,3 +169,24 @@ ANN m_uint compile_file(struct Gwion_ *gwion, const m_str filename,
   struct Compiler c = {.base = filename, .type = COMPILE_FILE, .file = file};
   return compile(gwion, &c);
 }
+
+ANN m_uint compile_filename_xid(struct Gwion_ *gwion, const m_str filename,
+                                const m_uint xid) {
+  struct Compiler c = {.base = filename, .type = COMPILE_NAME};
+  if (!compile(gwion, &c)) return 0;
+  return c.shred->tick->xid = xid;
+}
+
+ANN m_uint compile_string_xid(struct Gwion_ *gwion, const m_str filename,
+                              const m_str data, const m_uint xid) {
+  struct Compiler c = {.base = filename, .type = COMPILE_MSTR, .data = data};
+  if (!compile(gwion, &c)) return 0;
+  return c.shred->tick->xid = xid;
+}
+
+ANN m_uint compile_file_xid(struct Gwion_ *gwion, const m_str filename,
+                            FILE *file, const m_uint xid) {
+  struct Compiler c = {.base = filename, .type = COMPILE_FILE, .file = file};
+  if (!compile(gwion, &c)) return 0;
+  return c.shred->tick->xid = xid;
+}
index 7e5ba6f38ab13e58f938c532a1a8a4bd7df72719..6b64baa39d3a64d5a1421e63f2edb72d1bccfd6a 100644 (file)
@@ -35,11 +35,12 @@ ANN void ck_end(const Gwi gwi) {
 }
 
 typedef void (*cleaner)(MemPool, ImportCK *);
-static cleaner cleaners[] = {NULL, ck_clean_udef, ck_clean_tdef,
+static cleaner cleaners[] = {NULL,          ck_clean_udef, ck_clean_tdef,
                              NULL, //  ck_clean_oper,
                              ck_clean_item, ck_clean_fdef};
 
 ANN void ck_clean(const Gwi gwi) {
-  cleaners[gwi->ck->type](gwi->gwion->mp, gwi->ck);
+  const cleaner clean = cleaners[gwi->ck->type];
+  if (clean) clean(gwi->gwion->mp, gwi->ck);
   memset(gwi->ck, 0, sizeof(ImportCK));
 }
index 338b2e45b5d2456901ff04ce7f003e81a6538435..c7019f5664afd39d9d5cd58208278cadb1d40bb1 100644 (file)
@@ -358,11 +358,10 @@ static void op_narg_err(const Env env, const Func_Def fdef, const loc_t loc) {
     gwerr_basic(_("invalid operator decay"),
                 _("Decayed operators take two arguments"), NULL, env->name, loc,
                 0);
-    if (fdef) gwerr_secondary("declared here", env->name, fdef->base->pos);
+    if (fdef) defined_here(fdef->base->func->value_ref);
     env->context->error = true;
   }
 }
-
 static m_bool op_call_narg(const Env env, Exp arg, const loc_t loc) {
   m_uint narg = 0;
   while (arg) {
index f553a93574b0a89b45fb6ceaf904013656feb8dc..e49af7142c628814a372723f2ef84d19a42b148f 100644 (file)
@@ -194,7 +194,7 @@ OP_CHECK(opck_object_dot) {
       gwerr_basic("invalid variable access", "is private", NULL, env->name,
                   exp_self(member)->pos, 0);
       env_error_footer(env);
-      gwerr_secondary("declared here", value->from->filename, value->from->loc);
+      defined_here(value);
       env->context->error = true;
     } else if (GET_FLAG(value, protect))
       exp_setprot(exp_self(member), 1);
index 0255ee96fc73c11ec20dfd1da96dd0752ab98569..dbce28b2eff6f2fee96b10327f5d858826ab01b8 100644 (file)
@@ -39,9 +39,7 @@ ANN static void ressembles(const Nspc nspc, const char *name,
         *done = true;
         gw_err("{-/}did you mean{0}:\n");
       }
-      if (!vflag(value, vflag_builtin))
-        gwerr_secondary("declared here", value->from->filename,
-                        value->from->loc);
+      if (!vflag(value, vflag_builtin)) defined_here(value);
     }
   }
 }