]> Nishi Git Mirror - gwion.git/commitdiff
:art: Locations and bugfixes
authorfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 24 Apr 2019 12:42:01 +0000 (14:42 +0200)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Wed, 24 Apr 2019 12:42:01 +0000 (14:42 +0200)
18 files changed:
ast
help/struct_check.sh [new file with mode: 0755]
include/arg.h
include/driver.h
include/env.h
include/func.h
include/nspc.h
include/oo.h
include/soundinfo.h
include/value.h
include/vm.h
src/lib/object.c
src/lib/ugen.c
src/oo/env.c
src/oo/nspc.c
src/oo/switch.c
src/parse/did_you_mean.c
util

diff --git a/ast b/ast
index 83effb10458c2461f366b689c315013bbe491f76..564a6a8786d2db8fe1bdfa1f2a0ea94685cc04a5 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 83effb10458c2461f366b689c315013bbe491f76
+Subproject commit 564a6a8786d2db8fe1bdfa1f2a0ea94685cc04a5
diff --git a/help/struct_check.sh b/help/struct_check.sh
new file mode 100755 (executable)
index 0000000..6e90635
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+: "${PRG:=./gwion}"
+
+pahole -s ${PRG} | while read name size gap
+do [ $size -gt 64 ] && echo $name $size
+   [ $gap -gt 0 ] && echo "$name has a gap"
+done
index 034d85a2daa94b388359fdcec71b5cedbe9b6e6b..336cfdc62c7f7d1d22a90b2c0f05bdf5e603213c 100644 (file)
@@ -2,13 +2,13 @@
 #define __ARG
 
 typedef struct Arg_ {
-  int argc;
   char** argv;
   struct Vector_ add;
   struct Vector_ lib;
   struct Vector_ mod;
   struct Vector_ config;
   struct SoundInfo_ *si;
+  int argc;
   m_bool loop;
   m_bool memoize;
 } Arg;
index e3264f4b5bdb8f2afe2a1d7498e27f38d328dab9..af2a71b6128a304caa6993b652f5879fbf1646db 100644 (file)
@@ -19,11 +19,11 @@ typedef struct BBQ_ {
   uint64_t pos;
   m_float* in;
   m_float* out;
-  volatile uint is_running;
   struct SoundInfo_ *si;
   f_bbqset func;
   f_bbqrun run;
   struct DriverData_* driver;
+  volatile uint is_running;
 } Driver;
 
 #define DRVINI(a) ANN m_bool a(struct VM_ *vm NUSED, Driver* di NUSED)
index 50756c3bb7ef89ceb9486a9ae26c63065426b5ca..4dc3f5a722f7b1b97f3ea45eeb46e22ef7948812 100644 (file)
@@ -21,7 +21,7 @@ struct Env_Scope_ {
   struct Vector_    breaks;
   struct Vector_    conts;
   struct Vector_    known_ctx;
-  struct Scope_ swi;
+  Scope swi;
   size_t depth;
   size_t type_xid;
 };
index eba5893546fbd42cc07fddbe221b5c2bd6293c70..31096f797132a001c66ffd312bda610554f83596 100644 (file)
@@ -8,8 +8,8 @@ struct Func_ {
   Func next;
   struct Instr_* variadic;
   size_t vt_index;
-  ae_flag flag;
   HAS_OBJ
+  ae_flag flag;
 };
 
 ANEW ANN Func new_func(MemPool, const m_str, const Func_Def);
index 1c318c78c759d657b8558965bdaee2209140382b..7dbdee1042af28523ddba47704d38e9ccee34e10 100644 (file)
@@ -4,9 +4,9 @@ struct NspcInfo_ {
   m_bit* class_data;
   struct Vector_    vtable;
   struct Map_          op_map;
-  struct Scope_     value;
-  struct Scope_     type;
-  struct Scope_     func;
+  Scope  value;
+  Scope  type;
+  Scope  func;
   size_t offset;
   size_t class_data_size;
 };
@@ -27,12 +27,12 @@ extern ANN void nspc_commit(const Nspc);
 
 #define describe_lookup0(A, b)                                                 \
 static inline ANN A nspc_lookup_##b##0(const Nspc n, const Symbol s){          \
-  return (A)scope_lookup0(&n->info->b, (vtype)s);                              \
+  return (A)scope_lookup0(n->info->b, (vtype)s);                              \
 }
 
 #define describe_lookup1(A, b)                                                 \
 static inline ANN A nspc_lookup_##b##1(const Nspc n, const Symbol s) {         \
