New stuff - better handle on breaks etc, started try/catch

git-svn-id: svn://10.0.0.236/trunk@32129 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
rogerl%netscape.com
1999-05-18 22:49:59 +00:00
parent 0f957021ce
commit 3c0a85e0de
7 changed files with 310 additions and 148 deletions

View File

@@ -3,10 +3,45 @@ import java.util.Vector;
class ControlNodeGroup {
ControlNodeGroup()
{
}
ControlNodeGroup(ControlNode aHead)
{
head = aHead;
tails = new Vector();
}
void add(ControlNodeGroup aGroup)
{
if (head == null) {
head = aGroup.head;
}
else {
fixTails(aGroup.getHead());
}
addTails(aGroup);
}
void add(ControlNode aNode)
{
fixTails(aNode);
addTail(aNode);
if (head == null) head = aNode;
}
void addBreak(ControlNode aNode)
{
fixTails(aNode);
addBreakTail(aNode);
if (head == null) head = aNode;
}
void addContinue(ControlNode aNode)
{
fixTails(aNode);
addContinueTail(aNode);
if (head == null) head = aNode;
}
void fixTails(ControlNode butt)
@@ -20,6 +55,17 @@ class ControlNodeGroup {
tails.removeAllElements();
}
void fixContinues(ControlNode butt)
{
int count = continueTails.size();
for (int i = 0; i < count; i++)
{
ControlNode aNode = (ControlNode)(continueTails.elementAt(i));
aNode.setNext(butt);
}
continueTails.removeAllElements();
}
void setHead(ControlNode aHead)
{
head = aHead;
@@ -35,6 +81,16 @@ class ControlNodeGroup {
tails.addElement(aTail);
}
void addBreakTail(ControlNode aTail)
{
breakTails.addElement(aTail);
}
void addContinueTail(ControlNode aTail)
{
continueTails.addElement(aTail);
}
void removeTail(ControlNode aTail)
{
tails.removeElement(aTail);
@@ -48,10 +104,42 @@ class ControlNodeGroup {
tails.addElement(aGroup.tails.elementAt(i));
}
aGroup.tails.removeAllElements();
count = aGroup.breakTails.size();
for (int i = 0; i < count; i++)
{
breakTails.addElement(aGroup.breakTails.elementAt(i));
}
aGroup.breakTails.removeAllElements();
count = aGroup.continueTails.size();
for (int i = 0; i < count; i++)
{
continueTails.addElement(aGroup.continueTails.elementAt(i));
}
aGroup.continueTails.removeAllElements();
}
void shiftBreakTails(String label)
{
int count = breakTails.size();
for (int i = 0; i < count; i++)
{
ControlNode c = (ControlNode)(breakTails.elementAt(i));
ExpressionNode e = c.getExpression();
String tgt = (e == null) ? null : ((JSValue)e).value;
if ((tgt == null) || tgt.equals(label)) {
tails.addElement(c);
breakTails.removeElementAt(i);
i--;
count--;
}
}
}
ControlNode head;
Vector tails;
Vector tails = new Vector();
Vector breakTails = new Vector();
Vector continueTails = new Vector();
}