Author: mesyeti <mesyeti@mesyeti.uk>
fix segfault (that did not happen in any debugger!)
basic/source/semanticAnalysis.c | 24 ++++++++++++++---------- basic/source/state.c | 1 +
diff --git a/basic/source/semanticAnalysis.c b/basic/source/semanticAnalysis.c
index 0503c2ea998ae49ab59f321063fd2255f928fcc5..70751771fb54da5d9762b0a2b167ee8fef1243e2 100644
--- a/basic/source/semanticAnalysis.c
+++ b/basic/source/semanticAnalysis.c
@@ -39,8 +39,9 @@ State_MakePrimitive("bool", 1, PRIM_UINT);
State_MakePrimitive("__lit", 0, PRIM_INT);
Type type;
- type.name = NewString("unit");
- type.type = TYPE_UNIT;
+ type.name = NewString("unit");
+ type.type = TYPE_UNIT;
+ type.private = false;
State_AddType(type);
State_AddVar(NEW_VAR("unit", "null", true, true));
@@ -600,14 +601,15 @@ type.type = TYPE_FUNC;
type.name = NULL;
type.size = (size_t) -1;
type.func = func;
- type.private = external && node->funcDef.private;
+ type.private = false;
size_t funcTypeIdx = State_AddType(type);
// create variable for this function
Var funcVar;
- funcVar.type = (UsedType) {0, funcTypeIdx, 0, false};
- funcVar.name = NewString(node->funcDef.dec.name);
+ funcVar.type = (UsedType) {0, funcTypeIdx, 0, false};
+ funcVar.name = NewString(node->funcDef.dec.name);
+ funcVar.private = external && node->funcDef.private;
State_AddVar(funcVar);
@@ -618,8 +620,9 @@
// add parameters to this scope
for (size_t i = 0; i < func.paramsLen; ++ i) {
Var var;
- var.type = func.params[i].type;
- var.name = NewString(func.params[i].name);
+ var.type = func.params[i].type;
+ var.name = NewString(func.params[i].name);
+ var.private = false;
State_AddVar(var);
}
@@ -664,14 +667,15 @@ type.type = TYPE_FUNC;
type.name = NULL;
type.size = (size_t) -1;
type.func = func;
- type.private = external && node->external.private;
+ type.private = false;
size_t funcTypeIdx = State_AddType(type);
// create variable for this function
Var funcVar;
- funcVar.type = (UsedType) {0, funcTypeIdx, 0, false};
- funcVar.name = node->funcDef.dec.name;
+ funcVar.type = (UsedType) {0, funcTypeIdx, 0, false};
+ funcVar.name = node->funcDef.dec.name;
+ funcVar.private = external && node->external.private;
State_AddVar(funcVar);
diff --git a/basic/source/state.c b/basic/source/state.c
index fbf8a1d569ff6be04318d6976fbc0597d532f29a..55624aa6df580199d918e24fb0d8447f3707c3f2 100644
--- a/basic/source/state.c
+++ b/basic/source/state.c
@@ -109,6 +109,7 @@ type.type = TYPE_PRIM;
type.name = NewString(name);
type.size = size;
type.primType = primType;
+ type.private = false;
State_AddType(type);
}