### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
[debug/ast-final] # [HILTI] Foo: Final AST (round 2)
[debug/ast-final]   - Module %10 (coercion.hlt:5:1-31:2) [@m:XXX]
[debug/ast-final]       | A -> declaration::GlobalVariable %1 <linkage="private"> [canon-id: Foo::A] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | B -> declaration::GlobalVariable %2 <linkage="private"> [canon-id: Foo::B] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | C -> declaration::GlobalVariable %3 <linkage="private"> [canon-id: Foo::C] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | D -> declaration::GlobalVariable %4 <linkage="private"> [canon-id: Foo::D] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | E -> declaration::GlobalVariable %9 <linkage="private"> [canon-id: Foo::E] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | Foo -> declaration::Module %13 <id="Foo"> [canon-id: Foo] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | x -> declaration::Function %5 <linkage="private" parent_type="%???"> [canon-id: Foo::x] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | y -> declaration::Function %6 <linkage="private" parent_type="%???"> [canon-id: Foo::y] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | z -> declaration::Function %7 <linkage="private" parent_type="%???"> [canon-id: Foo::z] [@d:XXX] ([@d:XXX])
[debug/ast-final]       | z2 -> declaration::Function %8 <linkage="private" parent_type="%???"> [canon-id: Foo::z2] [@d:XXX] ([@d:XXX])
[debug/ast-final]     - ID <name="Foo"> (coercion.hlt:5:8) [@i:XXX]
[debug/ast-final]     - statement::Block (coercion.hlt:5:1-31:2) [@s:XXX]
[debug/ast-final]     - declaration::GlobalVariable %1 <linkage="private"> (coercion.hlt:5:13-7:19) [canon-id: Foo::A] [@d:XXX]
[debug/ast-final]       - ID <name="A"> (coercion.hlt:7:13) [@i:XXX]
[debug/ast-final]       - type::Real (coercion.hlt:7:8) (const) (resolved) [@t:XXX]
[debug/ast-final]       - expression::Ctor (coercion.hlt:7:17) (const) (resolved) [@e:XXX]
[debug/ast-final]         - ctor::Coerced (coercion.hlt:7:17) [@c:XXX]
[debug/ast-final]           - ctor::UnsignedInteger <value="3" width="64"> (coercion.hlt:7:17) [@c:XXX]
[debug/ast-final]             - type::UnsignedInteger <width="64"> (coercion.hlt:7:17) (const) (resolved) [@t:XXX]
[debug/ast-final]           - ctor::Real <value="3.000000"> (coercion.hlt:7:17) [@c:XXX]
[debug/ast-final]             - type::Real (const) (resolved) [@t:XXX]
[debug/ast-final]     - declaration::GlobalVariable %2 <linkage="private"> (coercion.hlt:7:19-8:20) [canon-id: Foo::B] [@d:XXX]
[debug/ast-final]       - ID <name="B"> (coercion.hlt:8:13) [@i:XXX]
[debug/ast-final]       - type::Real (coercion.hlt:8:8) (const) (resolved) [@t:XXX]
[debug/ast-final]       - expression::Ctor (coercion.hlt:8:17) (const) (resolved) [@e:XXX]
[debug/ast-final]         - ctor::Coerced (coercion.hlt:8:17) [@c:XXX]
[debug/ast-final]           - ctor::SignedInteger <value="-5" width="64"> (coercion.hlt:8:17) [@c:XXX]
[debug/ast-final]             - type::SignedInteger <width="64"> (coercion.hlt:8:17) (const) (resolved) [@t:XXX]
[debug/ast-final]           - ctor::Real <value="-5.000000"> (coercion.hlt:8:17) [@c:XXX]
[debug/ast-final]             - type::Real (const) (resolved) [@t:XXX]
[debug/ast-final]     - declaration::GlobalVariable %3 <linkage="private"> (coercion.hlt:8:20-9:24) [canon-id: Foo::C] [@d:XXX]
[debug/ast-final]       - ID <name="C"> (coercion.hlt:9:15) [@i:XXX]
[debug/ast-final]       - type::Stream (coercion.hlt:9:8) (non-const) (resolved) [@t:XXX]
[debug/ast-final]         - type::stream::View (coercion.hlt:9:8) (const) (resolved) [@t:XXX]
[debug/ast-final]           - type::stream::Iterator (coercion.hlt:9:8) (non-const) (resolved) [@t:XXX]
[debug/ast-final]             - type::UnsignedInteger <width="8"> (coercion.hlt:9:8) (const) (resolved) [@t:XXX]
[debug/ast-final]       - expression::Coerced (coercion.hlt:9:19) (non-const) (resolved) [@e:XXX]
[debug/ast-final]         - expression::Ctor (coercion.hlt:9:19) (non-const) (resolved) [@e:XXX]
[debug/ast-final]           - ctor::Bytes <value="X"> (coercion.hlt:9:19) [@c:XXX]
[debug/ast-final]             - type::Bytes (coercion.hlt:9:19) (non-const) (resolved) [@t:XXX]
[debug/ast-final]               - type::UnsignedInteger <width="8"> (coercion.hlt:9:19) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::bytes::Iterator (coercion.hlt:9:19) (non-const) (resolved) [@t:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="8"> (coercion.hlt:9:19) (const) (resolved) [@t:XXX]
[debug/ast-final]         - type::Stream (coercion.hlt:9:8) (non-const) (resolved) [@t:XXX]
[debug/ast-final]           - type::stream::View (coercion.hlt:9:8) (const) (resolved) [@t:XXX]
[debug/ast-final]             - type::stream::Iterator (coercion.hlt:9:8) (non-const) (resolved) [@t:XXX]
[debug/ast-final]               - type::UnsignedInteger <width="8"> (coercion.hlt:9:8) (const) (resolved) [@t:XXX]
[debug/ast-final]     - declaration::GlobalVariable %4 <linkage="private"> (coercion.hlt:9:24-10:24) [canon-id: Foo::D] [@d:XXX]
[debug/ast-final]       - ID <name="D"> (coercion.hlt:10:15) [@i:XXX]
[debug/ast-final]       - type::String (coercion.hlt:10:8) (const) (resolved) [@t:XXX]
[debug/ast-final]       - expression::Ctor (coercion.hlt:10:19) (const) (resolved) [@e:XXX]
[debug/ast-final]         - ctor::String <value="42"> (coercion.hlt:10:19) [@c:XXX]
[debug/ast-final]           - type::String (coercion.hlt:10:19) (const) (resolved) [@t:XXX]
[debug/ast-final]     - declaration::Function %5 <linkage="private" parent_type="%???"> (coercion.hlt:10:24-14:2) [canon-id: Foo::x] [@d:XXX]
[debug/ast-final]       - Function <cc="<standard>"> (coercion.hlt:12:9-14:2) [@f:XXX]
[debug/ast-final]         - ID <name="x"> (coercion.hlt:12:15) [@i:XXX]
[debug/ast-final]         - type::Function <flavor="standard"> (coercion.hlt:12:9-14:2) (const) (resolved) [@t:XXX]
[debug/ast-final]           - type::function::Result (coercion.hlt:12:10) [@t:XXX]
[debug/ast-final]             - type::Bool (coercion.hlt:12:10) (const) (resolved) [@t:XXX]
[debug/ast-final]         - statement::Block (coercion.hlt:12:19-14:2) [@s:XXX]
[debug/ast-final]           - statement::Return (coercion.hlt:13:5) [@s:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:13:12) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::Bool <value="true"> (coercion.hlt:13:12) [@c:XXX]
[debug/ast-final]                 - type::Bool (coercion.hlt:13:12) (const) (resolved) [@t:XXX]
[debug/ast-final]         - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]     - declaration::Function %6 <linkage="private" parent_type="%???"> (coercion.hlt:14:2-18:2) [canon-id: Foo::y] [@d:XXX]
[debug/ast-final]       - Function <cc="<standard>"> (coercion.hlt:16:9-18:2) [@f:XXX]
[debug/ast-final]         - ID <name="y"> (coercion.hlt:16:15) [@i:XXX]
[debug/ast-final]         - type::Function <flavor="standard"> (coercion.hlt:16:9-18:2) (const) (resolved) [@t:XXX]
[debug/ast-final]           - type::function::Result (coercion.hlt:16:10) [@t:XXX]
[debug/ast-final]             - type::Real (coercion.hlt:16:10) (const) (resolved) [@t:XXX]
[debug/ast-final]         - statement::Block (coercion.hlt:16:19-18:2) [@s:XXX]
[debug/ast-final]           - statement::Return (coercion.hlt:17:5) [@s:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:17:12) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::Coerced (coercion.hlt:17:12) [@c:XXX]
[debug/ast-final]                 - ctor::UnsignedInteger <value="1" width="64"> (coercion.hlt:17:12) [@c:XXX]
[debug/ast-final]                   - type::UnsignedInteger <width="64"> (coercion.hlt:17:12) (const) (resolved) [@t:XXX]
[debug/ast-final]                 - ctor::Real <value="1.000000"> (coercion.hlt:17:12) [@c:XXX]
[debug/ast-final]                   - type::Real (const) (resolved) [@t:XXX]
[debug/ast-final]         - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]     - declaration::Function %7 <linkage="private" parent_type="%???"> (coercion.hlt:18:2-22:2) [canon-id: Foo::z] [@d:XXX]
[debug/ast-final]       - Function <cc="<standard>"> (coercion.hlt:20:9-22:2) [@f:XXX]
[debug/ast-final]         - ID <name="z"> (coercion.hlt:20:23) [@i:XXX]
[debug/ast-final]         - type::Function <flavor="standard"> (coercion.hlt:20:9-22:2) (const) (resolved) [@t:XXX]
[debug/ast-final]           - type::function::Result (coercion.hlt:20:10) [@t:XXX]
[debug/ast-final]             - type::stream::View (coercion.hlt:20:15) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::stream::Iterator (coercion.hlt:20:15) (non-const) (resolved) [@t:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="8"> (coercion.hlt:20:15) (const) (resolved) [@t:XXX]
[debug/ast-final]         - statement::Block (coercion.hlt:20:27-22:2) [@s:XXX]
[debug/ast-final]           - statement::Return (coercion.hlt:21:5) [@s:XXX]
[debug/ast-final]             - expression::Coerced (coercion.hlt:21:12) (non-const) (resolved) [@e:XXX]
[debug/ast-final]               - expression::ResolvedID <rid="3"> (type: stream [@t:XXX]) (coercion.hlt:21:12) (non-const) (resolved) [@e:XXX]
[debug/ast-final]                 - ID <name="Foo::C"> (coercion.hlt:21:12) [@i:XXX]
[debug/ast-final]               - type::stream::View (coercion.hlt:20:15) (const) (resolved) [@t:XXX]
[debug/ast-final]                 - type::stream::Iterator (coercion.hlt:20:15) (non-const) (resolved) [@t:XXX]
[debug/ast-final]                   - type::UnsignedInteger <width="8"> (coercion.hlt:20:15) (const) (resolved) [@t:XXX]
[debug/ast-final]         - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]     - declaration::Function %8 <linkage="private" parent_type="%???"> (coercion.hlt:22:2-26:2) [canon-id: Foo::z2] [@d:XXX]
[debug/ast-final]       - Function <cc="<standard>"> (coercion.hlt:24:9-26:2) [@f:XXX]
[debug/ast-final]         - ID <name="z2"> (coercion.hlt:24:15) [@i:XXX]
[debug/ast-final]         - type::Function <flavor="standard"> (coercion.hlt:24:9-26:2) (const) (resolved) [@t:XXX]
[debug/ast-final]           - type::function::Result (coercion.hlt:24:10) [@t:XXX]
[debug/ast-final]             - type::Void (<singleton>) (const) (resolved) [@t:XXX]
[debug/ast-final]         - statement::Block (coercion.hlt:24:20-26:2) [@s:XXX]
[debug/ast-final]           - statement::Return (coercion.hlt:25:5) [@s:XXX]
[debug/ast-final]             - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]         - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]     - declaration::GlobalVariable %9 <linkage="private"> (coercion.hlt:26:2-28:55) [canon-id: Foo::E] [@d:XXX]
[debug/ast-final]       - ID <name="E"> (coercion.hlt:28:37) [@i:XXX]
[debug/ast-final]       - type::Tuple <wildcard="false"> (coercion.hlt:28:8) (const) (resolved) [@t:XXX]
[debug/ast-final]         - type::tuple::Element (coercion.hlt:28:14) [@t:XXX]
[debug/ast-final]           - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]           - type::Real (coercion.hlt:28:14) (const) (resolved) [@t:XXX]
[debug/ast-final]         - type::tuple::Element (coercion.hlt:28:20) [@t:XXX]
[debug/ast-final]           - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]           - type::SignedInteger <width="32"> (coercion.hlt:28:20) (const) (resolved) [@t:XXX]
[debug/ast-final]         - type::tuple::Element (coercion.hlt:28:29) [@t:XXX]
[debug/ast-final]           - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]           - type::String (coercion.hlt:28:29) (const) (resolved) [@t:XXX]
[debug/ast-final]       - expression::Ctor (coercion.hlt:28:41) (const) (resolved) [@e:XXX]
[debug/ast-final]         - ctor::Coerced (coercion.hlt:28:41) [@c:XXX]
[debug/ast-final]           - ctor::Tuple (coercion.hlt:28:41) [@c:XXX]
[debug/ast-final]             - type::Tuple <wildcard="false"> (coercion.hlt:28:41) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element (coercion.hlt:28:42) [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="64"> (coercion.hlt:28:42) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element (coercion.hlt:28:45) [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="64"> (coercion.hlt:28:45) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element (coercion.hlt:28:48) [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::String (coercion.hlt:28:48) (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:42) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::UnsignedInteger <value="1" width="64"> (coercion.hlt:28:42) [@c:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="64"> (coercion.hlt:28:42) (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:45) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::UnsignedInteger <value="2" width="64"> (coercion.hlt:28:45) [@c:XXX]
[debug/ast-final]                 - type::UnsignedInteger <width="64"> (coercion.hlt:28:45) (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:48) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::String <value="xyz"> (coercion.hlt:28:48) [@c:XXX]
[debug/ast-final]                 - type::String (coercion.hlt:28:48) (const) (resolved) [@t:XXX]
[debug/ast-final]           - ctor::Tuple (coercion.hlt:28:41) [@c:XXX]
[debug/ast-final]             - type::Tuple <wildcard="false"> (coercion.hlt:28:41) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::Real (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element (coercion.hlt:28:45) [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::SignedInteger <width="32"> (coercion.hlt:28:45) (const) (resolved) [@t:XXX]
[debug/ast-final]               - type::tuple::Element (coercion.hlt:28:48) [@t:XXX]
[debug/ast-final]                 - node::None (coercion.hlt:12:9-14:2) [@n:XXX]
[debug/ast-final]                 - type::String (coercion.hlt:28:48) (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:42) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::Coerced (coercion.hlt:28:42) [@c:XXX]
[debug/ast-final]                 - ctor::UnsignedInteger <value="1" width="64"> (coercion.hlt:28:42) [@c:XXX]
[debug/ast-final]                   - type::UnsignedInteger <width="64"> (coercion.hlt:28:42) (const) (resolved) [@t:XXX]
[debug/ast-final]                 - ctor::Real <value="1.000000"> (coercion.hlt:28:42) [@c:XXX]
[debug/ast-final]                   - type::Real (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:45) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::Coerced (coercion.hlt:28:45) [@c:XXX]
[debug/ast-final]                 - ctor::UnsignedInteger <value="2" width="64"> (coercion.hlt:28:45) [@c:XXX]
[debug/ast-final]                   - type::UnsignedInteger <width="64"> (coercion.hlt:28:45) (const) (resolved) [@t:XXX]
[debug/ast-final]                 - ctor::SignedInteger <value="2" width="32"> (coercion.hlt:28:45) [@c:XXX]
[debug/ast-final]                   - type::SignedInteger <width="32"> (coercion.hlt:28:45) (const) (resolved) [@t:XXX]
[debug/ast-final]             - expression::Ctor (coercion.hlt:28:48) (const) (resolved) [@e:XXX]
[debug/ast-final]               - ctor::String <value="xyz"> (coercion.hlt:28:48) [@c:XXX]
[debug/ast-final]                 - type::String (coercion.hlt:28:48) (const) (resolved) [@t:XXX]
module Foo {

global real A = 3;
global real B = -5;
global stream C = b"X";
global string D = "42";
global tuple<real, int<32>, string> E = (1, 2, "xyz");

function bool x() {
    return True;
}

function real y() {
    return 1;
}

function view<stream> z() {
    return C;
}

function void z2() {
    return;
}

}