-  const A a = (A)scope_lookup1(&n->info->b, (vtype)s);                         \
+  const A a = (A)scope_lookup1(n->info->b, (vtype)s);                         \
   if(!a && n->parent)                                                          \
     return nspc_lookup_##b##1(n->parent, s);                                   \
   return a;                                                                    \
@@ -44,10 +44,10 @@ describe_lookup1(A, b)                                                         \
 
 #define describe_nspc_func(A, b)                                               \
 static inline ANN void nspc_add_##b(const Nspc n, const Symbol s, const A a) { \
-  scope_add(&n->info->b, (vtype)s, (vtype)a);                                  \
+  scope_add(n->info->b, (vtype)s, (vtype)a);                                  \
 }                                                                              \
-ANN static inline void nspc_push_##b(MemPool p, const Nspc n) { scope_push(p, &n->info->b); }\
-ANN static inline void nspc_pop_##b (MemPool p, const Nspc n) { scope_pop (p, &n->info->b); }\
+ANN static inline void nspc_push_##b(MemPool p, const Nspc n) { scope_push(p, n->info->b); }\
+ANN static inline void nspc_pop_##b (MemPool p, const Nspc n) { scope_pop (p, n->info->b); }\
 describe_lookups(A, b)
 
 describe_nspc_func(Value, value)
index 449d8d01f2af9f1f7f5267b2677b4ef0be6e3b35..f570a7697fda4c1d34ce10f956bf624617ae07b2 100644 (file)
@@ -7,8 +7,8 @@ typedef struct Value_     * Value;
 typedef struct Func_      * Func;
 
 struct VM_Object_ {
-  uint16_t ref_count; // could be an unsigned short
   void (*free)(void*,void*);
+  uint16_t ref_count; // could be an unsigned short
 };
 
 #define HAS_OBJ struct VM_Object_ obj;
index b0b3d4d04a9499a94df2a89ed89e19153611142a..5fa57b5abce9673401700bd59aaba1b716ac8ede 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef __SOUNDINFO
 #define __SOUNDINFO
 struct SoundInfo_ {
+  m_str arg;
   uint32_t sr;
   uint8_t in, out;
-  m_str arg;
 };
 struct SoundInfo_ *new_soundinfo(MemPool p);
 struct SoundInfo_ *soundinfo_cpy(MemPool p, const struct SoundInfo_ *src);
index fdf93f278b18282849d7eb11ee681fc585e9a252..8f76ed910f3a9fad0c9d7186e8db8cd659ce7ece 100644 (file)
@@ -10,8 +10,8 @@ struct Value_ {
     Func func_ref;
   } d;
   size_t offset;
-  ae_flag flag;
   HAS_OBJ
+  ae_flag flag;
 };
 
 ANEW ANN Value new_value(MemPool p, const Type type, const m_str name);
index 5b6522c2870a6a3e2ca1b32ef04c1245017905d6..1bc4fd1e8b5f1578610f29f5a1f44254d86937bf 100644 (file)
@@ -8,10 +8,10 @@ struct VM_Code_ {
     m_uint native_func;
   };
   size_t stack_depth;
-  ae_flag flag;
   void* memoize;
   m_str name;
   HAS_OBJ
+  ae_flag flag;
 };
 
 typedef struct Shreduler_* Shreduler;
