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 write(@NotNull JetElement assignment, @NotNull JetElement lValue);
|
||||
|
||||
void declare(@NotNull JetParameter parameter);
|
||||
void declare(@NotNull JetProperty property);
|
||||
|
||||
// Other
|
||||
void unsupported(JetElement element);
|
||||
|
||||
@@ -177,4 +177,16 @@ public class JetControlFlowBuilderAdapter implements JetControlFlowBuilder {
|
||||
assert builder != null;
|
||||
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();
|
||||
if (catchParameter != null) {
|
||||
builder.declare(catchParameter);
|
||||
builder.write(catchParameter, catchParameter);
|
||||
}
|
||||
JetExpression catchBody = catchClause.getCatchBody();
|
||||
@@ -458,6 +459,7 @@ public class JetControlFlowProcessor {
|
||||
}
|
||||
JetParameter loopParameter = expression.getLoopParameter();
|
||||
if (loopParameter != null) {
|
||||
builder.declare(loopParameter);
|
||||
builder.write(loopParameter, loopParameter);
|
||||
}
|
||||
// TODO : primitive cases
|
||||
@@ -669,6 +671,7 @@ public class JetControlFlowProcessor {
|
||||
|
||||
@Override
|
||||
public void visitProperty(JetProperty property) {
|
||||
builder.declare(property);
|
||||
JetExpression initializer = property.getInitializer();
|
||||
if (initializer != null) {
|
||||
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
|
||||
public void visitTupleExpression(JetTupleExpression expression) {
|
||||
for (JetExpression entry : expression.getEntries()) {
|
||||
@@ -838,11 +833,6 @@ public class JetControlFlowProcessor {
|
||||
value(declaration, inCondition);
|
||||
}
|
||||
}
|
||||
for (JetProperty property : properties) {
|
||||
for (JetPropertyAccessor accessor : property.getAccessors()) {
|
||||
value(accessor, inCondition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -855,11 +845,4 @@ public class JetControlFlowProcessor {
|
||||
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) {
|
||||
final Pseudocode pseudocode = pseudocodeMap.get(element);
|
||||
assert pseudocode != null;
|
||||
|
||||
final Set<VariableDescriptor> declaredVariables = Sets.newHashSet();
|
||||
element.accept(new JetTreeVisitor<Void>() {
|
||||
JetControlFlowGraphTraverser.<Void>create(pseudocode, false).traverseAndAnalyzeInstructionGraph(new JetControlFlowGraphTraverser.InstructionDataAnalyzeStrategy<Void>() {
|
||||
@Override
|
||||
public Void visitProperty(JetProperty property, Void data) {
|
||||
DeclarationDescriptor descriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, property);
|
||||
if (descriptor != null) {
|
||||
assert descriptor instanceof VariableDescriptor;
|
||||
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);
|
||||
public void execute(Instruction instruction, @Nullable Void enterData, @Nullable Void exitData) {
|
||||
if (instruction instanceof VariableDeclarationInstruction) {
|
||||
JetDeclaration variableDeclarationElement = ((VariableDeclarationInstruction) instruction).getVariableDeclarationElement();
|
||||
DeclarationDescriptor descriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, variableDeclarationElement);
|
||||
if (descriptor != null) {
|
||||
assert descriptor instanceof VariableDescriptor;
|
||||
declaredVariables.add((VariableDescriptor) descriptor);
|
||||
}
|
||||
}
|
||||
return super.visitForExpression(expression, data);
|
||||
}
|
||||
}, null);
|
||||
});
|
||||
return declaredVariables;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@ public class InstructionVisitor {
|
||||
visitInstructionWithNext(instruction);
|
||||
}
|
||||
|
||||
public void visitVariableDeclarationInstruction(VariableDeclarationInstruction instruction) {
|
||||
visitInstructionWithNext(instruction);
|
||||
}
|
||||
|
||||
public void visitUnconditionalJump(UnconditionalJumpInstruction instruction) {
|
||||
visitJump(instruction);
|
||||
}
|
||||
|
||||
+10
@@ -216,6 +216,16 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
|
||||
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
|
||||
public void read(@NotNull JetExpression expression) {
|
||||
add(new ReadValueInstruction(expression));
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
* @author svtk
|
||||
*/
|
||||
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.getSetter();
|
||||
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 ==
|
||||
class AnonymousInitializers() {
|
||||
val k = 34
|
||||
@@ -29,26 +16,31 @@ class AnonymousInitializers() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(34)] PREV:[]
|
||||
r(34) NEXT:[w(k)] PREV:[<START>]
|
||||
w(k) NEXT:[r(12)] PREV:[r(34)]
|
||||
r(12) NEXT:[w($i)] PREV:[w(k)]
|
||||
w($i) NEXT:[r(13)] PREV:[r(12)]
|
||||
r(13) NEXT:[w($i)] PREV:[w($i)]
|
||||
w($i) NEXT:[jmp?(l2)] PREV:[r(13)]
|
||||
jmp?(l2) NEXT:[<END>, d(get() = 20)] PREV:[w($i)]
|
||||
d(get() = 20) NEXT:[<SINK>] PREV:[jmp?(l2)]
|
||||
<START> NEXT:[v(val k = 34)] PREV:[]
|
||||
v(val k = 34) NEXT:[r(34)] PREV:[<START>]
|
||||
r(34) NEXT:[w(k)] PREV:[v(val k = 34)]
|
||||
w(k) NEXT:[v(val i: Int)] PREV:[r(34)]
|
||||
v(val i: Int) NEXT:[r(12)] PREV:[w(k)]
|
||||
r(12) NEXT:[w($i)] PREV:[v(val i: Int)]
|
||||
w($i) NEXT:[v(val j: Int get() = 20) ] PREV:[r(12)]
|
||||
v(val j: Int
|
||||
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:
|
||||
l2:
|
||||
<END> NEXT:[<SINK>] PREV:[jmp?(l2)]
|
||||
<END> NEXT:[<SINK>] PREV:[w($i)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[d(get() = 20), <END>]
|
||||
l3:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== get_j ==
|
||||
get() = 20
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(20)] PREV:[]
|
||||
r(20) NEXT:[<END>] PREV:[<START>]
|
||||
l4:
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[r(20)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
|
||||
@@ -10,31 +10,32 @@ fun foo() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(Array)] PREV:[]
|
||||
r(Array) NEXT:[r(Array<Int>)] PREV:[<START>]
|
||||
r(Array<Int>) NEXT:[w(a)] PREV:[r(Array)]
|
||||
w(a) NEXT:[r(3)] PREV:[r(Array<Int>)]
|
||||
r(3) NEXT:[r(4)] PREV:[w(a)]
|
||||
r(4) NEXT:[r(10)] PREV:[r(3)]
|
||||
r(10) NEXT:[r(a)] PREV:[r(4)]
|
||||
r(a) NEXT:[r(=)] PREV:[r(10)]
|
||||
r(=) NEXT:[w(a[10])] PREV:[r(a)]
|
||||
w(a[10]) NEXT:[r(2)] PREV:[r(=)]
|
||||
r(2) NEXT:[r(10)] PREV:[w(a[10])]
|
||||
r(10) NEXT:[r(a)] PREV:[r(2)]
|
||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||
r(a[10]) NEXT:[r(100)] PREV:[r(a)]
|
||||
r(100) NEXT:[r(10)] PREV:[r(a[10])]
|
||||
r(10) NEXT:[r(a)] PREV:[r(100)]
|
||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||
r(a[10]) NEXT:[r(1)] PREV:[r(a)]
|
||||
r(1) NEXT:[r(+=)] PREV:[r(a[10])]
|
||||
r(+=) NEXT:[w(a[10])] PREV:[r(1)]
|
||||
w(a[10]) NEXT:[<END>] PREV:[r(+=)]
|
||||
<START> NEXT:[v(val a = Array<Int>)] PREV:[]
|
||||
v(val a = Array<Int>) NEXT:[r(Array)] PREV:[<START>]
|
||||
r(Array) NEXT:[r(Array<Int>)] PREV:[v(val a = Array<Int>)]
|
||||
r(Array<Int>) NEXT:[w(a)] PREV:[r(Array)]
|
||||
w(a) NEXT:[r(3)] PREV:[r(Array<Int>)]
|
||||
r(3) NEXT:[r(4)] PREV:[w(a)]
|
||||
r(4) NEXT:[r(10)] PREV:[r(3)]
|
||||
r(10) NEXT:[r(a)] PREV:[r(4)]
|
||||
r(a) NEXT:[r(=)] PREV:[r(10)]
|
||||
r(=) NEXT:[w(a[10])] PREV:[r(a)]
|
||||
w(a[10]) NEXT:[r(2)] PREV:[r(=)]
|
||||
r(2) NEXT:[r(10)] PREV:[w(a[10])]
|
||||
r(10) NEXT:[r(a)] PREV:[r(2)]
|
||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||
r(a[10]) NEXT:[r(100)] PREV:[r(a)]
|
||||
r(100) NEXT:[r(10)] PREV:[r(a[10])]
|
||||
r(10) NEXT:[r(a)] PREV:[r(100)]
|
||||
r(a) NEXT:[r(a[10])] PREV:[r(10)]
|
||||
r(a[10]) NEXT:[r(1)] PREV:[r(a)]
|
||||
r(1) NEXT:[r(+=)] PREV:[r(a[10])]
|
||||
r(+=) NEXT:[w(a[10])] PREV:[r(1)]
|
||||
w(a[10]) NEXT:[<END>] PREV:[r(+=)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[w(a[10])]
|
||||
<END> NEXT:[<SINK>] PREV:[w(a[10])]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
|
||||
@@ -4,13 +4,14 @@ class Test {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[<END>] PREV:[]
|
||||
<START> NEXT:[v(var x : Int;)] PREV:[]
|
||||
v(var x : Int;) NEXT:[<END>] PREV:[<START>]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[<START>]
|
||||
<END> NEXT:[<SINK>] PREV:[v(var x : Int;)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== assignments ==
|
||||
fun assignments() : Unit {
|
||||
@@ -28,46 +29,50 @@ fun assignments() : Unit {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w(x)] PREV:[<START>]
|
||||
w(x) NEXT:[r(2)] PREV:[r(1)]
|
||||
r(2) NEXT:[w(x)] PREV:[w(x)]
|
||||
w(x) NEXT:[r(x)] PREV:[r(2)]
|
||||
r(x) NEXT:[r(2)] PREV:[w(x)]
|
||||
r(2) NEXT:[r(+=)] PREV:[r(x)]
|
||||
r(+=) NEXT:[w(x)] PREV:[r(2)]
|
||||
w(x) NEXT:[r(true)] PREV:[r(+=)]
|
||||
r(true) NEXT:[jf(l2)] PREV:[w(x)]
|
||||
jf(l2) NEXT:[r(2), r(1)] PREV:[r(true)]
|
||||
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
|
||||
jmp(l3) NEXT:[w(x)] PREV:[r(1)]
|
||||
<START> NEXT:[v(var x = 1)] PREV:[]
|
||||
v(var x = 1) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w(x)] PREV:[v(var x = 1)]
|
||||
w(x) NEXT:[r(2)] PREV:[r(1)]
|
||||
r(2) NEXT:[w(x)] PREV:[w(x)]
|
||||
w(x) NEXT:[r(x)] PREV:[r(2)]
|
||||
r(x) NEXT:[r(2)] PREV:[w(x)]
|
||||
r(2) NEXT:[r(+=)] PREV:[r(x)]
|
||||
r(+=) NEXT:[w(x)] PREV:[r(2)]
|
||||
w(x) NEXT:[r(true)] PREV:[r(+=)]
|
||||
r(true) NEXT:[jf(l2)] PREV:[w(x)]
|
||||
jf(l2) NEXT:[r(2), r(1)] PREV:[r(true)]
|
||||
r(1) NEXT:[jmp(l3)] PREV:[jf(l2)]
|
||||
jmp(l3) NEXT:[w(x)] PREV:[r(1)]
|
||||
l2:
|
||||
r(2) NEXT:[w(x)] PREV:[jf(l2)]
|
||||
r(2) NEXT:[w(x)] PREV:[jf(l2)]
|
||||
l3:
|
||||
w(x) NEXT:[r(true)] PREV:[jmp(l3), r(2)]
|
||||
r(true) NEXT:[jf(l4)] PREV:[w(x)]
|
||||
jf(l4) NEXT:[r(true && false), r(false)] PREV:[r(true)]
|
||||
r(false) NEXT:[r(true && false)] PREV:[jf(l4)]
|
||||
w(x) NEXT:[v(val y = true && false)] PREV:[jmp(l3), r(2)]
|
||||
v(val y = true && false) NEXT:[r(true)] PREV:[w(x)]
|
||||
r(true) NEXT:[jf(l4)] PREV:[v(val y = true && false)]
|
||||
jf(l4) NEXT:[r(true && false), r(false)] PREV:[r(true)]
|
||||
r(false) NEXT:[r(true && false)] PREV:[jf(l4)]
|
||||
l4:
|
||||
r(true && false) NEXT:[w(y)] PREV:[jf(l4), r(false)]
|
||||
w(y) NEXT:[r(false)] PREV:[r(true && false)]
|
||||
r(false) NEXT:[jf(l5)] PREV:[w(y)]
|
||||
jf(l5) NEXT:[r(false && true), r(true)] PREV:[r(false)]
|
||||
r(true) NEXT:[r(false && true)] PREV:[jf(l5)]
|
||||
r(true && false) NEXT:[w(y)] PREV:[jf(l4), r(false)]
|
||||
w(y) NEXT:[v(val z = false && true)] PREV:[r(true && false)]
|
||||
v(val z = false && true) NEXT:[r(false)] PREV:[w(y)]
|
||||
r(false) NEXT:[jf(l5)] PREV:[v(val z = false && true)]
|
||||
jf(l5) NEXT:[r(false && true), r(true)] PREV:[r(false)]
|
||||
r(true) NEXT:[r(false && true)] PREV:[jf(l5)]
|
||||
l5:
|
||||
r(false && true) NEXT:[w(z)] PREV:[jf(l5), r(true)]
|
||||
w(z) NEXT:[r(Test)] PREV:[r(false && true)]
|
||||
r(Test) NEXT:[r(Test())] PREV:[w(z)]
|
||||
r(Test()) NEXT:[w(t)] PREV:[r(Test)]
|
||||
w(t) NEXT:[r(1)] PREV:[r(Test())]
|
||||
r(1) NEXT:[r(t)] PREV:[w(t)]
|
||||
r(t) NEXT:[r(=)] PREV:[r(1)]
|
||||
r(=) NEXT:[w(t.x)] PREV:[r(t)]
|
||||
w(t.x) NEXT:[<END>] PREV:[r(=)]
|
||||
r(false && true) NEXT:[w(z)] PREV:[jf(l5), r(true)]
|
||||
w(z) NEXT:[v(val t = Test())] PREV:[r(false && true)]
|
||||
v(val t = Test()) NEXT:[r(Test)] PREV:[w(z)]
|
||||
r(Test) NEXT:[r(Test())] PREV:[v(val t = Test())]
|
||||
r(Test()) NEXT:[w(t)] PREV:[r(Test)]
|
||||
w(t) NEXT:[r(1)] PREV:[r(Test())]
|
||||
r(1) NEXT:[r(t)] PREV:[w(t)]
|
||||
r(t) NEXT:[r(=)] PREV:[r(1)]
|
||||
r(=) NEXT:[w(t.x)] PREV:[r(t)]
|
||||
w(t.x) NEXT:[<END>] PREV:[r(=)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[w(t.x)]
|
||||
<END> NEXT:[<SINK>] PREV:[w(t.x)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
|
||||
@@ -392,8 +392,9 @@ l0:
|
||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||
l3:
|
||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||
l4:
|
||||
@@ -442,8 +443,9 @@ l0:
|
||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||
l3:
|
||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||
l4:
|
||||
@@ -491,8 +493,9 @@ l0:
|
||||
r(1) NEXT:[r(a)] PREV:[<START>]
|
||||
r(a) NEXT:[r(..)] PREV:[r(1)]
|
||||
r(..) NEXT:[r(1..a)] PREV:[r(a)]
|
||||
r(1..a) NEXT:[w(i)] PREV:[r(..)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..a)]
|
||||
r(1..a) NEXT:[v(i)] PREV:[r(..)]
|
||||
v(i) NEXT:[w(i)] PREV:[r(1..a)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||
l3:
|
||||
jmp?(l2) NEXT:[read (Unit), r(1)] PREV:[w(i)]
|
||||
l4:
|
||||
@@ -588,33 +591,34 @@ fun t13() : Int {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
l3:
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
l2:
|
||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
l5:
|
||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(2))]
|
||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(2))]
|
||||
l4:
|
||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== t14 ==
|
||||
fun t14() : Int {
|
||||
@@ -627,27 +631,28 @@ fun t14() : Int {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[ret(*) l1] PREV:[jmp?(l2)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(1)]
|
||||
l3:
|
||||
R jmp(l4) NEXT:[<END>] PREV:[]
|
||||
R jmp(l4) NEXT:[<END>] PREV:[]
|
||||
l2:
|
||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||
r(2) NEXT:[r(doSmth)] PREV:[w(e)]
|
||||
r(doSmth) NEXT:[r(doSmth(2))] PREV:[r(2)]
|
||||
r(doSmth(2)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
l5:
|
||||
jmp(l4) NEXT:[<END>] PREV:[r(doSmth(2))]
|
||||
jmp(l4) NEXT:[<END>] PREV:[r(doSmth(2))]
|
||||
l1:
|
||||
l4:
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, jmp(l4)]
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, jmp(l4)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== t15 ==
|
||||
fun t15() : Int {
|
||||
@@ -663,35 +668,36 @@ fun t15() : Int {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(3)] PREV:[jmp?(l2)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(1)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
l3:
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
l2:
|
||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
l5:
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
l4:
|
||||
R r(3) NEXT:[r(doSmth)] PREV:[]
|
||||
R r(doSmth) NEXT:[r(doSmth(3))] PREV:[]
|
||||
R r(doSmth(3)) NEXT:[<END>] PREV:[]
|
||||
R r(3) NEXT:[r(doSmth)] PREV:[]
|
||||
R r(doSmth) NEXT:[r(doSmth(3))] PREV:[]
|
||||
R r(doSmth(3)) NEXT:[<END>] PREV:[]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, ret(*) l1]
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, ret(*) l1]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== t16 ==
|
||||
fun t16() : Int {
|
||||
@@ -707,33 +713,34 @@ fun t16() : Int {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
||||
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
||||
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[jmp?(), r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[r(doSmth)] PREV:[jmp?(l2)]
|
||||
r(doSmth) NEXT:[r(doSmth(1))] PREV:[r(1)]
|
||||
r(doSmth(1)) NEXT:[jmp(l4)] PREV:[r(doSmth)]
|
||||
l3:
|
||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(1))]
|
||||
jmp(l4) NEXT:[r(3)] PREV:[r(doSmth(1))]
|
||||
l2:
|
||||
jmp?() NEXT:[w(e)] PREV:[jmp?(l2)]
|
||||
w(e) NEXT:[r(2)] PREV:[jmp?()]
|
||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
jmp?() NEXT:[v(e: UnsupportedOperationException)] PREV:[jmp?(l2)]
|
||||
v(e: UnsupportedOperationException) NEXT:[w(e)] PREV:[jmp?()]
|
||||
w(e) NEXT:[r(2)] PREV:[v(e: UnsupportedOperationException)]
|
||||
r(2) NEXT:[r(3)] PREV:[w(e)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[r(2)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[ret(*) l1] PREV:[r(doSmth)]
|
||||
ret(*) l1 NEXT:[<END>] PREV:[r(doSmth(3))]
|
||||
l5:
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
R jmp(l4) NEXT:[r(3)] PREV:[]
|
||||
l4:
|
||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
r(3) NEXT:[r(doSmth)] PREV:[jmp(l4)]
|
||||
r(doSmth) NEXT:[r(doSmth(3))] PREV:[r(3)]
|
||||
r(doSmth(3)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||
<END> NEXT:[<SINK>] PREV:[ret(*) l1, r(doSmth(3))]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== doSmth ==
|
||||
fun doSmth(i: Int) {
|
||||
|
||||
@@ -10,8 +10,9 @@ l0:
|
||||
r(1) NEXT:[r(2)] PREV:[<START>]
|
||||
r(2) NEXT:[r(..)] PREV:[r(1)]
|
||||
r(..) NEXT:[r(1..2)] PREV:[r(2)]
|
||||
r(1..2) NEXT:[w(i)] PREV:[r(..)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[r(1..2)]
|
||||
r(1..2) NEXT:[v(i)] PREV:[r(..)]
|
||||
v(i) NEXT:[w(i)] PREV:[r(1..2)]
|
||||
w(i) NEXT:[jmp?(l2)] PREV:[v(i)]
|
||||
l3:
|
||||
jmp?(l2) NEXT:[read (Unit), r(i)] PREV:[w(i)]
|
||||
l4:
|
||||
|
||||
@@ -17,36 +17,38 @@ fun t1(b: Boolean) {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(b)] PREV:[]
|
||||
r(b) NEXT:[jf(l2)] PREV:[<START>]
|
||||
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(u)] PREV:[jf(l2)]
|
||||
w(u) NEXT:[jmp(l3)] PREV:[r("s")]
|
||||
jmp(l3) NEXT:[r(u)] PREV:[w(u)]
|
||||
<START> NEXT:[v(var u: String)] PREV:[]
|
||||
v(var u: String) NEXT:[r(b)] PREV:[<START>]
|
||||
r(b) NEXT:[jf(l2)] PREV:[v(var u: String)]
|
||||
jf(l2) NEXT:[read (Unit), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(u)] PREV:[jf(l2)]
|
||||
w(u) NEXT:[jmp(l3)] PREV:[r("s")]
|
||||
jmp(l3) NEXT:[r(u)] PREV:[w(u)]
|
||||
l2:
|
||||
read (Unit) NEXT:[r(u)] PREV:[jf(l2)]
|
||||
read (Unit) NEXT:[r(u)] PREV:[jf(l2)]
|
||||
l3:
|
||||
r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
||||
r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)]
|
||||
r(doSmth(u)) NEXT:[r(b)] PREV:[r(doSmth)]
|
||||
r(b) NEXT:[jf(l4)] PREV:[r(doSmth(u))]
|
||||
jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[jmp(l5)] PREV:[r("s")]
|
||||
jmp(l5) NEXT:[r(r)] PREV:[w(r)]
|
||||
r(u) NEXT:[r(doSmth)] PREV:[jmp(l3), read (Unit)]
|
||||
r(doSmth) NEXT:[r(doSmth(u))] PREV:[r(u)]
|
||||
r(doSmth(u)) NEXT:[v(var r: String)] PREV:[r(doSmth)]
|
||||
v(var r: String) NEXT:[r(b)] PREV:[r(doSmth(u))]
|
||||
r(b) NEXT:[jf(l4)] PREV:[v(var r: String)]
|
||||
jf(l4) NEXT:[r("t"), r("s")] PREV:[r(b)]
|
||||
r("s") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[jmp(l5)] PREV:[r("s")]
|
||||
jmp(l5) NEXT:[r(r)] PREV:[w(r)]
|
||||
l4:
|
||||
r("t") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[r(r)] PREV:[r("t")]
|
||||
r("t") NEXT:[w(r)] PREV:[jf(l4)]
|
||||
w(r) NEXT:[r(r)] PREV:[r("t")]
|
||||
l5:
|
||||
r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)]
|
||||
r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)]
|
||||
r(doSmth(r)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
r(r) NEXT:[r(doSmth)] PREV:[jmp(l5), w(r)]
|
||||
r(doSmth) NEXT:[r(doSmth(r))] PREV:[r(r)]
|
||||
r(doSmth(r)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(r))]
|
||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(r))]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== t2 ==
|
||||
fun t2(b: Boolean) {
|
||||
@@ -61,8 +63,9 @@ fun t2(b: Boolean) {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(3)] PREV:[]
|
||||
r(3) NEXT:[w(i)] PREV:[<START>]
|
||||
<START> NEXT:[v(val i = 3)] PREV:[]
|
||||
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)]
|
||||
r(b) NEXT:[jf(l2)] PREV:[w(i)]
|
||||
jf(l2) NEXT:[read (Unit), ret l1] PREV:[r(b)]
|
||||
|
||||
@@ -18,15 +18,16 @@ class C() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w(a)] PREV:[<START>]
|
||||
w(a) NEXT:[<END>] PREV:[r(1)]
|
||||
<START> NEXT:[v(val a: Int = 1)] PREV:[]
|
||||
v(val a: Int = 1) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w(a)] PREV:[v(val a: Int = 1)]
|
||||
w(a) NEXT:[<END>] PREV:[r(1)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== null ==
|
||||
object {
|
||||
@@ -44,15 +45,16 @@ object {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||
<START> NEXT:[v(val x : Int)] PREV:[]
|
||||
v(val x : Int) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w($x)] PREV:[v(val x : Int)]
|
||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== O ==
|
||||
object O {
|
||||
@@ -63,15 +65,16 @@ object O {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||
<START> NEXT:[v(val x : Int)] PREV:[]
|
||||
v(val x : Int) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w($x)] PREV:[v(val x : Int)]
|
||||
w($x) NEXT:[<END>] PREV:[r(1)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||
<END> NEXT:[<SINK>] PREV:[w($x)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== doSmth ==
|
||||
fun doSmth(i: Int) {}
|
||||
@@ -97,8 +100,15 @@ fun test1() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
||||
<START> NEXT:[v(val a = object { val x : I..)] PREV:[]
|
||||
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)]
|
||||
r(object {
|
||||
val x : Int
|
||||
@@ -123,21 +133,26 @@ fun test2() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w(b)] PREV:[<START>]
|
||||
w(b) NEXT:[r(b)] PREV:[r(1)]
|
||||
r(b) NEXT:[w(x)] PREV:[w(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 }) ]
|
||||
<START> NEXT:[v(val b = 1)] PREV:[]
|
||||
v(val b = 1) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w(b)] PREV:[v(val b = 1)]
|
||||
w(b) NEXT:[v(val a = object { val x = b..)] PREV:[r(1)]
|
||||
v(val a = object {
|
||||
val x = b
|
||||
}) NEXT:[v(val x = b)] PREV:[w(b)]
|
||||
v(val x = b) NEXT:[r(b)] PREV:[v(val a = 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:
|
||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||
<END> NEXT:[<SINK>] PREV:[w(a)]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
sink:
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
<SINK> NEXT:[] PREV:[<END>]
|
||||
=====================
|
||||
== inner_bar ==
|
||||
fun inner_bar() {
|
||||
@@ -166,8 +181,15 @@ fun test3() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[jmp?(l2)] PREV:[]
|
||||
jmp?(l2) NEXT:[r(object { val y : Int fun i..), d(fun inner_bar() { y = 10 }) ] PREV:[<START>]
|
||||
<START> NEXT:[v(val a = object { val y : I..)] PREV:[]
|
||||
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() {
|
||||
y = 10
|
||||
}) NEXT:[<SINK>] PREV:[jmp?(l2)]
|
||||
@@ -227,8 +249,20 @@ fun test4() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w($x)] PREV:[<START>]
|
||||
<START> NEXT:[v(val a = object { val x : I..)] PREV:[]
|
||||
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)]
|
||||
jmp?(l2) NEXT:[r(object { val x : Int val y..), d(fun ggg() { y = 10 }) ] PREV:[w($x)]
|
||||
d(fun ggg() {
|
||||
@@ -312,8 +346,21 @@ fun test5() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w(x)] PREV:[<START>]
|
||||
<START> NEXT:[v(val a = object { var x = 1..)] PREV:[]
|
||||
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)]
|
||||
r(2) NEXT:[w($x)] PREV:[w(x)]
|
||||
w($x) NEXT:[jmp?(l2)] PREV:[r(2)]
|
||||
@@ -374,16 +421,17 @@ fun foo() {
|
||||
}
|
||||
---------------------
|
||||
l0:
|
||||
<START> NEXT:[r(1)] PREV:[]
|
||||
r(1) NEXT:[w(b)] PREV:[<START>]
|
||||
w(b) NEXT:[r(b)] PREV:[r(1)]
|
||||
r(b) NEXT:[r(doSmth)] PREV:[w(b)]
|
||||
r(doSmth) NEXT:[r(doSmth(b))] PREV:[r(b)]
|
||||
r(doSmth(b)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
<START> NEXT:[v(val b : Int = 1)] PREV:[]
|
||||
v(val b : Int = 1) NEXT:[r(1)] PREV:[<START>]
|
||||
r(1) NEXT:[w(b)] PREV:[v(val b : Int = 1)]
|
||||
w(b) NEXT:[r(b)] PREV:[r(1)]
|
||||
r(b) NEXT:[r(doSmth)] PREV:[w(b)]
|
||||
r(doSmth) NEXT:[r(doSmth(b))] PREV:[r(b)]
|
||||
r(doSmth(b)) NEXT:[<END>] PREV:[r(doSmth)]
|
||||
l1:
|
||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(b))]
|
||||
<END> NEXT:[<SINK>] PREV:[r(doSmth(b))]
|
||||
error:
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
<ERROR> NEXT:[] PREV:[]
|
||||
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