]> Nishi Git Mirror - gwion.git/commitdiff
:art: put more of default_args in scan2
authorfennecdjay <fennecdjay@gmail.com>
Thu, 26 Jan 2023 12:28:39 +0000 (13:28 +0100)
committerfennecdjay <fennecdjay@gmail.com>
Thu, 26 Jan 2023 12:28:39 +0000 (13:28 +0100)
include/default_args.h
src/parse/default_arg.c
src/parse/scan2.c

index 3e1e1782d50e7a064d8df7cbf54d55dd772dba16..96373374991b4f3393bc08470c841b63e086e9fe 100644 (file)
@@ -1,4 +1,4 @@
 #ifndef __DEFAULT_ARGS
 #define __DEFAULT_ARGS
-ANN void default_args(const Env, const Section *, Ast *acc);
+ANN Func_Def default_args(const Env env, Func_Base *fb, Ast *acc, uint32_t max);
 #endif
index 0de4a28d82b2eccca95b71e85ce12079fdd9c47b..682644365c62c13820b1c3fe1561fb26d8aae8ed 100644 (file)
@@ -60,7 +60,7 @@ ANN static Stmt_List new_code(const Env env, Func_Base *base, const uint32_t max
 }
 
 
-ANN static Func_Def _default_args(const Env env, Func_Base *fb, Ast *acc, uint32_t max) {
+ANN Func_Def default_args(const Env env, Func_Base *fb, Ast *acc, uint32_t max) {
   Func_Base *const base = cpy_func_base(env->gwion->mp, fb);
   Stmt_List code = strcmp(s_name(base->xid), "new")
       ? std_code(env, fb, max)
@@ -70,17 +70,3 @@ ANN static Func_Def _default_args(const Env env, Func_Base *fb, Ast *acc, uint32
   mp_vector_add(env->gwion->mp, acc, Section, section);
   return fdef;
 }
-
-ANN void default_args(const Env env, const Section *s, Ast *acc) {
-  Func_Base *const fb = s->d.func_def->base;
-  Arg_List       args = fb->args;
-  uint32_t len = args->len;
-  while(args->len--) {
-    const Arg *arg = mp_vector_at(args, Arg, args->len);
-    if(!arg->exp) break;
-    const Func_Def fdef = _default_args(env, fb, acc, len);
-    scan1_func_def(env, fdef);
-    scan2_func_def(env, fdef);
-  }
-  args->len = len;
-}
index 443a6be990f71982633ad45046982824452e2936..9b6786b2b00c59f181986c9b8c60a9771d7ea0c6 100644 (file)
@@ -625,6 +625,20 @@ ANN m_bool scan2_class_def(const Env env, const Class_Def cdef) {
   return GW_OK;
 }
 
+ANN void scan2_default_args(const Env env, const Section *s, Ast *acc) {
+  Func_Base *const fb = s->d.func_def->base;
+  Arg_List       args = fb->args;
+  uint32_t len = args->len;
+  while(args->len--) {
+    const Arg *arg = mp_vector_at(args, Arg, args->len);
+    if(!arg->exp) break;
+    const Func_Def fdef = default_args(env, fb, acc, len);
+    scan1_func_def(env, fdef);
+    scan2_func_def(env, fdef);
+  }
+  args->len = len;
+}
+
 ANN m_bool scan2_ast(const Env env, Ast *ast) {
   Ast a = *ast;
   Ast acc = new_mp_vector(env->gwion->mp, Section, 0);
@@ -640,7 +654,7 @@ ANN m_bool scan2_ast(const Env env, Ast *ast) {
 
   for(uint32_t i = 0; i < acc->len; i++) {
     Section *section = mp_vector_at(acc, Section, i);
-    default_args(env, section, ast);
+    scan2_default_args(env, section, ast);
   }
   free_mp_vector(env->gwion->mp, Section, acc);
   return ret;