Laurel Language Designer Guide

10.3. Flow based types🔗

Flow based types allow the type of a variable to change throughout the control-flow of the program, which enables having more precise types which improves verification performance.

Source program:

var foo := new Foo;
foo#x := 1;
foo := null;
foo#x := 2;

Inferred program:

var foo := new Foo;
foo#x := 1;
var foo_2: Nullable<Foo> := from_NotNull(foo);
foo_2 := null;
as_notNull(foo_2)#x := 2;