Workarounds for StackOverflowExceptions

This commit is contained in:
Honfika
2013-12-01 08:53:04 +01:00
parent ab569f1dd2
commit ac96c7dbb5
47 changed files with 330 additions and 124 deletions
@@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItemPos;
import com.jpexs.decompiler.graph.GraphTargetItem;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp {
@@ -79,8 +80,16 @@ public abstract class BinaryOpItem extends GraphTargetItem implements BinaryOp {
}
@Override
public boolean isCompileTime() {
return leftSide.isCompileTime() && rightSide.isCompileTime();
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
if (dependencies.contains(leftSide)) {
return false;
}
dependencies.add(leftSide);
if (dependencies.contains(rightSide)) {
return false;
}
dependencies.add(rightSide);
return leftSide.isCompileTime(dependencies) && rightSide.isCompileTime(dependencies);
}
@Override
@@ -18,6 +18,7 @@ package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphTargetItem;
import static com.jpexs.decompiler.graph.GraphTargetItem.NOPRECEDENCE;
/**
*
@@ -25,20 +26,32 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
*/
public class CommentItem extends GraphTargetItem {
private String comment;
private String[] commentLines;
public CommentItem(String comment) {
super(null, NOPRECEDENCE);
this.comment = comment;
this.commentLines = new String[] { comment };
}
public CommentItem(String[] commentLines) {
super(null, NOPRECEDENCE);
this.commentLines = commentLines;
}
@Override
protected GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) {
return writer.append("/* " + comment + " */");
writer.append("/* ");
for (int i = 0; i < commentLines.length; i++) {
writer.append(commentLines[i]);
if (i != commentLines.length - 1) {
writer.newLine();
}
}
return writer.append(" */");
}
public String getComment() {
return comment;
public String[] getCommentLines() {
return commentLines;
}
@Override
@@ -21,6 +21,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
import java.util.List;
import java.util.Set;
/**
*
@@ -59,8 +60,12 @@ public class DuplicateItem extends GraphTargetItem {
}
@Override
public boolean isCompileTime() {
return value.isCompileTime();
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
if (dependencies.contains(value)) {
return false;
}
dependencies.add(value);
return value.isCompileTime(dependencies);
}
@Override
@@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class IfItem extends GraphTargetItem implements Block {
@@ -31,8 +32,12 @@ public class IfItem extends GraphTargetItem implements Block {
public List<GraphTargetItem> onFalse;
@Override
public boolean isCompileTime() {
return expression.isCompileTime();
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
if (dependencies.contains(expression)) {
return false;
}
dependencies.add(expression);
return expression.isCompileTime(dependencies);
}
@Override
@@ -19,6 +19,7 @@ package com.jpexs.decompiler.graph.model;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import java.util.Set;
/**
*
@@ -39,7 +40,7 @@ public class IntegerValueItem extends GraphTargetItem {
}
@Override
public boolean isCompileTime() {
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
return true;
}
@@ -6,6 +6,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphTargetItem;
import com.jpexs.decompiler.graph.SourceGenerator;
import java.util.List;
import java.util.Set;
/**
*
@@ -30,8 +31,12 @@ public class NotItem extends UnaryOpItem implements LogicalOpItem, Inverted {
}
@Override
public boolean isCompileTime() {
return value.isCompileTime();
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
if (dependencies.contains(value)) {
return false;
}
dependencies.add(value);
return value.isCompileTime(dependencies);
}
@Override
@@ -21,6 +21,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem;
import com.jpexs.decompiler.graph.GraphSourceItemPos;
import com.jpexs.decompiler.graph.GraphTargetItem;
import java.util.List;
import java.util.Set;
public abstract class UnaryOpItem extends GraphTargetItem implements UnaryOp {
@@ -51,8 +52,12 @@ public abstract class UnaryOpItem extends GraphTargetItem implements UnaryOp {
}
@Override
public boolean isCompileTime() {
return value.isCompileTime();
public boolean isCompileTime(Set<GraphTargetItem> dependencies) {
if (dependencies.contains(value)) {
return false;
}
dependencies.add(value);
return value.isCompileTime(dependencies);
}
@Override