summaryrefslogtreecommitdiff
path: root/st
diff options
context:
space:
mode:
Diffstat (limited to 'st')
-rw-r--r--st/SymTableClasses.java6
-rw-r--r--st/SymTableMethods.java4
-rw-r--r--st/SymTableVars.java13
-rw-r--r--st/SymbolTable.java7
-rw-r--r--st/TokenKey.java9
-rw-r--r--st/TypeEnum.java2
6 files changed, 33 insertions, 8 deletions
diff --git a/st/SymTableClasses.java b/st/SymTableClasses.java
index 3c0b761..02fd6eb 100644
--- a/st/SymTableClasses.java
+++ b/st/SymTableClasses.java
@@ -52,7 +52,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> {
n.f17.accept(this, symt);
- TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null);
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null);
ClassInstance instance = new ClassInstance(id.getName());
symt.put(id, instance);
@@ -76,7 +76,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> {
n.f5.accept(this, symt);
- TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null);
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null);
ClassInstance instance = new ClassInstance(id.getName());
symt.put(id, instance);
@@ -105,7 +105,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> {
n.f7.accept(this, symt);
- TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null);
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null);
ClassInstance instance = new ClassInstance(id.getName());
symt.put(id, instance);
diff --git a/st/SymTableMethods.java b/st/SymTableMethods.java
index 5adac56..9f17b0c 100644
--- a/st/SymTableMethods.java
+++ b/st/SymTableMethods.java
@@ -53,7 +53,7 @@ public class SymTableMethods<R> extends GJDepthFirst<R,SymbolTable> {
n.f16.accept(this, symt);
n.f17.accept(this, symt);
- TokenKey id = new TokenKey(n.f6.tokenImage, (ClassInstance) symt.getActive(TypeEnum.classname), null);
+ TokenKey id = new TokenKey(n.f6.tokenImage, TypeEnum.method, (ClassInstance) symt.getActive(TypeEnum.classname), null);
MethodInstance main = new MethodInstance(id.getName(), null, (ClassInstance) symt.getActive(TypeEnum.classname));
symt.put(id, main);
@@ -144,7 +144,7 @@ public class SymTableMethods<R> extends GJDepthFirst<R,SymbolTable> {
- TokenKey id = new TokenKey(n.f2.f0.tokenImage, (ClassInstance) symt.getActive(TypeEnum.classname), null);
+ TokenKey id = new TokenKey(n.f2.f0.tokenImage, TypeEnum.method, (ClassInstance) symt.getActive(TypeEnum.classname), null);
ClassInstance rtrn = null;
switch (n.f1.f0.which) {
case 0:
diff --git a/st/SymTableVars.java b/st/SymTableVars.java
index 014beb1..b9a7c1b 100644
--- a/st/SymTableVars.java
+++ b/st/SymTableVars.java
@@ -55,6 +55,17 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> {
n.f16.accept(this, symt);
n.f17.accept(this, symt);
+ // add the "string" arg
+ TokenKey s = new TokenKey(n.f11.f0.tokenImage,
+ TypeEnum.integer,
+ (ClassInstance) symt.getActive(TypeEnum.classname),
+ (MethodInstance) symt.getActive(TypeEnum.method));
+ TypeInstance instance = new TypeInstance(s.getName(), TypeEnum.string, (MethodInstance) symt.getActive(TypeEnum.method),
+ (ClassInstance) symt.getActive(TypeEnum.classname));
+ symt.put(s, instance);
+ symt.addParameter(s.getName());
+
+
symt.addMethod(id);
symt.removeActive(TypeEnum.method);
symt.removeActive(TypeEnum.classname);
@@ -119,6 +130,7 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> {
n.f1.accept(this, symt);
n.f2.accept(this, symt);
TokenKey id = new TokenKey(n.f1.f0.tokenImage,
+ TypeEnum.integer,
(ClassInstance) symt.getActive(TypeEnum.classname),
(MethodInstance) symt.getActive(TypeEnum.method));
TypeEnum rtrn = null;
@@ -191,6 +203,7 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> {
n.f0.accept(this, symt);
n.f1.accept(this, symt);
TokenKey id = new TokenKey(n.f1.f0.tokenImage,
+ TypeEnum.integer,
(ClassInstance) symt.getActive(TypeEnum.classname),
(MethodInstance) symt.getActive(TypeEnum.method));
diff --git a/st/SymbolTable.java b/st/SymbolTable.java
index 15d33a0..fa6bdf2 100644
--- a/st/SymbolTable.java
+++ b/st/SymbolTable.java
@@ -62,6 +62,7 @@ public class SymbolTable {
cls.getName(), cls.getType()));
cls.addLocal(t);
this.symt.put(new TokenKey(t.getName(),
+ TypeEnum.integer,
cls,
null),
t);
@@ -71,6 +72,7 @@ public class SymbolTable {
m.getName(), m.getType(),
cls.getName(), cls.getType()));
this.symt.put(new TokenKey(m.getName(),
+ TypeEnum.method,
cls,
null),
m);
@@ -150,6 +152,7 @@ public class SymbolTable {
public TypeInstance getType(String name) {
TokenKey id = new TokenKey(name,
+ TypeEnum.integer,
(ClassInstance) this.getActive(TypeEnum.classname),
(MethodInstance) this.getActive(TypeEnum.method));
AbstractInstance symbol;
@@ -164,6 +167,7 @@ public class SymbolTable {
public TypeInstance getTypeAttr(String name) {
TokenKey id = new TokenKey(name,
+ TypeEnum.integer,
(ClassInstance) this.getActive(TypeEnum.classname),
null);
AbstractInstance symbol;
@@ -179,6 +183,7 @@ public class SymbolTable {
public MethodInstance getMethod(String name) {
TokenKey id = new TokenKey(name,
+ TypeEnum.method,
(ClassInstance) this.getActive(TypeEnum.classname),
null);
AbstractInstance symbol;
@@ -193,6 +198,7 @@ public class SymbolTable {
public MethodInstance getMethod(String name, ClassInstance c) {
TokenKey id = new TokenKey(name,
+ TypeEnum.method,
c,
null);
AbstractInstance symbol;
@@ -207,6 +213,7 @@ public class SymbolTable {
public ClassInstance getClass(String name) {
TokenKey id = new TokenKey(name,
+ TypeEnum.classname,
null,
null);
AbstractInstance symbol;
diff --git a/st/TokenKey.java b/st/TokenKey.java
index 948e06a..a421c95 100644
--- a/st/TokenKey.java
+++ b/st/TokenKey.java
@@ -10,18 +10,21 @@ import misc.*;
public class TokenKey {
private String name;
+ private TypeEnum type;
private AbstractInstance cls; // null for classes
private AbstractInstance mtd; // null for classes, methods
- public TokenKey(String name, AbstractInstance cls, AbstractInstance mtd) {
+ public TokenKey(String name, TypeEnum type, AbstractInstance cls, AbstractInstance mtd) {
this.name = name;
+ this.type = type;
this.cls = cls;
this.mtd = mtd;
}
@Override public String toString() {
- return String.format("%s (%s,%s)",
+ return String.format("%s of %s (%s,%s)",
this.name,
+ this.type,
this.mtd,
this.cls);
}
@@ -47,6 +50,8 @@ public class TokenKey {
// }
if (other instanceof TokenKey &&
(o = (TokenKey) other).name.equals(this.name) &&
+ ((o.type == null && this.type == null) ||
+ (o.type != null && o.type.equals(this.type))) &&
((o.cls == null && this.cls == null) ||
(o.cls != null && o.cls.equals(this.cls))) &&
((o.mtd == null && this.mtd == null) ||
diff --git a/st/TypeEnum.java b/st/TypeEnum.java
index e469828..1782e8b 100644
--- a/st/TypeEnum.java
+++ b/st/TypeEnum.java
@@ -1,5 +1,5 @@
package st;
public enum TypeEnum {
- classname, method, intarray, bool, integer
+ classname, method, intarray, bool, integer, string
}