import checkers.igj.quals.*;
@I
public class ListNode {
@I ListNode prev;
@I ListNode next;
public ListNode(int length) @AssignsFields {
if (length == 0) {
next = this;
prev = this;
} else {
next = new @I ListNode(this, this, length - 1);
@I ListNode temp = next;
while (temp.next != this) temp = temp.next;
prev = temp;
}
}
public ListNode(@I ListNode first, @I ListNode prev, int length) {
this.prev = prev;
this.next = (length == 0) ? first : new @I ListNode(first, this, length - 1);
}
public static void main(String[] args) {
@Mutable ListNode mutableList = new @Mutable ListNode(3);
{
@Mutable ListNode n1 = mutableList.next;
@Immutable ListNode n2 = mutableList.next; // should emit error
}
@Immutable ListNode immutableList = new @Immutable ListNode(3);
{
@Mutable ListNode m1 = immutableList.next; // should emit error
@Immutable ListNode m2 = immutableList.next;
}
}
}