From e3b54f34d7bd219fd841be8698fe788eed55bcb6 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Mon, 30 Mar 2020 08:35:22 +0200 Subject: [PATCH] Fixed typedef arrays (still no array of array). Closes #376 --- .../kickc/model/VariableBuilder.java | 2 +- .../kickc/model/symbols/ProgramScope.java | 4 +++- .../kickc/model/values/ScopeRef.java | 3 +++ .../Pass0GenerateStatementSequence.java | 13 ++++------- .../dk/camelot64/kickc/test/TestPrograms.java | 23 ++++++++++++++----- src/test/kc/typedef-4.kc | 12 ++++++++++ src/test/kc/typedef-5.kc | 11 +++++++++ src/test/ref/typedef-3.cfg | 2 +- src/test/ref/typedef-3.log | 18 +++++++-------- src/test/ref/typedef-3.sym | 2 +- 10 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 src/test/kc/typedef-4.kc create mode 100644 src/test/kc/typedef-5.kc diff --git a/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java b/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java index 0e6235b52..255bdebe7 100644 --- a/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java +++ b/src/main/java/dk/camelot64/kickc/model/VariableBuilder.java @@ -107,7 +107,7 @@ public class VariableBuilder { * @return true if the variable is in the global scope */ public boolean isScopeGlobal() { - return ScopeRef.ROOT.equals(scope.getRef()); + return ScopeRef.ROOT.equals(scope.getRef()) || ScopeRef.TYPEDEFS.equals(scope.getRef()); } /** diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/ProgramScope.java b/src/main/java/dk/camelot64/kickc/model/symbols/ProgramScope.java index cc99996a7..bf42c15da 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/ProgramScope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/ProgramScope.java @@ -5,6 +5,7 @@ import dk.camelot64.kickc.model.LiveRangeEquivalenceClassSet; import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeProgram; +import dk.camelot64.kickc.model.values.ScopeRef; /** The program scope containing the symbols of a program */ public class ProgramScope extends Scope { @@ -40,7 +41,8 @@ public class ProgramScope extends Scope { return "program"; } - private TypeDefsScope typeDefsScope = new TypeDefsScope("typedefs", this); + /** The scope holding typedefs. */ + private TypeDefsScope typeDefsScope = new TypeDefsScope(ScopeRef.TYPEDEFS.getFullName(), this); public Scope getTypeDefScope() { return typeDefsScope; diff --git a/src/main/java/dk/camelot64/kickc/model/values/ScopeRef.java b/src/main/java/dk/camelot64/kickc/model/values/ScopeRef.java index 1fb79d159..ccad7f6a5 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ScopeRef.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ScopeRef.java @@ -8,6 +8,9 @@ public class ScopeRef extends SymbolRef { /** The ROOT scope of the program. */ public static final ScopeRef ROOT = new ScopeRef(""); + /** The scope holding type definitions. */ + public static final ScopeRef TYPEDEFS = new ScopeRef("typedefs"); + public ScopeRef(String fullName) { super(fullName); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index ab9f8ecad..8f93c2186 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1769,17 +1769,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor