]> Nishi Git Mirror - gwion.git/commitdiff
:art: Remove useless arguments for fptr_def
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Wed, 16 Sep 2020 14:53:17 +0000 (16:53 +0200)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Wed, 16 Sep 2020 14:53:17 +0000 (16:53 +0200)
ast
include/arg.h
src/arg.c
src/compile.c
src/gwion.c
src/import/import_fdef.c
src/lib/lib_func.c
src/parse/check.c

diff --git a/ast b/ast
index 750eae810b8603f1229a93d6bbf856ce8f9f9bd7..6d0584e789c5dbee8f2fc9b8fa95781d271c738c 160000 (submodule)
--- a/ast
+++ b/ast
@@ -1 +1 @@
-Subproject commit 750eae810b8603f1229a93d6bbf856ce8f9f9bd7
+Subproject commit 6d0584e789c5dbee8f2fc9b8fa95781d271c738c
index 7efc4f97eb00cae8604977a74deb18553ff99232..d092cc675c4ec1588414f0899f3586f24757a2dc 100644 (file)
@@ -9,6 +9,7 @@ typedef struct Arg_ {
   struct Vector_ config;
   struct SoundInfo_ *si;
   m_bool loop;
+  m_bool stdin;
 } Arg;
 
 ANN void arg_release(Arg*);
index 930c73414588d485bcf3f2b9887b35c7aa92c4ec..46c0c1ff07ae99e74c600c13dbad1b6940b5764f 100644 (file)
--- a/src/arg.c
+++ b/src/arg.c
@@ -117,6 +117,9 @@ ANN m_bool _arg_parse(const Gwion gwion, Arg* arg) {
           CHECK_OB((tmp = option_argument(ca)))
           arg_set_pass(gwion, tmp);
           break;
+        case '\0':
+          arg->stdin = 1;
+          break;
         default:
           gw_err(_("invalid arguments"));
           return GW_ERROR;
index c1147955c10e52a2d91a1b36307cffded2e81c91..9c1644a5424d9a1d8084f6f09df66de6480a3475 100644 (file)
@@ -72,7 +72,7 @@ ANN static m_bool _compiler_open(struct Compiler* c) {
 ANN static int is_reg(const m_str path) {
   struct stat s;
   stat(path, &s);
-  return S_ISREG(s.st_mode);
+  return S_ISREG(s.st_mode) || !S_ISFIFO(s.st_mode);
 }
 #else
 ANN static m_bool is_reg(const m_str path) {
index df4abb90fd11b9b6c65704dd259297eb36cf4f83..07b221e3e9afa7719b9c3b0cfe9aa20ef1c7888f 100644 (file)
@@ -79,6 +79,8 @@ ANN static m_bool gwion_ok(const Gwion gwion, Arg* arg) {
     if(gwion_engine(gwion)) {
       gwion_cleaner(gwion);
       gwion_compile(gwion, &arg->add);
+      if(arg->stdin)
+        compile_file(gwion, "stdin", stdin);
       return GW_OK;
     }
   }
index a73db3b65c18b93a133280ab585bdf3cb4e067a2..d9ab14e1e22dff1e54ab0b46cb4571c47710c1e3 100644 (file)
@@ -108,7 +108,7 @@ ANN m_int gwi_fptr_ini(const Gwi gwi, const restrict m_str type, const restrict
 
 ANN static Fptr_Def import_fptr(const Gwi gwi, ae_flag flag) {
   Func_Base *base = gwi_func_base(gwi, gwi->ck);
-  return new_fptr_def(gwi->gwion->mp, base, flag | ae_flag_builtin);
+  return new_fptr_def(gwi->gwion->mp, base);
 }
 
 ANN Type gwi_fptr_end(const Gwi gwi, const ae_flag flag) {
index 40e24f1af8577c319b834e5212d722ea58588910..53410ab7ee915efa1240ea45733f90eef63b7207 100644 (file)
@@ -200,7 +200,7 @@ static OP_CHECK(opck_auto_fptr) {
   // create a matching signature
   // TODO: we could check first if there a matching existing one
   Func_Base *const fbase = cpy_func_base(env->gwion->mp, bin->lhs->info->type->e->d.func->def->base);
-  const Fptr_Def fptr_def = new_fptr_def(env->gwion->mp, fbase, bin->lhs->info->type->e->d.func->def->base->flag);
+  const Fptr_Def fptr_def = new_fptr_def(env->gwion->mp, fbase);
   char name[13 + strlen(env->curr->name) +
     num_digit(bin->rhs->pos->first.line) + num_digit(bin->rhs->pos->first.column)];
   sprintf(name, "generated@%s@%u:%u", env->curr->name, bin->rhs->pos->first.line, bin->rhs->pos->first.column);
index 8c1b5562bf7b94551a1fc87427fa99db14b2e5f7..fbcb8bd19c3e9218602daf76dd0b12548a98a311 100644 (file)
@@ -565,7 +565,7 @@ ANN static Func _find_template_match(const Env env, const Value v, const Exp_Cal
       fbase->tmpl->base = 0;
       fbase->tmpl->call = cpy_type_list(env->gwion->mp, types);
       if(template_push_types(env, fbase->tmpl) > 0) {
-        const Fptr_Def fptr = new_fptr_def(env->gwion->mp, fbase, base->base->flag);
+        const Fptr_Def fptr = new_fptr_def(env->gwion->mp, fbase);
         if(traverse_fptr_def(env, fptr) > 0 &&
             (base->base->ret_type = known_type(env, base->base->td)) &&
             (!exp->args || !!check_exp(env, exp->args))) {