import DPJRuntime.*; class MethodLocalObjects { class LocalObject<region R> { int value in R; int produceValue(int val) writes R { value = val; return value; } } <region R>int sumReduce(DPJArrayInt<R> arr) reads R { if (arr.length == 0) return 0; if (arr.length == 1) return arr.get(0); int mid = arr.length/2; int left, right; cobegin { left = sumReduce(arr.subarray(0,mid)); right = sumReduce(arr.subarray(mid+1,arr.length-mid)); } region LocalRegion; LocalObject<LocalRegion> localObject = new LocalObject<LocalRegion>(); // Effect 'writes LocalRegion' is local to method int result = localObject.produceValue(left + right); return result; } }