KT-575 Cannot ++ a class object member
This commit is contained in:
@@ -58,6 +58,9 @@ public interface JetControlFlowBuilder {
|
|||||||
void returnNoValue(@NotNull JetElement returnExpression, @NotNull JetElement subroutine);
|
void returnNoValue(@NotNull JetElement returnExpression, @NotNull JetElement subroutine);
|
||||||
|
|
||||||
void write(@NotNull JetElement assignment, @NotNull JetElement lValue);
|
void write(@NotNull JetElement assignment, @NotNull JetElement lValue);
|
||||||
|
|
||||||
|
void declare(@NotNull JetParameter parameter);
|
||||||
|
void declare(@NotNull JetProperty property);
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
void unsupported(JetElement element);
|
void unsupported(JetElement element);
|
||||||
|
|||||||
@@ -177,4 +177,16 @@ public class JetControlFlowBuilderAdapter implements JetControlFlowBuilder {
|
|||||||
assert builder != null;
|
assert builder != null;
|
||||||
builder.write(assignment, lValue);
|
builder.write(assignment, lValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void declare(@NotNull JetParameter parameter) {
|
||||||
|
assert builder != null;
|
||||||
|
builder.declare(parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void declare(@NotNull JetProperty property) {
|
||||||
|
assert builder != null;
|
||||||
|
builder.declare(property);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -388,6 +388,7 @@ public class JetControlFlowProcessor {
|
|||||||
}
|
}
|
||||||
JetParameter catchParameter = catchClause.getCatchParameter();
|
JetParameter catchParameter = catchClause.getCatchParameter();
|
||||||
if (catchParameter != null) {
|
if (catchParameter != null) {
|
||||||
|
builder.declare(catchParameter);
|
||||||
builder.write(catchParameter, catchParameter);
|
builder.write(catchParameter, catchParameter);
|
||||||
}
|
}
|
||||||
JetExpression catchBody = catchClause.getCatchBody();
|
JetExpression catchBody = catchClause.getCatchBody();
|
||||||
@@ -458,6 +459,7 @@ public class JetControlFlowProcessor {
|
|||||||
}
|
}
|
||||||
JetParameter loopParameter = expression.getLoopParameter();
|
JetParameter loopParameter = expression.getLoopParameter();
|
||||||
if (loopParameter != null) {
|
if (loopParameter != null) {
|
||||||
|
builder.declare(loopParameter);
|
||||||
builder.write(loopParameter, loopParameter);
|
builder.write(loopParameter, loopParameter);
|
||||||
}
|
}
|
||||||
// TODO : primitive cases
|
// TODO : primitive cases
|
||||||
@@ -669,6 +671,7 @@ public class JetControlFlowProcessor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitProperty(JetProperty property) {
|
public void visitProperty(JetProperty property) {
|
||||||
|
builder.declare(property);
|
||||||
JetExpression initializer = property.getInitializer();
|
JetExpression initializer = property.getInitializer();
|
||||||
if (initializer != null) {
|
if (initializer != null) {
|
||||||
value(initializer, false);
|
value(initializer, false);
|
||||||
@@ -676,14 +679,6 @@ public class JetControlFlowProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visitPropertyAccessor(JetPropertyAccessor accessor) {
|
|
||||||
JetExpression bodyExpression = accessor.getBodyExpression();
|
|
||||||
if (bodyExpression != null) {
|
|
||||||
processLocalDeclaration(accessor, bodyExpression);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitTupleExpression(JetTupleExpression expression) {
|
public void visitTupleExpression(JetTupleExpression expression) {
|
||||||
for (JetExpression entry : expression.getEntries()) {
|
for (JetExpression entry : expression.getEntries()) {
|
||||||
@@ -838,11 +833,6 @@ public class JetControlFlowProcessor {
|
|||||||
value(declaration, inCondition);
|
value(declaration, inCondition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (JetProperty property : properties) {
|
|
||||||
for (JetPropertyAccessor accessor : property.getAccessors()) {
|
|
||||||
value(accessor, inCondition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -855,11 +845,4 @@ public class JetControlFlowProcessor {
|
|||||||
builder.unsupported(element);
|
builder.unsupported(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final CFPVisitor FOR_LOCAL_CLASSES = new CFPVisitor(false) {
|
|
||||||
@Override
|
|
||||||
public void visitNamedFunction(JetNamedFunction function) {
|
|
||||||
// Nothing
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -440,31 +440,23 @@ public class JetFlowInformationProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Collection<VariableDescriptor> collectDeclaredVariables(JetElement element) {
|
private Collection<VariableDescriptor> collectDeclaredVariables(JetElement element) {
|
||||||
|
final Pseudocode pseudocode = pseudocodeMap.get(element);
|
||||||
|
assert pseudocode != null;
|
||||||
|
|
||||||
final Set<VariableDescriptor> declaredVariables = Sets.newHashSet();
|
final Set<VariableDescriptor> declaredVariables = Sets.newHashSet();
|
||||||
element.accept(new JetTreeVisitor<Void>() {
|
JetControlFlowGraphTraverser.<Void>create(pseudocode, false).traverseAndAnalyzeInstructionGraph(new JetControlFlowGraphTraverser.InstructionDataAnalyzeStrategy<Void>() {
|
||||||
@Override
|
@Override
|
||||||
public Void visitProperty(JetProperty property, Void data) {
|
public void execute(Instruction instruction, @Nullable Void enterData, @Nullable Void exitData) {
|
||||||
DeclarationDescriptor descriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, property);
|
if (instruction instanceof VariableDeclarationInstruction) {
|
||||||
if (descriptor != null) {
|
JetDeclaration variableDeclarationElement = ((VariableDeclarationInstruction) instruction).getVariableDeclarationElement();
|
||||||
assert descriptor instanceof VariableDescriptor;
|
DeclarationDescriptor descriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, variableDeclarationElement);
|
||||||
declaredVariables.add((VariableDescriptor) descriptor);
|
|
||||||
}
|
|
||||||
return super.visitProperty(property, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Void visitForExpression(JetForExpression expression, Void data) {
|
|
||||||
JetParameter loopParameter = expression.getLoopParameter();
|
|
||||||
if (loopParameter != null) {
|
|
||||||
DeclarationDescriptor descriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, loopParameter);
|
|
||||||
if (descriptor != null) {
|
if (descriptor != null) {
|
||||||
assert descriptor instanceof VariableDescriptor;
|
assert descriptor instanceof VariableDescriptor;
|
||||||
declaredVariables.add((VariableDescriptor) descriptor);
|
declaredVariables.add((VariableDescriptor) descriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.visitForExpression(expression, data);
|
|
||||||
}
|
}
|
||||||
}, null);
|
});
|
||||||
return declaredVariables;
|
return declaredVariables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ public class InstructionVisitor {
|
|||||||
visitInstructionWithNext(instruction);
|
visitInstructionWithNext(instruction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitVariableDeclarationInstruction(VariableDeclarationInstruction instruction) {
|
||||||
|
visitInstructionWithNext(instruction);
|
||||||
|
}
|
||||||
|
|
||||||
public void visitUnconditionalJump(UnconditionalJumpInstruction instruction) {
|
public void visitUnconditionalJump(UnconditionalJumpInstruction instruction) {
|
||||||
visitJump(instruction);
|
visitJump(instruction);
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -216,6 +216,16 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
|
|||||||
add(new WriteValueInstruction(assignment, lValue));
|
add(new WriteValueInstruction(assignment, lValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void declare(@NotNull JetParameter parameter) {
|
||||||
|
add(new VariableDeclarationInstruction(parameter));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void declare(@NotNull JetProperty property) {
|
||||||
|
add(new VariableDeclarationInstruction(property));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read(@NotNull JetExpression expression) {
|
public void read(@NotNull JetExpression expression) {
|
||||||
add(new ReadValueInstruction(expression));
|
add(new ReadValueInstruction(expression));
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author svtk
|
||||||
*/
|
*/
|
||||||
public class LocalDeclarationInstruction extends InstructionWithNext {
|
public class LocalDeclarationInstruction extends InstructionWithNext {
|
||||||
|
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package org.jetbrains.jet.lang.cfg.pseudocode;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetParameter;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author svtk
|
||||||
|
*/
|
||||||
|
public class VariableDeclarationInstruction extends InstructionWithNext {
|
||||||
|
protected VariableDeclarationInstruction(@NotNull JetParameter element) {
|
||||||
|
super(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected VariableDeclarationInstruction(@NotNull JetProperty element) {
|
||||||
|
super(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JetDeclaration getVariableDeclarationElement() {
|
||||||
|
return (JetDeclaration) element;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(InstructionVisitor visitor) {
|
||||||
|
visitor.visitVariableDeclarationInstruction(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "v(" + element.getText() + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,7 +67,7 @@ public class ControlFlowAnalyzer {
|
|||||||
? propertyDescriptor.getGetter()
|
? propertyDescriptor.getGetter()
|
||||||
: propertyDescriptor.getSetter();
|
: propertyDescriptor.getSetter();
|
||||||
assert accessorDescriptor != null;
|
assert accessorDescriptor != null;
|
||||||
flowInformationProvider.checkDefiniteReturn(accessor, accessorDescriptor.getReturnType());
|
checkFunction(accessor, accessorDescriptor.getReturnType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,3 @@
|
|||||||
== get_j ==
|
|
||||||
get() = 20
|
|
||||||
---------------------
|
|
||||||
l3:
|
|
||||||
<START> NEXT:[r(20)] PREV:[]
|
|
||||||
r(20) NEXT:[<END>] PREV:[<START>]
|
|
||||||
l4:
|
|
||||||
<END> NEXT:[<SINK>] PREV:[r(20)]
|
|
||||||
error:
|
|
||||||
<ERROR> NEXT:[] PREV:[]
|
|
||||||
sink:
|
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
|
||||||
=====================
|
|
||||||
== AnonymousInitializers ==
|
== AnonymousInitializers ==
|
||||||
class AnonymousInitializers() {
|
class AnonymousInitializers() {
|
||||||
val k = 34
|
val k = 34
|
||||||
@@ -29,26 +16,31 @@ class AnonymousInitializers() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(34)] PREV:[]
|
<START> NEXT:[v(val k = 34)] PREV:[]
|
||||||
r(34) NEXT:[w(k)] PREV:[<START>]
|
v(val k = 34) NEXT:[r(34)] PREV:[<START>]
|
||||||
w(k) NEXT:[r(12)] PREV:[r(34)]
|
r(34) NEXT:[w(k)] PREV:[v(val k = 34)]
|
||||||
r(12) NEXT:[w($i)] PREV:[w(k)]
|
w(k) NEXT:[v(val i: Int)] PREV:[r(34)]
|
||||||
w($i) NEXT:[r(13)] PREV:[r(12)]
|
v(val i: Int) NEXT:[r(12)] PREV:[w(k)]
|
||||||
r(13) NEXT:[w($i)] PREV:[w($i)]
|
r(12) NEXT:[w($i)] PREV:[v(val i: Int)]
|
||||||
w($i) NEXT:[jmp?(l2)] PREV:[r(13)]
|
w($i) NEXT:[v(val j: Int get() = 20) ] PREV:[r(12)]
|
||||||
jmp?(l2) NEXT:[<END>, d(get() = 20)] PREV:[w($i)]
|
v(val j: Int
|
||||||
d(get() = 20) NEXT:[<SINK>] PREV:[jmp?(l2)]
|
get() = 20) NEXT:[r(13)] PREV:[w($i)]
|
||||||
|
r(13) NEXT:[w($i)] PREV:[v(val j: Int get() = 20) ]
|
||||||
|
w($i) NEXT:[<END>] PREV:[r(13)]
|
||||||
l1:
|
l1:
|
||||||
l2:
|
<END> NEXT:[<SINK>] PREV:[w($i)]
|
||||||
<END> NEXT:[<SINK>] PREV:[jmp?(l2)]
|
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[d(get() = 20), <END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
l3:
|
=====================
|
||||||
|
== get_j ==
|
||||||
|
get() = 20
|
||||||
|
---------------------
|
||||||
|
l0:
|
||||||
<START> NEXT:[r(20)] PREV:[]
|
<START> NEXT:[r(20)] PREV:[]
|
||||||
r(20) NEXT:[<END>] PREV:[<START>]
|
r(20) NEXT:[<END>] PREV:[<START>]
|
||||||
l4:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[r(20)]
|
<END> NEXT:[<SINK>] PREV:[r(20)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
|
|||||||
@@ -10,31 +10,32 @@ fun foo() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(Array)] PREV:[]
|
<START> NEXT:[v(val a = Array<Int>)] PREV:[]
|
||||||
r(Array) NEXT:[r(Array<Int>)] PREV:[<START>]
|
v(val a = Array<Int>) NEXT:[r(Array)] PREV:[<START>]
|
||||||
r(Array<Int>) NEXT:[w(a)] PREV:[r(Array)]
|
r(Array) NEXT:[r(Array<Int>)] PREV:[v(val a = Array<Int>)]
|
||||||
w(a) NEXT:[r(3)] PREV:[r(Array<Int>)]
|
r(Array<Int>) NEXT:[w(a)] PREV:[r(Array)]
|
||||||
r(3) NEXT:[r(4)] PREV:[w(a)]
|
w(a) NEXT:[r(3)] PREV:[r(Array<Int>)]
|
||||||
r(4) NEXT:[r(10)] PREV:[r(3)]
|
r(3) NEXT:[r(4)] PREV:[w(a)]
|
||||||
r(10) NEXT:[r(a)] PREV:[r(4)]
|
r(4) NEXT:[r(10)] PREV:[r(3)]
|
||||||
r(a) NEXT:[r(=)] PREV:[r(10)]
|
r(10) NEXT:[r(a)] PREV:[r(4)]
|
||||||
r(=) NEXT:[w(a[10])] PREV:[r(a)]
|
r(a) NEXT:[r(=)] PREV:[r(10)]
|
||||||
w(a[10]) NEXT:[r(2)] PREV:[r(=)]
|
r(=) NEXT:[w(a[10])] PREV:[r(a)]
|
||||||
r(2) NEXT:[r(10)] PREV:[w(a[10])]
|
w(a[10]) NEXT:[r(2)] PREV:[r(=)]
|
||||||
r(10) NEXT:[r(a)] PREV:[r(2)]
|
r(2) NEXT:[r(10)] PREV:[w(a[10])]
|
||||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
r(10) NEXT:[r(a)] PREV:[r(2)]
|
||||||
r(a[10]) NEXT:[r(100)] PREV:[r(a)]
|
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||||
r(100) NEXT:[r(10)] PREV:[r(a[10])]
|
r(a[10]) NEXT:[r(100)] PREV:[r(a)]
|
||||||
r(10) NEXT:[r(a)] PREV:[r(100)]
|
r(100) NEXT:[r(10)] PREV:[r(a[10])]
|
||||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
r(10) NEXT:[r(a)] PREV:[r(100)]
|
||||||
r(a[10]) NEXT:[r(1)] PREV:[r(a)]
|
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||||
r(1) NEXT:[r(+=)] PREV:[r(a[10])]
|
r(a[10]) NEXT:[r(1)] PREV:[r(a)]
|
||||||
r(+=) NEXT:[w(a[10])] PREV:[r(1)]
|
r(1) NEXT:[r(+=)] PREV:[r(a[10])]
|
||||||
w(a[10]) NEXT:[<END>] PREV:[r(+=)]
|
r(+=) NEXT:[w(a[10])] PREV:[r(1)]
|
||||||
|
w(a[10]) NEXT:[<END>] PREV:[r(+=)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w(a[10])]
|
<END> NEXT:[<SINK>] PREV:[w(a[10])]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
|
|||||||
@@ -4,13 +4,14 @@ class Test {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[<END>] PREV:[]
|
<START> NEXT:[v(var x : Int;)] PREV:[]
|
||||||
|
v(var x : Int;) NEXT:[<END>] PREV:[<START>]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[<START>]
|
<END> NEXT:[<SINK>] PREV:[v(var x : Int;)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== assignments ==
|
== assignments ==
|
||||||
fun assignments() : Unit {
|
fun assignments() : Unit {
|
||||||
@@ -28,46 +29,50 @@ fun assignments() : Unit {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(var x = 1)] PREV:[]
|
||||||
r(1) NEXT:[w(x)] PREV:[<START>]
|
v(var x = 1) NEXT:[r(1)] PREV:[<START>]
|
||||||
w(x) NEXT:[r(2)] PREV:[r(1)]
|
r(1) NEXT:[w(x)] PREV:[v(var x = 1)]
|
||||||
r(2) NEXT:[w(x)] PREV:[w(x)]
|
w(x) NEXT:[r(2)] PREV:[r(1)]
|
||||||
w(x) NEXT:[r(x)] PREV:[r(2)]
|
r(2) NEXT:[w(x)] PREV:[w(x)]
|
||||||
r(x) NEXT:[r(2)] PREV:[w(x)]
|
w(x) NEXT:[r(x)] PREV:[r(2)]
|
||||||
r(2) NEXT:[r(+=)] PREV:[r(x)]
|
r(x) NEXT:[r(2)] PREV:[w(x)]
|
||||||
r(+=) NEXT:[w(x)] PREV:[r(2)]
|
r(2) NEXT:[r(+=)] PREV:[r(x)]
|
||||||
w(x) NEXT:[r(true)] PREV:[r(+=)]
|
r(+=) NEXT:[w(x)] PREV:[r(2)]
|
||||||
r(true) NEXT:[jf(l2)] PREV:[w(x)]
|
w(x) NEXT:[r(true)] PREV:[r(+=)]
|
||||||
jf(l2) NEXT:[r(2), r(1)] PREV:[r(true)]
|
r(true) NEXT:[jf(l2)] PREV:[w(x)]
|
||||||
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
|
jf(l2) NEXT:[r(2), r(1)] PREV:[r(true)]
|
||||||
jmp(l3) NEXT:[w(x)] PREV:[r(1)]
|
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
|
||||||
|
jmp(l3) NEXT:[w(x)] PREV:[r(1)]
|
||||||
l2:
|
l2:
|
||||||
r(2) NEXT:[w(x)] PREV:[jf(l2)]
|
r(2) NEXT:[w(x)] PREV:[jf(l2)]
|
||||||
l3:
|
l3:
|
||||||
w(x) NEXT:[r(true)] PREV:[jmp(l3), r(2)]
|
w(x) NEXT:[v(val y = true && false)] PREV:[jmp(l3), r(2)]
|
||||||
r(true) NEXT:[jf(l4)] PREV:[w(x)]
|
v(val y = true && false) NEXT:[r(true)] PREV:[w(x)]
|
||||||
jf(l4) NEXT:[r(true && false), r(false)] PREV:[r(true)]
|
r(true) NEXT:[jf(l4)] PREV:[v(val y = true && false)]
|
||||||
r(false) NEXT:[r(true && false)] PREV:[jf(l4)]
|
jf(l4) NEXT:[r(true && false), r(false)] PREV:[r(true)]
|
||||||
|
r(false) NEXT:[r(true && false)] PREV:[jf(l4)]
|
||||||
l4:
|
l4:
|
||||||
r(true && false) NEXT:[w(y)] PREV:[jf(l4), r(false)]
|
r(true && false) NEXT:[w(y)] PREV:[jf(l4), r(false)]
|
||||||
w(y) NEXT:[r(false)] PREV:[r(true && false)]
|
w(y) NEXT:[v(val z = false && true)] PREV:[r(true && false)]
|
||||||
r(false) NEXT:[jf(l5)] PREV:[w(y)]
|
v(val z = false && true) NEXT:[r(false)] PREV:[w(y)]
|
||||||
jf(l5) NEXT:[r(false && true), r(true)] PREV:[r(false)]
|
r(false) NEXT:[jf(l5)] PREV:[v(val z = false && true)]
|
||||||
r(true) NEXT:[r(false && true)] PREV:[jf(l5)]
|
jf(l5) NEXT:[r(false && true), r(true)] PREV:[r(false)]
|
||||||
|
r(true) NEXT:[r(false && true)] PREV:[jf(l5)]
|
||||||
l5:
|
l5:
|
||||||
r(false && true) NEXT:[w(z)] PREV:[jf(l5), r(true)]
|
r(false && true) NEXT:[w(z)] PREV:[jf(l5), r(true)]
|
||||||
w(z) NEXT:[r(Test)] PREV:[r(false && true)]
|
w(z) NEXT:[v(val t = Test())] PREV:[r(false && true)]
|
||||||
r(Test) NEXT:[r(Test())] PREV:[w(z)]
|
v(val t = Test()) NEXT:[r(Test)] PREV:[w(z)]
|
||||||
r(Test()) NEXT:[w(t)] PREV:[r(Test)]
|
r(Test) NEXT:[r(Test())] PREV:[v(val t = Test())]
|
||||||
w(t) NEXT:[r(1)] PREV:[r(Test())]
|
r(Test()) NEXT:[w(t)] PREV:[r(Test)]
|
||||||
r(1) NEXT:[r(t)] PREV:[w(t)]
|
w(t) NEXT:[r(1)] PREV:[r(Test())]
|
||||||
r(t) NEXT:[r(=)] PREV:[r(1)]
|
r(1) NEXT:[r(t)] PREV:[w(t)]
|
||||||
r(=) NEXT:[w(t.x)] PREV:[r(t)]
|
r(t) NEXT:[r(=)] PREV:[r(1)]
|
||||||
w(t.x) NEXT:[<END>] PREV:[r(=)]
|
r(=) NEXT:[w(t.x)] PREV:[r(t)]
|
||||||
|
w(t.x) NEXT:[<END>] PREV:[r(=)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w(t.x)]
|
<END> NEXT:[<SINK>] PREV:[w(t.x)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
|
|||||||
@@ -392,8 +392,9 @@ l0:
|
|||||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||||
|
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||||
l3:
|
l3:
|
||||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||||
l4:
|
l4:
|
||||||
@@ -442,8 +443,9 @@ l0:
|
|||||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||||
|
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||||
l3:
|
l3:
|
||||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||||
l4:
|
l4:
|
||||||
@@ -491,8 +493,9 @@ l0:
|
|||||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||||
|
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||||
l3:
|
l3:
|
||||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||||
l4:
|
l4:
|
||||||
@@ -588,33 +591,34 @@ fun t13() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||||
l3:
|
l3:
|
||||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||||
l2:
|
l2:
|
||||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||||
|
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||||
l5:
|
l5:
|
||||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(2))]
|
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(2))]
|
||||||
l4:
|
l4:
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== t14 ==
|
== t14 ==
|
||||||
fun t14() : Int {
|
fun t14() : Int {
|
||||||
@@ -627,27 +631,28 @@ fun t14() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||||
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
||||||
l3:
|
l3:
|
||||||
R jmp(l4) NEXT:[<END>] PREV:[]
|
R jmp(l4) NEXT:[<END>] PREV:[]
|
||||||
l2:
|
l2:
|
||||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||||
|
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||||
l5:
|
l5:
|
||||||
jmp(l4) NEXT:[<END>] PREV:[r(doSmth(2))]
|
jmp(l4) NEXT:[<END>] PREV:[r(doSmth(2))]
|
||||||
l1:
|
l1:
|
||||||
l4:
|
l4:
|
||||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, jmp(l4)]
|
<END> NEXT:[<SINK>] PREV:[ret(*) l1, jmp(l4)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== t15 ==
|
== t15 ==
|
||||||
fun t15() : Int {
|
fun t15() : Int {
|
||||||
@@ -663,35 +668,36 @@ fun t15() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||||
l3:
|
l3:
|
||||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||||
l2:
|
l2:
|
||||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||||
|
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||||
l5:
|
l5:
|
||||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||||
l4:
|
l4:
|
||||||
R r(3) NEXT:[r(doSmth)] PREV:[]
|
R r(3) NEXT:[r(doSmth)] PREV:[]
|
||||||
R r(doSmth) NEXT:[r(doSmth(3))] PREV:[]
|
R r(doSmth) NEXT:[r(doSmth(3))] PREV:[]
|
||||||
R r(doSmth(3)) NEXT:[<END>] PREV:[]
|
R r(doSmth(3)) NEXT:[<END>] PREV:[]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, ret(*) l1]
|
<END> NEXT:[<SINK>] PREV:[ret(*) l1, ret(*) l1]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== t16 ==
|
== t16 ==
|
||||||
fun t16() : Int {
|
fun t16() : Int {
|
||||||
@@ -707,33 +713,34 @@ fun t16() : Int {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||||
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
||||||
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
||||||
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||||
l3:
|
l3:
|
||||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(1))]
|
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(1))]
|
||||||
l2:
|
l2:
|
||||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||||
|
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||||
l5:
|
l5:
|
||||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||||
l4:
|
l4:
|
||||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== doSmth ==
|
== doSmth ==
|
||||||
fun doSmth(i: Int) {
|
fun doSmth(i: Int) {
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ l0:
|
|||||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
r(1) NEXT:[r(2)] PREV:[<START>]
|
||||||
r(2) NEXT:[r(..)] PREV:[r(1)]
|
r(2) NEXT:[r(..)] PREV:[r(1)]
|
||||||
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
||||||
r(1..2) NEXT:[w(i)] PREV:[r(..)]
|
r(1..2) NEXT:[v(i)] PREV:[r(..)]
|
||||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..2)]
|
v(i) NEXT:[w(i)] PREV:[r(1..2)]
|
||||||
|
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||||
l3:
|
l3:
|
||||||
jmp?(l2) NEXT:[read (Unit), r(i)] PREV:[w(i)]
|
jmp?(l2) NEXT:[read (Unit), r(i)] PREV:[w(i)]
|
||||||
l4:
|
l4:
|
||||||
|
|||||||
@@ -17,36 +17,38 @@ fun t1(b: Boolean) {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(b)] PREV:[]
|
<START> NEXT:[v(var u: String)] PREV:[]
|
||||||
r(b) NEXT:[jf(l2)] PREV:[<START>]
|
v(var u: String) NEXT:[r(b)] PREV:[<START>]
|
||||||
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
|
r(b) NEXT:[jf(l2)] PREV:[v(var u: String)]
|
||||||
r("s") NEXT:[w(u)] PREV:[jf(l2)]
|
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
|
||||||
w(u) NEXT:[jmp(l3)] PREV:[r("s")]
|
r("s") NEXT:[w(u)] PREV:[jf(l2)]
|
||||||
jmp(l3) NEXT:[r(u)] PREV:[w(u)]
|
w(u) NEXT:[jmp(l3)] PREV:[r("s")]
|
||||||
|
jmp(l3) NEXT:[r(u)] PREV:[w(u)]
|
||||||
l2:
|
l2:
|
||||||
read (Unit) NEXT:[r(u)] PREV:[jf(l2)]
|
read (Unit) NEXT:[r(u)] PREV:[jf(l2)]
|
||||||
l3:
|
l3:
|
||||||
r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
||||||
r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)]
|
r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)]
|
||||||
r(doSmth(u)) NEXT:[r(b)] PREV:[r(doSmth)]
|
r(doSmth(u)) NEXT:[v(var r: String)] PREV:[r(doSmth)]
|
||||||
r(b) NEXT:[jf(l4)] PREV:[r(doSmth(u))]
|
v(var r: String) NEXT:[r(b)] PREV:[r(doSmth(u))]
|
||||||
jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)]
|
r(b) NEXT:[jf(l4)] PREV:[v(var r: String)]
|
||||||
r("s") NEXT:[w(r)] PREV:[jf(l4)]
|
jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)]
|
||||||
w(r) NEXT:[jmp(l5)] PREV:[r("s")]
|
r("s") NEXT:[w(r)] PREV:[jf(l4)]
|
||||||
jmp(l5) NEXT:[r(r)] PREV:[w(r)]
|
w(r) NEXT:[jmp(l5)] PREV:[r("s")]
|
||||||
|
jmp(l5) NEXT:[r(r)] PREV:[w(r)]
|
||||||
l4:
|
l4:
|
||||||
r("t") NEXT:[w(r)] PREV:[jf(l4)]
|
r("t") NEXT:[w(r)] PREV:[jf(l4)]
|
||||||
w(r) NEXT:[r(r)] PREV:[r("t")]
|
w(r) NEXT:[r(r)] PREV:[r("t")]
|
||||||
l5:
|
l5:
|
||||||
r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)]
|
r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)]
|
||||||
r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)]
|
r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)]
|
||||||
r(doSmth(r)) NEXT:[<END>] PREV:[r(doSmth)]
|
r(doSmth(r)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(r))]
|
<END> NEXT:[<SINK>] PREV:[r(doSmth(r))]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== t2 ==
|
== t2 ==
|
||||||
fun t2(b: Boolean) {
|
fun t2(b: Boolean) {
|
||||||
@@ -61,8 +63,9 @@ fun t2(b: Boolean) {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(3)] PREV:[]
|
<START> NEXT:[v(val i = 3)] PREV:[]
|
||||||
r(3) NEXT:[w(i)] PREV:[<START>]
|
v(val i = 3) NEXT:[r(3)] PREV:[<START>]
|
||||||
|
r(3) NEXT:[w(i)] PREV:[v(val i = 3)]
|
||||||
w(i) NEXT:[r(b)] PREV:[r(3)]
|
w(i) NEXT:[r(b)] PREV:[r(3)]
|
||||||
r(b) NEXT:[jf(l2)] PREV:[w(i)]
|
r(b) NEXT:[jf(l2)] PREV:[w(i)]
|
||||||
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
|
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
|
||||||
|
|||||||
@@ -18,15 +18,16 @@ class C() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val a: Int = 1)] PREV:[]
|
||||||
r(1) NEXT:[w(a)] PREV:[<START>]
|
v(val a: Int = 1) NEXT:[r(1)] PREV:[<START>]
|
||||||
w(a) NEXT:[<END>] PREV:[r(1)]
|
r(1) NEXT:[w(a)] PREV:[v(val a: Int = 1)]
|
||||||
|
w(a) NEXT:[<END>] PREV:[r(1)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== null ==
|
== null ==
|
||||||
object {
|
object {
|
||||||
@@ -44,15 +45,16 @@ object {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val x : Int)] PREV:[]
|
||||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
v(val x : Int) NEXT:[r(1)] PREV:[<START>]
|
||||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
r(1) NEXT:[w($x)] PREV:[v(val x : Int)]
|
||||||
|
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== O ==
|
== O ==
|
||||||
object O {
|
object O {
|
||||||
@@ -63,15 +65,16 @@ object O {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val x : Int)] PREV:[]
|
||||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
v(val x : Int) NEXT:[r(1)] PREV:[<START>]
|
||||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
r(1) NEXT:[w($x)] PREV:[v(val x : Int)]
|
||||||
|
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== doSmth ==
|
== doSmth ==
|
||||||
fun doSmth(i: Int) {}
|
fun doSmth(i: Int) {}
|
||||||
@@ -97,8 +100,15 @@ fun test1() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val a = object { val x : I..)] PREV:[]
|
||||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
v(val a = object {
|
||||||
|
val x : Int
|
||||||
|
{
|
||||||
|
$x = 1
|
||||||
|
}
|
||||||
|
}) NEXT:[v(val x : Int)] PREV:[<START>]
|
||||||
|
v(val x : Int) NEXT:[r(1)] PREV:[v(val a = object { val x : I..)]
|
||||||
|
r(1) NEXT:[w($x)] PREV:[v(val x : Int)]
|
||||||
w($x) NEXT:[r(object { val x : Int { $x ..)] PREV:[r(1)]
|
w($x) NEXT:[r(object { val x : Int { $x ..)] PREV:[r(1)]
|
||||||
r(object {
|
r(object {
|
||||||
val x : Int
|
val x : Int
|
||||||
@@ -123,21 +133,26 @@ fun test2() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val b = 1)] PREV:[]
|
||||||
r(1) NEXT:[w(b)] PREV:[<START>]
|
v(val b = 1) NEXT:[r(1)] PREV:[<START>]
|
||||||
w(b) NEXT:[r(b)] PREV:[r(1)]
|
r(1) NEXT:[w(b)] PREV:[v(val b = 1)]
|
||||||
r(b) NEXT:[w(x)] PREV:[w(b)]
|
w(b) NEXT:[v(val a = object { val x = b..)] PREV:[r(1)]
|
||||||
w(x) NEXT:[r(object { val x = b }) ] PREV:[r(b)]
|
v(val a = object {
|
||||||
r(object {
|
val x = b
|
||||||
val x = b
|
}) NEXT:[v(val x = b)] PREV:[w(b)]
|
||||||
}) NEXT:[w(a)] PREV:[w(x)]
|
v(val x = b) NEXT:[r(b)] PREV:[v(val a = object { val x = b..)]
|
||||||
w(a) NEXT:[<END>] PREV:[r(object { val x = b }) ]
|
r(b) NEXT:[w(x)] PREV:[v(val x = b)]
|
||||||
|
w(x) NEXT:[r(object { val x = b }) ] PREV:[r(b)]
|
||||||
|
r(object {
|
||||||
|
val x = b
|
||||||
|
}) NEXT:[w(a)] PREV:[w(x)]
|
||||||
|
w(a) NEXT:[<END>] PREV:[r(object { val x = b }) ]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
== inner_bar ==
|
== inner_bar ==
|
||||||
fun inner_bar() {
|
fun inner_bar() {
|
||||||
@@ -166,8 +181,15 @@ fun test3() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
<START> NEXT:[v(val a = object { val y : I..)] PREV:[]
|
||||||
jmp?(l2) NEXT:[r(object { val y : Int fun i..), d(fun inner_bar() { y = 10 }) ] PREV:[<START>]
|
v(val a = object {
|
||||||
|
val y : Int
|
||||||
|
fun inner_bar() {
|
||||||
|
y = 10
|
||||||
|
}
|
||||||
|
}) NEXT:[v(val y : Int)] PREV:[<START>]
|
||||||
|
v(val y : Int) NEXT:[jmp?(l2)] PREV:[v(val a = object { val y : I..)]
|
||||||
|
jmp?(l2) NEXT:[r(object { val y : Int fun i..), d(fun inner_bar() { y = 10 }) ] PREV:[v(val y : Int)]
|
||||||
d(fun inner_bar() {
|
d(fun inner_bar() {
|
||||||
y = 10
|
y = 10
|
||||||
}) NEXT:[<SINK>] PREV:[jmp?(l2)]
|
}) NEXT:[<SINK>] PREV:[jmp?(l2)]
|
||||||
@@ -227,8 +249,20 @@ fun test4() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val a = object { val x : I..)] PREV:[]
|
||||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
v(val a = object {
|
||||||
|
val x : Int
|
||||||
|
val y : Int
|
||||||
|
{
|
||||||
|
$x = 1
|
||||||
|
}
|
||||||
|
fun ggg() {
|
||||||
|
y = 10
|
||||||
|
}
|
||||||
|
}) NEXT:[v(val x : Int)] PREV:[<START>]
|
||||||
|
v(val x : Int) NEXT:[v(val y : Int)] PREV:[v(val a = object { val x : I..)]
|
||||||
|
v(val y : Int) NEXT:[r(1)] PREV:[v(val x : Int)]
|
||||||
|
r(1) NEXT:[w($x)] PREV:[v(val y : Int)]
|
||||||
w($x) NEXT:[jmp?(l2)] PREV:[r(1)]
|
w($x) NEXT:[jmp?(l2)] PREV:[r(1)]
|
||||||
jmp?(l2) NEXT:[r(object { val x : Int val y..), d(fun ggg() { y = 10 }) ] PREV:[w($x)]
|
jmp?(l2) NEXT:[r(object { val x : Int val y..), d(fun ggg() { y = 10 }) ] PREV:[w($x)]
|
||||||
d(fun ggg() {
|
d(fun ggg() {
|
||||||
@@ -312,8 +346,21 @@ fun test5() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val a = object { var x = 1..)] PREV:[]
|
||||||
r(1) NEXT:[w(x)] PREV:[<START>]
|
v(val a = object {
|
||||||
|
var x = 1
|
||||||
|
{
|
||||||
|
$x = 2
|
||||||
|
}
|
||||||
|
fun foo() {
|
||||||
|
x = 3
|
||||||
|
}
|
||||||
|
fun bar() {
|
||||||
|
x = 4
|
||||||
|
}
|
||||||
|
}) NEXT:[v(var x = 1)] PREV:[<START>]
|
||||||
|
v(var x = 1) NEXT:[r(1)] PREV:[v(val a = object { var x = 1..)]
|
||||||
|
r(1) NEXT:[w(x)] PREV:[v(var x = 1)]
|
||||||
w(x) NEXT:[r(2)] PREV:[r(1)]
|
w(x) NEXT:[r(2)] PREV:[r(1)]
|
||||||
r(2) NEXT:[w($x)] PREV:[w(x)]
|
r(2) NEXT:[w($x)] PREV:[w(x)]
|
||||||
w($x) NEXT:[jmp?(l2)] PREV:[r(2)]
|
w($x) NEXT:[jmp?(l2)] PREV:[r(2)]
|
||||||
@@ -374,16 +421,17 @@ fun foo() {
|
|||||||
}
|
}
|
||||||
---------------------
|
---------------------
|
||||||
l0:
|
l0:
|
||||||
<START> NEXT:[r(1)] PREV:[]
|
<START> NEXT:[v(val b : Int = 1)] PREV:[]
|
||||||
r(1) NEXT:[w(b)] PREV:[<START>]
|
v(val b : Int = 1) NEXT:[r(1)] PREV:[<START>]
|
||||||
w(b) NEXT:[r(b)] PREV:[r(1)]
|
r(1) NEXT:[w(b)] PREV:[v(val b : Int = 1)]
|
||||||
r(b) NEXT:[r(doSmth)] PREV:[w(b)]
|
w(b) NEXT:[r(b)] PREV:[r(1)]
|
||||||
r(doSmth) NEXT:[r(doSmth(b))] PREV:[r(b)]
|
r(b) NEXT:[r(doSmth)] PREV:[w(b)]
|
||||||
r(doSmth(b)) NEXT:[<END>] PREV:[r(doSmth)]
|
r(doSmth) NEXT:[r(doSmth(b))] PREV:[r(b)]
|
||||||
|
r(doSmth(b)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||||
l1:
|
l1:
|
||||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(b))]
|
<END> NEXT:[<SINK>] PREV:[r(doSmth(b))]
|
||||||
error:
|
error:
|
||||||
<ERROR> NEXT:[] PREV:[]
|
<ERROR> NEXT:[] PREV:[]
|
||||||
sink:
|
sink:
|
||||||
<SINK> NEXT:[] PREV:[<END>]
|
<SINK> NEXT:[] PREV:[<END>]
|
||||||
=====================
|
=====================
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// KT-575 Cannot ++ a class object member
|
||||||
|
|
||||||
|
namespace kt575
|
||||||
|
|
||||||
|
class Creature() {
|
||||||
|
class object {
|
||||||
|
var numCreated : Int = 0
|
||||||
|
private set
|
||||||
|
}
|
||||||
|
|
||||||
|
object A {
|
||||||
|
var bbb : Int
|
||||||
|
|
||||||
|
{
|
||||||
|
$bbb = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class C() {
|
||||||
|
var ccc : Int
|
||||||
|
|
||||||
|
{
|
||||||
|
$ccc = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Creature.numCreated++ // Error
|
||||||
|
A.bbb++
|
||||||
|
C().ccc++
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user