Make all fields in VariableTable private and use access API to get them in optimizer/OptVariableTable to allow to change VariableTable implementation without changing its usage

git-svn-id: svn://10.0.0.236/trunk@118959 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
igor%mir2.org 2002-04-14 21:29:35 +00:00
parent 806c98ca85
commit eeebf685e0
2 changed files with 22 additions and 21 deletions

View File

@ -58,6 +58,10 @@ public class VariableTable {
return (LocalVariable)(itsVariables.elementAt(index));
}
public boolean hasVariable(String name) {
return itsVariableNames.has(name);
}
public LocalVariable getVariable(String name) {
int vIndex = itsVariableNames.get(name, -1);
if (vIndex != -1)
@ -71,7 +75,7 @@ public class VariableTable {
}
public String getName(int index) {
return ((LocalVariable)(itsVariables.elementAt(index))).getName();
return getVariable(index).getName();
}
public String[] getAllNames() {
@ -94,21 +98,17 @@ public class VariableTable {
}
public void addParameter(String pName) {
// Check addParameter is not called after addLocal
if (varStart != itsVariables.size()) Context.codeBug();
int pIndex = itsVariableNames.get(pName, -1);
if (pIndex != -1) {
LocalVariable p = (LocalVariable)(itsVariables.elementAt(pIndex));
if (p.isParameter()) {
String message = Context.getMessage1("msg.dup.parms", pName);
Context.reportWarning(message, null, 0, null, 0);
}
else { // there's a local variable with this name, blow it off
itsVariables.removeElementAt(pIndex);
}
if (itsVariableNames.has(pName)) {
String message = Context.getMessage1("msg.dup.parms", pName);
Context.reportWarning(message, null, 0, null, 0);
}
int curIndex = varStart++;
int index = varStart++;
LocalVariable lVar = createLocalVariable(pName, true);
itsVariables.insertElementAt(lVar, curIndex);
itsVariableNames.put(pName, curIndex);
itsVariables.addElement(lVar);
itsVariableNames.put(pName, index);
}
public void addLocal(String vName) {
@ -140,11 +140,11 @@ public class VariableTable {
}
// a list of the formal parameters and local variables
protected Vector itsVariables = new Vector();
private Vector itsVariables = new Vector();
// mapping from name to index in list
private ObjToIntMap itsVariableNames = new ObjToIntMap(11);
protected int varStart; // index in list of first variable
private int varStart; // index in list of first variable
}

View File

@ -44,9 +44,10 @@ public class OptVariableTable extends VariableTable {
public void print(PrintWriter pw)
{
System.out.println("Variable Table, size = " + itsVariables.size());
for (int i = 0; i < itsVariables.size(); i++) {
LocalVariable lVar = (LocalVariable)(itsVariables.elementAt(i));
int N = size();
System.out.println("Variable Table, size = " + N);
for (int i = 0; i != N; i++) {
OptLocalVariable lVar = (OptLocalVariable)(getVariable(i));
pw.println(lVar.toString());
}
}
@ -58,9 +59,9 @@ public class OptVariableTable extends VariableTable {
// 2 is reserved for parentScope
// 3 is reserved for script 'this'
short jReg = 4;
for (int i = 0; i < varStart; i++) {
OptLocalVariable lVar = (OptLocalVariable)
itsVariables.elementAt(i);
int parameterCount = getParameterCount();
for (int i = 0; i < parameterCount; i++) {
OptLocalVariable lVar = (OptLocalVariable)getVariable(i);
lVar.assignJRegister(jReg);
jReg += 3; // 3 is 1 for Object parm and 2 for double parm
}