Pārlūkot izejas kodu

feat: 使用EnvVar存储命令行参数

SongZihuan 3 gadi atpakaļ
vecāks
revīzija
65ece8ebcc
4 mainītis faili ar 14 papildinājumiem un 3 dzēšanām
  1. 3 1
      include/core/info/magic_func.h
  2. 1 0
      src/core/__env.h
  3. 1 0
      src/core/env.c
  4. 9 2
      src/runtime/aFunlang.c

+ 3 - 1
include/core/info/magic_func.h

@@ -13,12 +13,14 @@
 
 
 
 
 /* 内置环境变量 */
 /* 内置环境变量 */
-#define SYS_NAME(job) ("sys-" #job)
+#define SYS_NAME(job) "sys-" #job
 
 
 #define ev_sys_prefix SYS_NAME(prefix)
 #define ev_sys_prefix SYS_NAME(prefix)
 #define ev_grt SYS_NAME(grt)
 #define ev_grt SYS_NAME(grt)
 #define ev_gcmax SYS_NAME(gc-max)
 #define ev_gcmax SYS_NAME(gc-max)
 #define ev_gccount SYS_NAME(gc-count)
 #define ev_gccount SYS_NAME(gc-count)
 #define ev_exit_code SYS_NAME(exit-code)
 #define ev_exit_code SYS_NAME(exit-code)
+#define ev_argc SYS_NAME(argc)
+#define ev_argvx_prefix SYS_NAME(argv)
 
 
 #endif //AFUN_MAGIC_FUNC_H
 #endif //AFUN_MAGIC_FUNC_H

+ 1 - 0
src/core/__env.h

@@ -55,6 +55,7 @@ struct af_Core {  // 解释器核心
     af_EnvVar *gc_runtime;
     af_EnvVar *gc_runtime;
     af_EnvVar *prefix;
     af_EnvVar *prefix;
     af_EnvVar *exit_code_;  // 退出代码
     af_EnvVar *exit_code_;  // 退出代码
+    af_EnvVar *argc;  // 参数个数
 };
 };
 
 
 struct af_Message {
 struct af_Message {

+ 1 - 0
src/core/env.c

@@ -82,6 +82,7 @@ static af_Core *makeCore(enum GcRunTime grt, af_Environment *env) {
     core->gc_max = setEnvVarNumber_(ev_gcmax, DEFAULT_GC_COUNT_MAX, env);
     core->gc_max = setEnvVarNumber_(ev_gcmax, DEFAULT_GC_COUNT_MAX, env);
     core->gc_count = setEnvVarNumber_(ev_gccount, 0, env);
     core->gc_count = setEnvVarNumber_(ev_gccount, 0, env);
     core->exit_code_ = setEnvVarNumber_(ev_exit_code, 0, env);
     core->exit_code_ = setEnvVarNumber_(ev_exit_code, 0, env);
+    core->argc = setEnvVarNumber_(ev_argc, 0, env);
 
 
     core->status = core_creat;
     core->status = core_creat;
     core->protect = makeVarSpaceByCore(NULL, 3, 3, 3, core);
     core->protect = makeVarSpaceByCore(NULL, 3, 3, 3, core);

+ 9 - 2
src/runtime/aFunlang.c

@@ -1,5 +1,5 @@
-#include "__aFunlang.h"
-#include "aFunCore.h"
+#include "aFunCore.h"
+#include "__aFunlang.h"
 #include "__env.h"
 #include "__env.h"
 
 
 static int
 static int
@@ -16,6 +16,13 @@ af_Environment *creatAFunEnviroment(int argc, char **argv){
     for(int i = 0; i < argc; i++)
     for(int i = 0; i < argc; i++)
         printf("[aFunlang] Env-arg %d. %s\n", i, argv[i]);
         printf("[aFunlang] Env-arg %d. %s\n", i, argv[i]);
 
 
+    env->core->argc->num = argc;
+    for (int i = 0; i < argc; i++) {
+        char tmp[512] = {0};
+        snprintf(tmp, 512, ev_argvx_prefix "%d", i);
+        setEnvVarData(tmp, argv[i], env);
+    }
+
     runtimeTool("base", &code, NULL, env->core->protect, env);
     runtimeTool("base", &code, NULL, env->core->protect, env);
 
 
     if (code != NULL) {
     if (code != NULL) {