Browse Source

refactor: 调整变量权限系统

取消后代权限
SongZihuan 3 years ago
parent
commit
5003ce2df4
6 changed files with 15 additions and 16 deletions
  1. 3 3
      include/var.h
  2. 1 1
      src/core/__var.h
  3. 1 1
      src/core/func.c
  4. 6 7
      src/core/var.c
  5. 2 2
      src/main.c
  6. 2 2
      test/test_env.c

+ 3 - 3
include/var.h

@@ -9,7 +9,7 @@ typedef struct af_VarSpaceListNode af_VarSpaceListNode;
 #include "object.h"
 
 /* 变量创建与释放 */
-af_Var *makeVar(char *name, char p_self, char p_posterity, char p_external, af_Object *obj);
+af_Var *makeVar(char *name, char p_self, char p_external, af_Object *obj);
 void freeVar(af_Var *var);
 
 /* 变量值管理 */
@@ -27,11 +27,11 @@ void addVarGC(af_Var *var, af_Environment *env);
 
 /* 变量赋值类函数 */
 bool addVarToVarSpace(af_Var *var, af_VarSpace *vs);
-bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
+bool makeVarToVarSpace(char *name, char p_self, char p_external, af_Object *obj,
                        af_VarSpace *vs);
 
 bool addVarToVarSpaceList(af_Var *var, af_VarSpaceListNode *vsl);
-bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
+bool makeVarToVarSpaceList(char *name, char p_self, char p_external, af_Object *obj,
                            af_VarSpaceListNode *vsl);
 
 /* 变量寻值类函数 */

+ 1 - 1
src/core/__var.h

@@ -20,7 +20,7 @@ struct af_VarNode {
 struct af_Var {
     char *name;
     struct af_VarNode *vn;
-    char permissions[3];  // 读-1 写-2 读且写-3 不读不写-0 [自己权限 后代权限 外部权限]
+    char permissions[2];  // 读-1 写-2 读且写-3 不读不写-0 [自身权限 外部权限]
     GC_Var gc;
 };
 

+ 1 - 1
src/core/func.c

@@ -97,7 +97,7 @@ ArgList **pushNewArgList(ArgList **base, char *name, af_Object *obj) {
 
 bool runArgList(ArgList *al, af_VarSpaceListNode *vsl) {
     for (NULL; al != NULL; al = al->next) {
-        if (!makeVarToVarSpaceList(al->name, 3, 3, 3, al->obj, vsl))
+        if (!makeVarToVarSpaceList(al->name, 3, 3, al->obj, vsl))
             return false;
     }
     return true;

+ 6 - 7
src/core/var.c

@@ -35,14 +35,13 @@ static void freeAllVarNode(af_VarNode *vn) {
         vn = freeVarNode(vn);
 }
 
-af_Var *makeVar(char *name, char p_self, char p_posterity, char p_external, af_Object *obj) {
+af_Var *makeVar(char *name, char p_self, char p_external, af_Object *obj) {
     af_VarNode *vn = makeVarNode(obj, NULL);
     af_Var *var = calloc(sizeof(af_Var), 1);
     var->name = strCopy(name);
     var->vn = vn;
     var->permissions[0] = p_self;
-    var->permissions[1] = p_posterity;
-    var->permissions[2] = p_external;
+    var->permissions[1] = p_external;
     return var;
 }
 
@@ -173,9 +172,9 @@ bool addVarToVarSpace(af_Var *var, af_VarSpace *vs) {
  * 若已存在同名Var则返回false不作修改
  * 否则返回true
  */
-bool makeVarToVarSpace(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
+bool makeVarToVarSpace(char *name, char p_self, char p_external, af_Object *obj,
                        af_VarSpace *vs) {
-    return addVarToVarSpace(makeVar(name, p_self, p_posterity, p_external, obj), vs);
+    return addVarToVarSpace(makeVar(name, p_self, p_external, obj), vs);
 }
 
 bool addVarToVarSpaceList(af_Var *var, af_VarSpaceListNode *vsl) {
@@ -186,9 +185,9 @@ bool addVarToVarSpaceList(af_Var *var, af_VarSpaceListNode *vsl) {
     return false;
 }
 
-bool makeVarToVarSpaceList(char *name, char p_self, char p_posterity, char p_external, af_Object *obj,
+bool makeVarToVarSpaceList(char *name, char p_self, char p_external, af_Object *obj,
                            af_VarSpaceListNode *vsl) {
-    return addVarToVarSpaceList(makeVar(name, p_self, p_posterity, p_external, obj), vsl);
+    return addVarToVarSpaceList(makeVar(name, p_self, p_external, obj), vsl);
 }
 
 /*

+ 2 - 2
src/main.c

@@ -15,10 +15,10 @@ int main() {
     printf("Hello World\n");
 
     af_Environment *env = makeEnvironment();
-    addVarToProtectVarSpace(makeVar("global", 3, 3, 3,
+    addVarToProtectVarSpace(makeVar("global", 3, 3,
                                     makeObject("global", true, makeObjectAPI(), true, NULL, NULL, env)),
                             env);
-    addVarToProtectVarSpace(makeVar("object", 3, 3, 3,
+    addVarToProtectVarSpace(makeVar("object", 3, 3,
                                     makeObject("object", true, makeObjectAPI(), true, NULL, NULL, env)),
                             env);
 

+ 2 - 2
test/test_env.c

@@ -5,10 +5,10 @@ int main() {
     aFunInit();
 
     af_Environment *env = makeEnvironment();
-    addVarToProtectVarSpace(makeVar("global", 3, 3, 3,
+    addVarToProtectVarSpace(makeVar("global", 3, 3,
                                     makeObject("global", true, makeObjectAPI(), true, NULL, NULL, env)),
                             env);
-    addVarToProtectVarSpace(makeVar("object", 3, 3, 3,
+    addVarToProtectVarSpace(makeVar("object", 3, 3,
                                     makeObject("object", true, makeObjectAPI(), true, NULL, NULL, env)),
                             env);
     if (!enableEnvironment(env)) {