index ff421025a28c758f3dc04ec035123b2daabdb4ee..d0cb0d3821568c4f6a86895dc0a87f9a4bc6f8e4 100644 (file)
@@ -74,7 +74,7 @@ ANN void __release(const M_Object obj, const VM_Shred shred) {
   MemPool p = shred->info->mp;// = shred->info->vm->gwion->p;
   Type t = obj->type_ref;
   while(t->parent) {
-    struct scope_iter iter = { &t->nspc->info->value, 0, 0 };\
+    struct scope_iter iter = { t->nspc->info->value, 0, 0 };\
     Value v;
     while(scope_iter(&iter, &v) > 0) {
       if(!GET_FLAG(v, static) && !GET_FLAG(v, pure) &&
index e439d7295cdd41a0b21331673e1a42d95a920543..f5c687ecdb269c7dd2abc326e4d2986815d7534f 100644 (file)
@@ -295,9 +295,9 @@ static MFUN(ugen_get_last) {
 struct ugen_importer {
   const VM* vm;
   const f_tick tick;
+  UGen ugen;
   const m_str name;
   const uint nchan;
-  UGen ugen;
 };
 
 ANN static m_int add_ugen(const Gwi gwi, struct ugen_importer* imp) {
@@ -313,11 +313,11 @@ ANN static m_int add_ugen(const Gwi gwi, struct ugen_importer* imp) {
 
 static GWION_IMPORT(global_ugens) {
   const VM* vm = gwi_vm(gwi);
-  struct ugen_importer hole = { vm, compute_mono, "blackhole", 1, NULL };
+  struct ugen_importer hole = { vm, compute_mono, NULL, "blackhole", 1 };
   add_ugen(gwi, &hole);
-  struct ugen_importer dac = { vm, dac_tick, "dac", vm->bbq->si->out, NULL };
+  struct ugen_importer dac = { vm, dac_tick, NULL, "dac", vm->bbq->si->out };
   add_ugen(gwi, &dac);
-  struct ugen_importer adc = { vm, adc_tick, "adc", vm->bbq->si->in, NULL };
+  struct ugen_importer adc = { vm, adc_tick, NULL, "adc", vm->bbq->si->in };
   add_ugen(gwi, &adc);
   ugen_connect(dac.ugen, hole.ugen);
   SET_FLAG(t_ugen, abstract);
index a535ad36a846fc3a7f29a9cd94d73e056a1a1f75..fe08de1ab980c0100b93bfce1184f7beb6e72f32 100644 (file)
 #include "vm.h"
 #include "parse.h"
 
-ANN static struct Env_Scope_ *new_scope(MemPool p) {
+ANN static struct Env_Scope_ *new_envscope(MemPool p) {
   struct Env_Scope_ *a = mp_alloc(p, Env_Scope);
   vector_init(&a->breaks);
   vector_init(&a->conts);
   vector_init(&a->class_stack);
   vector_init(&a->nspc_stack);
   vector_init(&a->known_ctx);
-  _scope_init(&a->swi);
-  map_init(&a->swi.map);
+  a->swi = mp_alloc(p, Scope);
+  _scope_init(a->swi);
+  map_init(&a->swi->map);
   return a;
 }
 
@@ -32,7 +33,7 @@ Env new_env(MemPool p) {
   const Env env = (Env)xmalloc(sizeof(struct Env_));
   env->global_nspc = new_nspc(p, "global_nspc");
   env->context = NULL;
-  env->scope = new_scope(p);
+  env->scope = new_envscope(p);
   env_reset(env);
   return env;
 }
@@ -60,7 +61,8 @@ ANN static void free_env_scope(struct Env_Scope_  *a, Gwion gwion) {
   vector_release(&a->class_stack);
   vector_release(&a->breaks);
   vector_release(&a->conts);
-  switch_release(&a->swi);
+  switch_release(a->swi);
+  mp_free(gwion->p, Scope, a->swi);
   mp_free(gwion->p, Env_Scope, a);
 }
 
index c20ffce70bc6de55c481bcdbaa8a65a14d7b07d3..024d3a60ffb42d883da5bc5646cb2a4a72a3b127 100644 (file)
@@ -13,9 +13,9 @@
 #include "operator.h"
 
 ANN void nspc_commit(const Nspc nspc) {
-  scope_commit(&nspc->info->value);
-  scope_commit(&nspc->info->func);
-  scope_commit(&nspc->info->type);
+  scope_commit(nspc->info->value);
+  scope_commit(nspc->info->func);
+  scope_commit(nspc->info->type);
 }
 
 ANN static inline void nspc_release_object(const Nspc a, Value value, Gwion gwion) {
@@ -28,7 +28,7 @@ ANN static inline void nspc_release_object(const Nspc a, Value value, Gwion gwio
 }
 
 ANN static void free_nspc_value(const Nspc a, Gwion gwion) {
-  struct scope_iter iter = { &a->info->value, 0, 0 };
+  struct scope_iter iter = { a->info->value, 0, 0 };
   Value v;
   while(scope_iter(&iter, &v) > 0) {
     if(v->type && (isa(v->type, t_object) > 0  ||
@@ -38,16 +38,16 @@ ANN static void free_nspc_value(const Nspc a, Gwion gwion) {
     }
     REM_REF(v, gwion);
   }
-  scope_release(gwion->p, &a->info->value);
+  free_scope(gwion->p, a->info->value);
 }
 
 #define describe_nspc_free(A, b) \
 ANN static void nspc_free_##b(Nspc n, Gwion gwion) {\
-  struct scope_iter iter = { &n->info->b, 0, 0 };\
+  struct scope_iter iter = { n->info->b, 0, 0 };\
   A a;\
   while(scope_iter(&iter, &a) > 0) \
     REM_REF(a, gwion);\
-  scope_release(gwion->p, &n->info->b);\
+  free_scope(gwion->p, n->info->b);\
 }
 
 describe_nspc_free(Func, func)
@@ -76,9 +76,9 @@ ANN Nspc new_nspc(MemPool p, const m_str name) {
   const Nspc a = mp_alloc(p, Nspc);
   a->name = name;
   a->info = mp_alloc(p, NspcInfo);
-  scope_init(p, &a->info->value);
-  scope_init(p, &a->info->type);
-  scope_init(p, &a->info->func);
+  a->info->value = new_scope(p);
+  a->info->type = new_scope(p);
+  a->info->func = new_scope(p);
   INIT_OO(a, free_nspc);
   return a;
 }
index 169b03162d6a50712a4345dabba5e688b9f00eae..f2aa16d872e7dfd0ac3a99fefd85a57b82b95ee7 100644 (file)
@@ -47,7 +47,7 @@ ANN static Switch new_swinfo(const Env env, const Stmt_Switch stmt) {
   info->t = env->class_def;
   info->f = env->func;
   const Switch sw = new_switch(env->gwion->p);
-  map_set(&env->scope->swi.map, (vtype)info, (vtype)sw);
+  map_set(&env->scope->swi->map, (vtype)info, (vtype)sw);
   sw->depth = env->scope->depth + 2;
   return sw;
 }
@@ -57,10 +57,10 @@ ANN static inline m_bool swinfo_cmp(const struct SwInfo_ *i1, const struct SwInf
 }
 
 ANN Switch swinfo_get(const Env env, const struct SwInfo_ *info) {
-  for(m_uint i = 0; i < VLEN(&env->scope->swi.map); ++i) {
-    const struct SwInfo_ *key = (const struct SwInfo_*)VKEY(&env->scope->swi.map, i);
+  for(m_uint i = 0; i < VLEN(&env->scope->swi->map); ++i) {
+    const struct SwInfo_ *key = (const struct SwInfo_*)VKEY(&env->scope->swi->map, i);
     if(swinfo_cmp(key, info))
-      return (Switch)VVAL(&env->scope->swi.map, i);
+      return (Switch)VVAL(&env->scope->swi->map, i);
   }
   return NULL;
 }
@@ -68,13 +68,13 @@ ANN Switch swinfo_get(const Env env, const struct SwInfo_ *info) {
 ANN m_bool switch_add(const Env env, const Stmt_Switch stmt) {
   const struct SwInfo_ info = { stmt, env->class_def, env->func };
   Switch sw = (Switch)swinfo_get(env, &info) ?: new_swinfo(env, stmt);
-  _scope_add(&env->scope->swi, sw);
+  _scope_add(env->scope->swi, sw);
   return GW_OK;
 }
 
 ANN m_bool switch_decl(const Env env, const loc_t pos) {
-  const Switch sw = (Switch)(VLEN(&env->scope->swi.map) ?
-    VVAL(&env->scope->swi.map, VLEN(&env->scope->swi.map) - 1): 0);
+  const Switch sw = (Switch)(VLEN(&env->scope->swi->map) ?
+    VVAL(&env->scope->swi->map, VLEN(&env->scope->swi->map) - 1): 0);
   if(sw && sw->depth == env->scope->depth)
     ERR_B(pos, "Declaration in switch is prohibited.")
   return GW_OK;
@@ -83,45 +83,42 @@ ANN m_bool switch_decl(const Env env, const loc_t pos) {
 ANN void switch_get(const Env env, const Stmt_Switch stmt) {
   const struct SwInfo_ info = { stmt, env->class_def, env->func };
   const Switch sw = swinfo_get(env, &info);
-  _scope_add(&env->scope->swi, sw);
+  _scope_add(env->scope->swi, sw);
 }
 
 void switch_reset(const Env env) {
-  for(m_uint i = VLEN(&env->scope->swi.map) + 1; --i;) {
-    struct SwInfo_ *info = (struct SwInfo_ *)VKEY(&env->scope->swi.map, i - 1);
+  for(m_uint i = VLEN(&env->scope->swi->map) + 1; --i;) {
+    struct SwInfo_ *info = (struct SwInfo_ *)VKEY(&env->scope->swi->map, i - 1);
     mp_free(env->gwion->p, SwInfo, info);
-    Switch sw = (Switch)VVAL(&env->scope->swi.map, i - 1);
-//if(sw->cases)
-//    free_map(env->gwion->p, sw->cases);
+    Switch sw = (Switch)VVAL(&env->scope->swi->map, i - 1);
     free_switch(env->gwion->p, sw);
   }
-  _scope_clear(&env->scope->swi);
-  map_clear(&env->scope->swi.map);
+  _scope_clear(env->scope->swi);
+  map_clear(&env->scope->swi->map);
 }
 
 ANN void switch_release(const Scope sw) {
   vector_release((Vector)sw);
   map_release(&sw->map);
-//  scope_release(sw);
 }
 
 ANN void switch_expset(const Env env, const Exp e) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   vector_add(&sw->exp, (vtype)e);
 }
 
 ANN Exp switch_expget(const Env env) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   return (Exp)vector_at(&sw->exp, sw->iter++);
 }
 
 ANN m_bool switch_inside(const Env env, const loc_t pos) {
-  if(!VLEN(&env->scope->swi))
+  if(!VLEN(env->scope->swi))
     ERR_B(pos, "case found outside switch statement.")
   return GW_OK;
 }
 ANN m_bool switch_dup(const Env env, const m_int value, const loc_t pos) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   if(map_get(sw->cases, (vtype)value))
     ERR_B(pos, "duplicated cases value %i", value)
   sw->ok = 1;
@@ -129,22 +126,22 @@ ANN m_bool switch_dup(const Env env, const m_int value, const loc_t pos) {
 }
 
 ANN void switch_pc(const Env env, const m_uint pc) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   vector_add(sw->vec, pc);
 }
 
 ANN void switch_dynpc(const Env env, const m_int val, const m_uint pc) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   map_set(sw->cases, val, pc);
 }
 
 ANN m_bool switch_dyn(const Env env) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   return vector_size(&sw->exp);
 }
 
 ANN m_bool switch_default(const Env env, const m_uint pc, const loc_t pos) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   if(sw->default_case_index)
     ERR_B(pos, "default case already defined")
   sw->default_case_index = pc;
@@ -152,32 +149,32 @@ ANN m_bool switch_default(const Env env, const m_uint pc, const loc_t pos) {
 }
 
 ANN Map switch_map(const Env env) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   return sw->cases;
 }
 
 ANN Vector switch_vec(const Env env) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   return vector_copy(env->gwion->p, sw->vec); // new_vector(); // dyn only
 }
 
 ANN m_uint switch_idx(const Env env) {
-  const Switch sw = (Switch)_scope_back(&env->scope->swi);
+  const Switch sw = (Switch)_scope_back(env->scope->swi);
   return sw->default_case_index;
 }
 
 ANN m_bool switch_pop(const Env env) {
-  _scope_pop(&env->scope->swi);
+  _scope_pop(env->scope->swi);
   return GW_OK;
 }
 
 ANN m_bool switch_end(const Env env, const loc_t pos) {
-  const Switch sw = (Switch)_scope_pop(&env->scope->swi);
-  const vtype index = VKEY(&env->scope->swi.map, VLEN(&env->scope->swi.map) - 1);
+  const Switch sw = (Switch)_scope_pop(env->scope->swi);
+  const vtype index = VKEY(&env->scope->swi->map, VLEN(&env->scope->swi->map) - 1);
   sw->ok = 1;
   if(!VLEN(sw->cases) && !VLEN(&sw->exp))
     ERR_B(pos, "switch statement with no cases.")
-  map_remove(&env->scope->swi.map, index);
+  map_remove(&env->scope->swi->map, index);
   free_switch(env->gwion->p, sw);
   return GW_OK;
 }
index e936ec4b2da719554e83249db19e332fb94ad22d..ad0e1a614c163ee497fe0c15afac121c0379e35f 100644 (file)
@@ -39,7 +39,7 @@ static m_bool wagner_fisher(const char *s, const char* t) {
 }
 
 ANN static void ressembles(const Vector v, const Nspc nspc, const char* name) {
-  struct scope_iter iter = { &nspc->info->value, 0, 0 };
+  struct scope_iter iter = { nspc->info->value, 0, 0 };
   Value value;
   while(scope_iter(&iter, &value) > 0) {
     if(!strcmp(name, value->name))
diff --git a/util b/util
index d225ae77804624fbfd1d904a1dd028e392139f62..c77c8dae7d6f932a580bf3dcab5e8e9a39b9f48a 160000 (submodule)
--- a/util
+++ b/util
@@ -1 +1 @@
-Subproject commit d225ae77804624fbfd1d904a1dd028e392139f62
+Subproject commit c77c8dae7d6f932a580bf3dcab5e8e9a39b9f48a