From aa69ebd05113c9f00c5241a992326436707ad034 Mon Sep 17 00:00:00 2001 From: Benjamin Bannier Date: Fri, 13 Feb 2026 08:24:11 +0100 Subject: [PATCH 1/3] Reverse order in which we visit derived classes. When invoking Node visitors we previously would visit from base class to most derived. For visitors accumulating information this was fine since for them order didn't matter. Matchers which should be invoked exactly once on the other hand were hard to implement since we would always invoke the most general matcher without even knowing whether a more specific one would also be invoked. This patch reverses the order we invoke handlers, now from most derived to base one. With additional state tracking this allows implementing skipping of more gerneral default handlers. --- hilti/toolchain/include/ast/node.h | 10 +- spicy/toolchain/include/ast/node.h | 18 +- tests/Baseline/hilti.ast.imported-id/output | 186 ++++++++++---------- 3 files changed, 107 insertions(+), 107 deletions(-) diff --git a/hilti/toolchain/include/ast/node.h b/hilti/toolchain/include/ast/node.h index b280e886aa..93e3afc6e1 100644 --- a/hilti/toolchain/include/ast/node.h +++ b/hilti/toolchain/include/ast/node.h @@ -47,8 +47,8 @@ __HILTI_NODE_0(hilti, CLASS, override_) \ \ void dispatch(::hilti::visitor::Dispatcher& v) override_ { \ - v(static_cast<::hilti::Node*>(this)); \ v(this); \ + v(static_cast<::hilti::Node*>(this)); \ } #define __HILTI_NODE_1(NS, CLASS, BASE, override_) \ @@ -63,9 +63,9 @@ __HILTI_NODE_1(hilti, CLASS, BASE, override_) \ \ void dispatch(::hilti::visitor::Dispatcher& v) override_ { \ - v(static_cast<::hilti::Node*>(this)); \ - v(static_cast(this)); \ v(this); \ + v(static_cast(this)); \ + v(static_cast<::hilti::Node*>(this)); \ } #define __HILTI_NODE_2(NS, CLASS, BASE1, BASE2, override_) \ @@ -80,10 +80,10 @@ __HILTI_NODE_2(hilti, CLASS, BASE1, BASE2, override_) \ \ void dispatch(::hilti::visitor::Dispatcher& v) override_ { \ - v(static_cast<::hilti::Node*>(this)); \ + v(this); \ v(static_cast(this)); \ v(static_cast(this)); \ - v(this); \ + v(static_cast<::hilti::Node*>(this)); \ } namespace hilti { diff --git a/spicy/toolchain/include/ast/node.h b/spicy/toolchain/include/ast/node.h index 8294d0b4f9..4264449900 100644 --- a/spicy/toolchain/include/ast/node.h +++ b/spicy/toolchain/include/ast/node.h @@ -13,12 +13,12 @@ void dispatch(::hilti::visitor::Dispatcher& v) override_ { \ if ( v.dispatcherTag() == spicy::visitor::Dispatcher::Spicy ) { \ auto sv = static_cast(&v); \ - (*sv)(static_cast<::hilti::Node*>(this)); \ (*sv)(this); \ + (*sv)(static_cast<::hilti::Node*>(this)); \ } \ else { \ - v(static_cast<::hilti::Node*>(this)); \ v(this); \ + v(static_cast<::hilti::Node*>(this)); \ } \ } @@ -28,14 +28,14 @@ void dispatch(::hilti::visitor::Dispatcher& v) override_ { \ if ( v.dispatcherTag() == spicy::visitor::Dispatcher::Spicy ) { \ auto sv = static_cast(&v); \ - (*sv)(static_cast<::hilti::Node*>(this)); \ - (*sv)(static_cast(this)); \ (*sv)(this); \ + (*sv)(static_cast(this)); \ + (*sv)(static_cast<::hilti::Node*>(this)); \ } \ else { \ - v(static_cast<::hilti::Node*>(this)); \ - v(static_cast(this)); \ v(this); \ + v(static_cast(this)); \ + v(static_cast<::hilti::Node*>(this)); \ } \ } @@ -46,15 +46,15 @@ using namespace hilti; \ if ( v.dispatcherTag() == spicy::visitor::Dispatcher::Spicy ) { \ auto sv = static_cast(&v); \ - (*sv)(static_cast<::hilti::Node*>(this)); \ + (*sv)(this); \ (*sv)(static_cast(this)); \ (*sv)(static_cast(this)); \ - (*sv)(this); \ + (*sv)(static_cast<::hilti::Node*>(this)); \ } \ else { \ - v(static_cast<::hilti::Node*>(this)); \ v(static_cast(this)); \ v(static_cast(this)); \ + v(static_cast<::hilti::Node*>(this)); \ } \ } diff --git a/tests/Baseline/hilti.ast.imported-id/output b/tests/Baseline/hilti.ast.imported-id/output index a525b12468..57e3434c90 100644 --- a/tests/Baseline/hilti.ast.imported-id/output +++ b/tests/Baseline/hilti.ast.imported-id/output @@ -37,277 +37,277 @@ [debug/resolver] [hilti.hlt:63:38-63:55] type::Name "RecoverableFailure" -> set resolved type to T16 [debug/resolver] [hilti.hlt:66:39-66:53] type::Name "SystemException" -> set resolved type to T15 [debug/resolver] [hilti.hlt:67:39-67:56] type::Name "RecoverableFailure" -> set resolved type to T16 -[debug/resolver] [foo.hlt:4:1-4:11] declaration::ImportedModule "import Bar;" -> set declaration's canonical ID to Foo::Bar [debug/resolver] [foo.hlt:4:1-4:11] declaration::ImportedModule "import Bar;" -> set declaration's fully qualified ID to Foo::Bar [debug/compiler] parsing file "./bar.hlt" as HILTI code [debug/resolver] [foo.hlt:4:1-4:11] declaration::ImportedModule "import Bar;" -> imported module Bar -[debug/resolver] [foo.hlt:6:1-6:24] declaration::Type "public type Foo1 = bool;" -> set declaration's canonical ID to Foo::Foo1 +[debug/resolver] [foo.hlt:4:1-4:11] declaration::ImportedModule "import Bar;" -> set declaration's canonical ID to Foo::Bar [debug/resolver] [foo.hlt:6:1-6:24] declaration::Type "public type Foo1 = bool;" -> set declaration's fully qualified ID to Foo::Foo1 -[debug/resolver] -> [D1] declaration::Type Foo::Foo1 | public type Foo1 = bool; (foo.hlt:6:1-6:24) +[debug/resolver] -> [D1] declaration::Type | public type Foo1 = bool; (foo.hlt:6:1-6:24) [debug/resolver] [foo.hlt:6:20-6:23] type::Bool "bool" -> set type's declaration to D1 -[debug/resolver] [foo.hlt:7:1-7:29] declaration::Type "public type Foo2 = Bar::Bar1;" -> set declaration's canonical ID to Foo::Foo2 +[debug/resolver] [foo.hlt:6:1-6:24] declaration::Type "public type Foo1 = bool;" -> set declaration's canonical ID to Foo::Foo1 [debug/resolver] [foo.hlt:7:1-7:29] declaration::Type "public type Foo2 = Bar::Bar1;" -> set declaration's fully qualified ID to Foo::Foo2 -[debug/resolver] [foo.hlt:9:21-9:28] declaration::Parameter "bool foo" -> set declaration's canonical ID to Foo::foo +[debug/resolver] [foo.hlt:7:1-7:29] declaration::Type "public type Foo2 = Bar::Bar1;" -> set declaration's canonical ID to Foo::Foo2 [debug/resolver] [foo.hlt:9:21-9:28] declaration::Parameter "bool foo" -> set declaration's fully qualified ID to foo -[debug/resolver] [foo.hlt:9:31-9:43] declaration::Parameter "Bar::Bar1 bar" -> set declaration's canonical ID to Foo::bar +[debug/resolver] [foo.hlt:9:21-9:28] declaration::Parameter "bool foo" -> set declaration's canonical ID to Foo::foo [debug/resolver] [foo.hlt:9:31-9:43] declaration::Parameter "Bar::Bar1 bar" -> set declaration's fully qualified ID to bar -[debug/resolver] [foo.hlt:9:1-9:59] declaration::Function "function string foo(bool foo, Bar::Bar1 bar) { return ""; }" -> set declaration's canonical ID to Foo::foo_2 +[debug/resolver] [foo.hlt:9:31-9:43] declaration::Parameter "Bar::Bar1 bar" -> set declaration's canonical ID to Foo::bar [debug/resolver] [foo.hlt:9:1-9:59] declaration::Function "function string foo(bool foo, Bar::Bar1 bar) { return ""; }" -> set declaration's fully qualified ID to Foo::foo +[debug/resolver] [foo.hlt:9:1-9:59] declaration::Function "function string foo(bool foo, Bar::Bar1 bar) { return ""; }" -> set declaration's canonical ID to Foo::foo_2 [debug/resolver] [foo.hlt:2:1-11:1] declaration::Module "module Foo { import Bar; public type Foo1 = bool; public type Foo2 = Bar::Bar1; function string foo(bool foo, Bar::Bar1 bar) { return ""; } }" -> set declaration's fully qualified ID to Foo [debug/resolver] [foo.hlt:2:1-11:1] declaration::Module "module Foo { import Bar; public type Foo1 = bool; public type Foo2 = Bar::Bar1; function string foo(bool foo, Bar::Bar1 bar) { return ""; } }" -> set module's canonical ID to Foo [debug/resolver] -> [D2] declaration::Module Foo | module Foo { import Bar; public type Foo1 = bool; public type Foo2 = Bar::Bar1; function string foo(bool foo, Bar::Bar1 bar) { return ""; } } (foo.hlt:2:1-11:1) [debug/resolver] [foo.hlt:2:1-11:1] declaration::Module "module Foo { import Bar; public type Foo1 = bool; public type Foo2 = Bar::Bar1; function string foo(bool foo, Bar::Bar1 bar) { return ""; } }" -> set module's declaration index to D2 -[debug/resolver] [hilti.hlt:6:1-6:21] declaration::Property "" -> set declaration's canonical ID to hilti::%skip-implementation [debug/resolver] [hilti.hlt:6:1-6:21] declaration::Property "" -> set declaration's fully qualified ID to hilti::%skip-implementation +[debug/resolver] [hilti.hlt:6:1-6:21] declaration::Property "" -> set declaration's canonical ID to hilti::%skip-implementation [debug/resolver] [hilti.hlt:8:24-8:42] declaration::Constant "const enum { LSB0 = 0, MSB0 = 1 } LSB0 = ::LSB0;" -> set declaration's canonical ID to hilti::LSB0 [debug/resolver] [hilti.hlt:8:24-8:42] declaration::Constant "const enum { LSB0 = 0, MSB0 = 1 } MSB0 = ::MSB0;" -> set declaration's canonical ID to hilti::MSB0 [debug/resolver] [hilti.hlt:8:24-8:42] declaration::Constant "const enum { LSB0 = 0, MSB0 = 1 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef [debug/resolver] [hilti.hlt:8:44-8:82] Attribute "&cxxname="hilti::rt::integer::BitOrder"" -> Attribute "&cxxname="::hilti::rt::integer::BitOrder"" -[debug/resolver] [hilti.hlt:8:1-8:83] declaration::Type "public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder";" -> set declaration's canonical ID to hilti::BitOrder [debug/resolver] [hilti.hlt:8:1-8:83] declaration::Type "public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder";" -> set declaration's fully qualified ID to hilti::BitOrder -[debug/resolver] -> [D3] declaration::Type hilti::BitOrder | public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; (hilti.hlt:8:1-8:83) +[debug/resolver] -> [D3] declaration::Type | public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; (hilti.hlt:8:1-8:83) [debug/resolver] [hilti.hlt:8:24-8:42] type::Enum "hilti::BitOrder" -> set type's declaration to D3 +[debug/resolver] [hilti.hlt:8:1-8:83] declaration::Type "public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder";" -> set declaration's canonical ID to hilti::BitOrder [debug/resolver] [hilti.hlt:9:25-9:59] declaration::Constant "const enum { Little = 0, Big = 1, Network = 2, Host = 3 } Little = ::Little;" -> set declaration's canonical ID to hilti::Little [debug/resolver] [hilti.hlt:9:25-9:59] declaration::Constant "const enum { Little = 0, Big = 1, Network = 2, Host = 3 } Big = ::Big;" -> set declaration's canonical ID to hilti::Big [debug/resolver] [hilti.hlt:9:25-9:59] declaration::Constant "const enum { Little = 0, Big = 1, Network = 2, Host = 3 } Network = ::Network;" -> set declaration's canonical ID to hilti::Network [debug/resolver] [hilti.hlt:9:25-9:59] declaration::Constant "const enum { Little = 0, Big = 1, Network = 2, Host = 3 } Host = ::Host;" -> set declaration's canonical ID to hilti::Host [debug/resolver] [hilti.hlt:9:25-9:59] declaration::Constant "const enum { Little = 0, Big = 1, Network = 2, Host = 3 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_2 [debug/resolver] [hilti.hlt:9:61-9:91] Attribute "&cxxname="hilti::rt::ByteOrder"" -> Attribute "&cxxname="::hilti::rt::ByteOrder"" -[debug/resolver] [hilti.hlt:9:1-9:92] declaration::Type "public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder";" -> set declaration's canonical ID to hilti::ByteOrder [debug/resolver] [hilti.hlt:9:1-9:92] declaration::Type "public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder";" -> set declaration's fully qualified ID to hilti::ByteOrder -[debug/resolver] -> [D4] declaration::Type hilti::ByteOrder | public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; (hilti.hlt:9:1-9:92) +[debug/resolver] -> [D4] declaration::Type | public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; (hilti.hlt:9:1-9:92) [debug/resolver] [hilti.hlt:9:25-9:59] type::Enum "hilti::ByteOrder" -> set type's declaration to D4 +[debug/resolver] [hilti.hlt:9:1-9:92] declaration::Type "public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder";" -> set declaration's canonical ID to hilti::ByteOrder [debug/resolver] [hilti.hlt:10:20-10:45] declaration::Constant "const enum { Left = 0, Right = 1, Both = 2 } Left = ::Left;" -> set declaration's canonical ID to hilti::Left [debug/resolver] [hilti.hlt:10:20-10:45] declaration::Constant "const enum { Left = 0, Right = 1, Both = 2 } Right = ::Right;" -> set declaration's canonical ID to hilti::Right [debug/resolver] [hilti.hlt:10:20-10:45] declaration::Constant "const enum { Left = 0, Right = 1, Both = 2 } Both = ::Both;" -> set declaration's canonical ID to hilti::Both [debug/resolver] [hilti.hlt:10:20-10:45] declaration::Constant "const enum { Left = 0, Right = 1, Both = 2 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_3 [debug/resolver] [hilti.hlt:10:47-10:79] Attribute "&cxxname="hilti::rt::bytes::Side"" -> Attribute "&cxxname="::hilti::rt::bytes::Side"" -[debug/resolver] [hilti.hlt:10:1-10:80] declaration::Type "public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side";" -> set declaration's canonical ID to hilti::Side [debug/resolver] [hilti.hlt:10:1-10:80] declaration::Type "public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side";" -> set declaration's fully qualified ID to hilti::Side -[debug/resolver] -> [D5] declaration::Type hilti::Side | public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; (hilti.hlt:10:1-10:80) +[debug/resolver] -> [D5] declaration::Type | public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; (hilti.hlt:10:1-10:80) [debug/resolver] [hilti.hlt:10:20-10:45] type::Enum "hilti::Side" -> set type's declaration to D5 +[debug/resolver] [hilti.hlt:10:1-10:80] declaration::Type "public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side";" -> set declaration's canonical ID to hilti::Side [debug/resolver] [hilti.hlt:11:29-11:47] declaration::Constant "const enum { IPv4 = 0, IPv6 = 1 } IPv4 = ::IPv4;" -> set declaration's canonical ID to hilti::IPv4 [debug/resolver] [hilti.hlt:11:29-11:47] declaration::Constant "const enum { IPv4 = 0, IPv6 = 1 } IPv6 = ::IPv6;" -> set declaration's canonical ID to hilti::IPv6 [debug/resolver] [hilti.hlt:11:29-11:47] declaration::Constant "const enum { IPv4 = 0, IPv6 = 1 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_4 [debug/resolver] [hilti.hlt:11:49-11:83] Attribute "&cxxname="hilti::rt::AddressFamily"" -> Attribute "&cxxname="::hilti::rt::AddressFamily"" -[debug/resolver] [hilti.hlt:11:1-11:84] declaration::Type "public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily";" -> set declaration's canonical ID to hilti::AddressFamily [debug/resolver] [hilti.hlt:11:1-11:84] declaration::Type "public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily";" -> set declaration's fully qualified ID to hilti::AddressFamily -[debug/resolver] -> [D6] declaration::Type hilti::AddressFamily | public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; (hilti.hlt:11:1-11:84) +[debug/resolver] -> [D6] declaration::Type | public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; (hilti.hlt:11:1-11:84) [debug/resolver] [hilti.hlt:11:29-11:47] type::Enum "hilti::AddressFamily" -> set type's declaration to D6 +[debug/resolver] [hilti.hlt:11:1-11:84] declaration::Type "public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily";" -> set declaration's canonical ID to hilti::AddressFamily [debug/resolver] [hilti.hlt:12:24-12:62] declaration::Constant "const enum { IEEE754_Single = 0, IEEE754_Double = 1 } IEEE754_Single = ::IEEE754_Single;" -> set declaration's canonical ID to hilti::IEEE754_Single [debug/resolver] [hilti.hlt:12:24-12:62] declaration::Constant "const enum { IEEE754_Single = 0, IEEE754_Double = 1 } IEEE754_Double = ::IEEE754_Double;" -> set declaration's canonical ID to hilti::IEEE754_Double [debug/resolver] [hilti.hlt:12:24-12:62] declaration::Constant "const enum { IEEE754_Single = 0, IEEE754_Double = 1 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_5 [debug/resolver] [hilti.hlt:12:64-12:95] Attribute "&cxxname="hilti::rt::real::Type"" -> Attribute "&cxxname="::hilti::rt::real::Type"" -[debug/resolver] [hilti.hlt:12:1-12:96] declaration::Type "public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type";" -> set declaration's canonical ID to hilti::RealType [debug/resolver] [hilti.hlt:12:1-12:96] declaration::Type "public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type";" -> set declaration's fully qualified ID to hilti::RealType -[debug/resolver] -> [D7] declaration::Type hilti::RealType | public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; (hilti.hlt:12:1-12:96) +[debug/resolver] -> [D7] declaration::Type | public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; (hilti.hlt:12:1-12:96) [debug/resolver] [hilti.hlt:12:24-12:62] type::Enum "hilti::RealType" -> set type's declaration to D7 +[debug/resolver] [hilti.hlt:12:1-12:96] declaration::Type "public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type";" -> set declaration's canonical ID to hilti::RealType [debug/resolver] [hilti.hlt:13:24-13:46] declaration::Constant "const enum { TCP = 0, UDP = 1, ICMP = 2 } TCP = ::TCP;" -> set declaration's canonical ID to hilti::TCP [debug/resolver] [hilti.hlt:13:24-13:46] declaration::Constant "const enum { TCP = 0, UDP = 1, ICMP = 2 } UDP = ::UDP;" -> set declaration's canonical ID to hilti::UDP [debug/resolver] [hilti.hlt:13:24-13:46] declaration::Constant "const enum { TCP = 0, UDP = 1, ICMP = 2 } ICMP = ::ICMP;" -> set declaration's canonical ID to hilti::ICMP [debug/resolver] [hilti.hlt:13:24-13:46] declaration::Constant "const enum { TCP = 0, UDP = 1, ICMP = 2 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_6 [debug/resolver] [hilti.hlt:13:48-13:77] Attribute "&cxxname="hilti::rt::Protocol"" -> Attribute "&cxxname="::hilti::rt::Protocol"" -[debug/resolver] [hilti.hlt:13:1-13:78] declaration::Type "public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol";" -> set declaration's canonical ID to hilti::Protocol [debug/resolver] [hilti.hlt:13:1-13:78] declaration::Type "public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol";" -> set declaration's fully qualified ID to hilti::Protocol -[debug/resolver] -> [D8] declaration::Type hilti::Protocol | public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; (hilti.hlt:13:1-13:78) +[debug/resolver] -> [D8] declaration::Type | public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; (hilti.hlt:13:1-13:78) [debug/resolver] [hilti.hlt:13:24-13:46] type::Enum "hilti::Protocol" -> set type's declaration to D8 +[debug/resolver] [hilti.hlt:13:1-13:78] declaration::Type "public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol";" -> set declaration's canonical ID to hilti::Protocol [debug/resolver] [hilti.hlt:14:23-14:60] declaration::Constant "const enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } ASCII = ::ASCII;" -> set declaration's canonical ID to hilti::ASCII [debug/resolver] [hilti.hlt:14:23-14:60] declaration::Constant "const enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } UTF8 = ::UTF8;" -> set declaration's canonical ID to hilti::UTF8 [debug/resolver] [hilti.hlt:14:23-14:60] declaration::Constant "const enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } UTF16LE = ::UTF16LE;" -> set declaration's canonical ID to hilti::UTF16LE [debug/resolver] [hilti.hlt:14:23-14:60] declaration::Constant "const enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } UTF16BE = ::UTF16BE;" -> set declaration's canonical ID to hilti::UTF16BE [debug/resolver] [hilti.hlt:14:23-14:60] declaration::Constant "const enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_7 [debug/resolver] [hilti.hlt:14:62-14:99] Attribute "&cxxname="hilti::rt::unicode::Charset"" -> Attribute "&cxxname="::hilti::rt::unicode::Charset"" -[debug/resolver] [hilti.hlt:14:1-14:100] declaration::Type "public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset";" -> set declaration's canonical ID to hilti::Charset [debug/resolver] [hilti.hlt:14:1-14:100] declaration::Type "public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset";" -> set declaration's fully qualified ID to hilti::Charset -[debug/resolver] -> [D9] declaration::Type hilti::Charset | public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; (hilti.hlt:14:1-14:100) +[debug/resolver] -> [D9] declaration::Type | public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; (hilti.hlt:14:1-14:100) [debug/resolver] [hilti.hlt:14:23-14:60] type::Enum "hilti::Charset" -> set type's declaration to D9 +[debug/resolver] [hilti.hlt:14:1-14:100] declaration::Type "public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset";" -> set declaration's canonical ID to hilti::Charset [debug/resolver] [hilti.hlt:15:35-15:66] declaration::Constant "const enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } IGNORE = ::IGNORE;" -> set declaration's canonical ID to hilti::IGNORE [debug/resolver] [hilti.hlt:15:35-15:66] declaration::Constant "const enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } REPLACE = ::REPLACE;" -> set declaration's canonical ID to hilti::REPLACE [debug/resolver] [hilti.hlt:15:35-15:66] declaration::Constant "const enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } STRICT = ::STRICT;" -> set declaration's canonical ID to hilti::STRICT [debug/resolver] [hilti.hlt:15:35-15:66] declaration::Constant "const enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } Undef = ::Undef;" -> set declaration's canonical ID to hilti::Undef_8 [debug/resolver] [hilti.hlt:15:68-15:117] Attribute "&cxxname="hilti::rt::unicode::DecodeErrorStrategy"" -> Attribute "&cxxname="::hilti::rt::unicode::DecodeErrorStrategy"" -[debug/resolver] [hilti.hlt:15:1-15:118] declaration::Type "public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy";" -> set declaration's canonical ID to hilti::DecodeErrorStrategy [debug/resolver] [hilti.hlt:15:1-15:118] declaration::Type "public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy";" -> set declaration's fully qualified ID to hilti::DecodeErrorStrategy -[debug/resolver] -> [D10] declaration::Type hilti::DecodeErrorStrategy | public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; (hilti.hlt:15:1-15:118) +[debug/resolver] -> [D10] declaration::Type | public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; (hilti.hlt:15:1-15:118) [debug/resolver] [hilti.hlt:15:35-15:66] type::Enum "hilti::DecodeErrorStrategy" -> set type's declaration to D10 -[debug/resolver] [hilti.hlt:16:1-16:37] declaration::Type "public type Captures = vector;" -> set declaration's canonical ID to hilti::Captures +[debug/resolver] [hilti.hlt:15:1-15:118] declaration::Type "public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy";" -> set declaration's canonical ID to hilti::DecodeErrorStrategy [debug/resolver] [hilti.hlt:16:1-16:37] declaration::Type "public type Captures = vector;" -> set declaration's fully qualified ID to hilti::Captures -[debug/resolver] -> [D11] declaration::Type hilti::Captures | public type Captures = vector; (hilti.hlt:16:1-16:37) +[debug/resolver] -> [D11] declaration::Type | public type Captures = vector; (hilti.hlt:16:1-16:37) [debug/resolver] [hilti.hlt:16:24-16:36] type::Vector "vector" -> set type's declaration to D11 -[debug/resolver] [hilti.hlt:17:1-17:61] declaration::Type "public type Profiler = _t_library_type("::hilti::rt::Profiler");" -> set declaration's canonical ID to hilti::Profiler +[debug/resolver] [hilti.hlt:16:1-16:37] declaration::Type "public type Captures = vector;" -> set declaration's canonical ID to hilti::Captures [debug/resolver] [hilti.hlt:17:1-17:61] declaration::Type "public type Profiler = _t_library_type("::hilti::rt::Profiler");" -> set declaration's fully qualified ID to hilti::Profiler -[debug/resolver] -> [D12] declaration::Type hilti::Profiler | public type Profiler = hilti::Profiler; (hilti.hlt:17:1-17:61) +[debug/resolver] -> [D12] declaration::Type | public type Profiler = hilti::Profiler; (hilti.hlt:17:1-17:61) [debug/resolver] [hilti.hlt:17:24-17:60] type::Library "hilti::Profiler" -> set type's declaration to D12 -[debug/resolver] [hilti.hlt:19:26-21:1] declaration::Expression "self" -> set declaration's canonical ID to hilti::self +[debug/resolver] [hilti.hlt:17:1-17:61] declaration::Type "public type Profiler = hilti::Profiler &cxxname="::hilti::rt::Profiler";" -> set declaration's canonical ID to hilti::Profiler [debug/resolver] [hilti.hlt:19:26-21:1] declaration::Expression "self" -> set declaration's fully qualified ID to self -[debug/resolver] [hilti.hlt:20:30-20:46] declaration::Parameter "view data" -> set declaration's canonical ID to hilti::data +[debug/resolver] [hilti.hlt:19:26-21:1] declaration::Expression "self" -> set declaration's canonical ID to hilti::self [debug/resolver] [hilti.hlt:20:30-20:46] declaration::Parameter "view data" -> set declaration's fully qualified ID to data -[debug/resolver] [hilti.hlt:20:5-20:48] declaration::Field "method Captures captures(view data);" -> set declaration's canonical ID to hilti::captures +[debug/resolver] [hilti.hlt:20:30-20:46] declaration::Parameter "view data" -> set declaration's canonical ID to hilti::data [debug/resolver] [hilti.hlt:20:5-20:48] declaration::Field "method Captures captures(view data);" -> set linked type to T9 +[debug/resolver] [hilti.hlt:20:5-20:48] declaration::Field "method Captures captures(view data);" -> set declaration's canonical ID to hilti::captures [debug/resolver] [hilti.hlt:21:3-21:42] Attribute "&cxxname="hilti::rt::regexp::MatchState"" -> Attribute "&cxxname="::hilti::rt::regexp::MatchState"" -[debug/resolver] [hilti.hlt:19:1-21:43] declaration::Type "public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState";" -> set declaration's canonical ID to hilti::MatchState [debug/resolver] [hilti.hlt:19:1-21:43] declaration::Type "public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState";" -> set declaration's fully qualified ID to hilti::MatchState -[debug/resolver] -> [D13] declaration::Type hilti::MatchState | public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; (hilti.hlt:19:1-21:43) +[debug/resolver] -> [D13] declaration::Type | public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; (hilti.hlt:19:1-21:43) [debug/resolver] [hilti.hlt:19:26-21:1] type::Struct "hilti::MatchState" -> set type's declaration to D13 -[debug/resolver] [hilti.hlt:23:32-28:1] declaration::Expression "self" -> set declaration's canonical ID to hilti::self_2 +[debug/resolver] [hilti.hlt:19:1-21:43] declaration::Type "public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState";" -> set declaration's canonical ID to hilti::MatchState [debug/resolver] [hilti.hlt:23:32-28:1] declaration::Expression "self" -> set declaration's fully qualified ID to self -[debug/resolver] [hilti.hlt:24:5-24:28] declaration::Field "uint<64> num_data_bytes;" -> set declaration's canonical ID to hilti::num_data_bytes +[debug/resolver] [hilti.hlt:23:32-28:1] declaration::Expression "self" -> set declaration's canonical ID to hilti::self_2 [debug/resolver] [hilti.hlt:24:5-24:28] declaration::Field "uint<64> num_data_bytes;" -> set linked type to T10 -[debug/resolver] [hilti.hlt:25:5-25:29] declaration::Field "uint<64> num_data_chunks;" -> set declaration's canonical ID to hilti::num_data_chunks +[debug/resolver] [hilti.hlt:24:5-24:28] declaration::Field "uint<64> num_data_bytes;" -> set declaration's canonical ID to hilti::num_data_bytes [debug/resolver] [hilti.hlt:25:5-25:29] declaration::Field "uint<64> num_data_chunks;" -> set linked type to T10 -[debug/resolver] [hilti.hlt:26:5-26:27] declaration::Field "uint<64> num_gap_bytes;" -> set declaration's canonical ID to hilti::num_gap_bytes +[debug/resolver] [hilti.hlt:25:5-25:29] declaration::Field "uint<64> num_data_chunks;" -> set declaration's canonical ID to hilti::num_data_chunks [debug/resolver] [hilti.hlt:26:5-26:27] declaration::Field "uint<64> num_gap_bytes;" -> set linked type to T10 -[debug/resolver] [hilti.hlt:27:5-27:28] declaration::Field "uint<64> num_gap_chunks;" -> set declaration's canonical ID to hilti::num_gap_chunks +[debug/resolver] [hilti.hlt:26:5-26:27] declaration::Field "uint<64> num_gap_bytes;" -> set declaration's canonical ID to hilti::num_gap_bytes [debug/resolver] [hilti.hlt:27:5-27:28] declaration::Field "uint<64> num_gap_chunks;" -> set linked type to T10 +[debug/resolver] [hilti.hlt:27:5-27:28] declaration::Field "uint<64> num_gap_chunks;" -> set declaration's canonical ID to hilti::num_gap_chunks [debug/resolver] [hilti.hlt:28:3-28:44] Attribute "&cxxname="hilti::rt::stream::Statistics"" -> Attribute "&cxxname="::hilti::rt::stream::Statistics"" -[debug/resolver] [hilti.hlt:23:1-28:45] declaration::Type "public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics";" -> set declaration's canonical ID to hilti::StreamStatistics [debug/resolver] [hilti.hlt:23:1-28:45] declaration::Type "public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics";" -> set declaration's fully qualified ID to hilti::StreamStatistics -[debug/resolver] -> [D14] declaration::Type hilti::StreamStatistics | public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; (hilti.hlt:23:1-28:45) +[debug/resolver] -> [D14] declaration::Type | public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; (hilti.hlt:23:1-28:45) [debug/resolver] [hilti.hlt:23:32-28:1] type::Struct "hilti::StreamStatistics" -> set type's declaration to D14 -[debug/resolver] [hilti.hlt:30:27-30:33] declaration::Parameter "any obj" -> set declaration's canonical ID to hilti::obj +[debug/resolver] [hilti.hlt:23:1-28:45] declaration::Type "public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics";" -> set declaration's canonical ID to hilti::StreamStatistics [debug/resolver] [hilti.hlt:30:27-30:33] declaration::Parameter "any obj" -> set declaration's fully qualified ID to obj -[debug/resolver] [hilti.hlt:30:36-30:54] declaration::Parameter "bool newline = True" -> set declaration's canonical ID to hilti::newline +[debug/resolver] [hilti.hlt:30:27-30:33] declaration::Parameter "any obj" -> set declaration's canonical ID to hilti::obj [debug/resolver] [hilti.hlt:30:36-30:54] declaration::Parameter "bool newline = True" -> set declaration's fully qualified ID to newline +[debug/resolver] [hilti.hlt:30:36-30:54] declaration::Parameter "bool newline = True" -> set declaration's canonical ID to hilti::newline [debug/resolver] [hilti.hlt:30:57-30:83] Attribute "&cxxname="hilti::rt::print"" -> Attribute "&cxxname="::hilti::rt::print"" -[debug/resolver] [hilti.hlt:30:1-30:100] declaration::Function "declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype;" -> set declaration's canonical ID to hilti::print [debug/resolver] [hilti.hlt:30:1-30:100] declaration::Function "declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype;" -> set declaration's fully qualified ID to hilti::print [debug/resolver] [hilti.hlt:30:1-30:100] declaration::Function "declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:31:32-31:41] declaration::Parameter "tuple<*> t" -> set declaration's canonical ID to hilti::t +[debug/resolver] [hilti.hlt:30:1-30:100] declaration::Function "declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype;" -> set declaration's canonical ID to hilti::print [debug/resolver] [hilti.hlt:31:32-31:41] declaration::Parameter "tuple<*> t" -> set declaration's fully qualified ID to t -[debug/resolver] [hilti.hlt:31:44-31:62] declaration::Parameter "bool newline = True" -> set declaration's canonical ID to hilti::newline_2 +[debug/resolver] [hilti.hlt:31:32-31:41] declaration::Parameter "tuple<*> t" -> set declaration's canonical ID to hilti::t [debug/resolver] [hilti.hlt:31:44-31:62] declaration::Parameter "bool newline = True" -> set declaration's fully qualified ID to newline +[debug/resolver] [hilti.hlt:31:44-31:62] declaration::Parameter "bool newline = True" -> set declaration's canonical ID to hilti::newline_2 [debug/resolver] [hilti.hlt:31:65-31:98] Attribute "&cxxname="hilti::rt::tuple::print"" -> Attribute "&cxxname="::hilti::rt::tuple::print"" -[debug/resolver] [hilti.hlt:31:1-31:115] declaration::Function "declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype;" -> set declaration's canonical ID to hilti::printTuple [debug/resolver] [hilti.hlt:31:1-31:115] declaration::Function "declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype;" -> set declaration's fully qualified ID to hilti::printTuple [debug/resolver] [hilti.hlt:31:1-31:115] declaration::Function "declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:33:27-33:43] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream +[debug/resolver] [hilti.hlt:31:1-31:115] declaration::Function "declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype;" -> set declaration's canonical ID to hilti::printTuple [debug/resolver] [hilti.hlt:33:27-33:43] declaration::Parameter "string dbg_stream" -> set declaration's fully qualified ID to dbg_stream -[debug/resolver] [hilti.hlt:33:46-33:52] declaration::Parameter "any obj" -> set declaration's canonical ID to hilti::obj_2 +[debug/resolver] [hilti.hlt:33:27-33:43] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream [debug/resolver] [hilti.hlt:33:46-33:52] declaration::Parameter "any obj" -> set declaration's fully qualified ID to obj +[debug/resolver] [hilti.hlt:33:46-33:52] declaration::Parameter "any obj" -> set declaration's canonical ID to hilti::obj_2 [debug/resolver] [hilti.hlt:33:55-33:88] Attribute "&cxxname="hilti::rt::debug::print"" -> Attribute "&cxxname="::hilti::rt::debug::print"" -[debug/resolver] [hilti.hlt:33:1-33:105] declaration::Function "declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype;" -> set declaration's canonical ID to hilti::debug [debug/resolver] [hilti.hlt:33:1-33:105] declaration::Function "declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype;" -> set declaration's fully qualified ID to hilti::debug [debug/resolver] [hilti.hlt:33:1-33:105] declaration::Function "declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:34:33-34:49] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream_2 +[debug/resolver] [hilti.hlt:33:1-33:105] declaration::Function "declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype;" -> set declaration's canonical ID to hilti::debug [debug/resolver] [hilti.hlt:34:33-34:49] declaration::Parameter "string dbg_stream" -> set declaration's fully qualified ID to dbg_stream +[debug/resolver] [hilti.hlt:34:33-34:49] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream_2 [debug/resolver] [hilti.hlt:34:52-34:86] Attribute "&cxxname="hilti::rt::debug::indent"" -> Attribute "&cxxname="::hilti::rt::debug::indent"" -[debug/resolver] [hilti.hlt:34:1-34:103] declaration::Function "declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype;" -> set declaration's canonical ID to hilti::debugIndent [debug/resolver] [hilti.hlt:34:1-34:103] declaration::Function "declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype;" -> set declaration's fully qualified ID to hilti::debugIndent [debug/resolver] [hilti.hlt:34:1-34:103] declaration::Function "declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:35:33-35:49] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream_3 +[debug/resolver] [hilti.hlt:34:1-34:103] declaration::Function "declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype;" -> set declaration's canonical ID to hilti::debugIndent [debug/resolver] [hilti.hlt:35:33-35:49] declaration::Parameter "string dbg_stream" -> set declaration's fully qualified ID to dbg_stream +[debug/resolver] [hilti.hlt:35:33-35:49] declaration::Parameter "string dbg_stream" -> set declaration's canonical ID to hilti::dbg_stream_3 [debug/resolver] [hilti.hlt:35:52-35:86] Attribute "&cxxname="hilti::rt::debug::dedent"" -> Attribute "&cxxname="::hilti::rt::debug::dedent"" -[debug/resolver] [hilti.hlt:35:1-35:103] declaration::Function "declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype;" -> set declaration's canonical ID to hilti::debugDedent [debug/resolver] [hilti.hlt:35:1-35:103] declaration::Function "declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype;" -> set declaration's fully qualified ID to hilti::debugDedent [debug/resolver] [hilti.hlt:35:1-35:103] declaration::Function "declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype;" -> creating function call operator +[debug/resolver] [hilti.hlt:35:1-35:103] declaration::Function "declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype;" -> set declaration's canonical ID to hilti::debugDedent [debug/resolver] [hilti.hlt:37:36-37:75] Attribute "&cxxname="hilti::rt::time::current_time"" -> Attribute "&cxxname="::hilti::rt::time::current_time"" -[debug/resolver] [hilti.hlt:37:1-37:92] declaration::Function "declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype;" -> set declaration's canonical ID to hilti::current_time [debug/resolver] [hilti.hlt:37:1-37:92] declaration::Function "declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype;" -> set declaration's fully qualified ID to hilti::current_time [debug/resolver] [hilti.hlt:37:1-37:92] declaration::Function "declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:38:28-38:37] declaration::Parameter "uint<64> y" -> set declaration's canonical ID to hilti::y +[debug/resolver] [hilti.hlt:37:1-37:92] declaration::Function "declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype;" -> set declaration's canonical ID to hilti::current_time [debug/resolver] [hilti.hlt:38:28-38:37] declaration::Parameter "uint<64> y" -> set declaration's fully qualified ID to y -[debug/resolver] [hilti.hlt:38:40-38:49] declaration::Parameter "uint<64> m" -> set declaration's canonical ID to hilti::m +[debug/resolver] [hilti.hlt:38:28-38:37] declaration::Parameter "uint<64> y" -> set declaration's canonical ID to hilti::y [debug/resolver] [hilti.hlt:38:40-38:49] declaration::Parameter "uint<64> m" -> set declaration's fully qualified ID to m -[debug/resolver] [hilti.hlt:38:52-38:61] declaration::Parameter "uint<64> d" -> set declaration's canonical ID to hilti::d +[debug/resolver] [hilti.hlt:38:40-38:49] declaration::Parameter "uint<64> m" -> set declaration's canonical ID to hilti::m [debug/resolver] [hilti.hlt:38:52-38:61] declaration::Parameter "uint<64> d" -> set declaration's fully qualified ID to d -[debug/resolver] [hilti.hlt:38:64-38:73] declaration::Parameter "uint<64> H" -> set declaration's canonical ID to hilti::H +[debug/resolver] [hilti.hlt:38:52-38:61] declaration::Parameter "uint<64> d" -> set declaration's canonical ID to hilti::d [debug/resolver] [hilti.hlt:38:64-38:73] declaration::Parameter "uint<64> H" -> set declaration's fully qualified ID to H -[debug/resolver] [hilti.hlt:38:76-38:85] declaration::Parameter "uint<64> M" -> set declaration's canonical ID to hilti::M +[debug/resolver] [hilti.hlt:38:64-38:73] declaration::Parameter "uint<64> H" -> set declaration's canonical ID to hilti::H [debug/resolver] [hilti.hlt:38:76-38:85] declaration::Parameter "uint<64> M" -> set declaration's fully qualified ID to M -[debug/resolver] [hilti.hlt:38:88-38:97] declaration::Parameter "uint<64> S" -> set declaration's canonical ID to hilti::S +[debug/resolver] [hilti.hlt:38:76-38:85] declaration::Parameter "uint<64> M" -> set declaration's canonical ID to hilti::M [debug/resolver] [hilti.hlt:38:88-38:97] declaration::Parameter "uint<64> S" -> set declaration's fully qualified ID to S +[debug/resolver] [hilti.hlt:38:88-38:97] declaration::Parameter "uint<64> S" -> set declaration's canonical ID to hilti::S [debug/resolver] [hilti.hlt:38:100-38:133] Attribute "&cxxname="hilti::rt::time::mktime"" -> Attribute "&cxxname="::hilti::rt::time::mktime"" -[debug/resolver] [hilti.hlt:38:1-38:150] declaration::Function "declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype;" -> set declaration's canonical ID to hilti::mktime [debug/resolver] [hilti.hlt:38:1-38:150] declaration::Function "declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype;" -> set declaration's fully qualified ID to hilti::mktime [debug/resolver] [hilti.hlt:38:1-38:150] declaration::Function "declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype;" -> creating function call operator +[debug/resolver] [hilti.hlt:38:1-38:150] declaration::Function "declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype;" -> set declaration's canonical ID to hilti::mktime [debug/resolver] [hilti.hlt:40:29-40:70] Attribute "&cxxname="hilti::rt::abort_with_backtrace"" -> Attribute "&cxxname="::hilti::rt::abort_with_backtrace"" -[debug/resolver] [hilti.hlt:40:1-40:87] declaration::Function "declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype;" -> set declaration's canonical ID to hilti::abort [debug/resolver] [hilti.hlt:40:1-40:87] declaration::Function "declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype;" -> set declaration's fully qualified ID to hilti::abort [debug/resolver] [hilti.hlt:40:1-40:87] declaration::Function "declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:42:50-42:60] declaration::Parameter "string name" -> set declaration's canonical ID to hilti::name +[debug/resolver] [hilti.hlt:40:1-40:87] declaration::Function "declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype;" -> set declaration's canonical ID to hilti::abort [debug/resolver] [hilti.hlt:42:50-42:60] declaration::Parameter "string name" -> set declaration's fully qualified ID to name -[debug/resolver] [hilti.hlt:42:63-42:92] declaration::Parameter "optional> size = Null" -> set declaration's canonical ID to hilti::size +[debug/resolver] [hilti.hlt:42:50-42:60] declaration::Parameter "string name" -> set declaration's canonical ID to hilti::name [debug/resolver] [hilti.hlt:42:63-42:92] declaration::Parameter "optional> size = Null" -> set declaration's fully qualified ID to size +[debug/resolver] [hilti.hlt:42:63-42:92] declaration::Parameter "optional> size = Null" -> set declaration's canonical ID to hilti::size [debug/resolver] [hilti.hlt:42:95-42:131] Attribute "&cxxname="hilti::rt::profiler::start"" -> Attribute "&cxxname="::hilti::rt::profiler::start"" -[debug/resolver] [hilti.hlt:42:1-42:148] declaration::Function "declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype;" -> set declaration's canonical ID to hilti::profiler_start [debug/resolver] [hilti.hlt:42:1-42:148] declaration::Function "declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype;" -> set declaration's fully qualified ID to hilti::profiler_start [debug/resolver] [hilti.hlt:42:1-42:148] declaration::Function "declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:43:35-43:54] declaration::Parameter "optional p" -> set declaration's canonical ID to hilti::p +[debug/resolver] [hilti.hlt:42:1-42:148] declaration::Function "declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype;" -> set declaration's canonical ID to hilti::profiler_start [debug/resolver] [hilti.hlt:43:35-43:54] declaration::Parameter "optional p" -> set declaration's fully qualified ID to p -[debug/resolver] [hilti.hlt:43:57-43:86] declaration::Parameter "optional> size = Null" -> set declaration's canonical ID to hilti::size_2 +[debug/resolver] [hilti.hlt:43:35-43:54] declaration::Parameter "optional p" -> set declaration's canonical ID to hilti::p [debug/resolver] [hilti.hlt:43:57-43:86] declaration::Parameter "optional> size = Null" -> set declaration's fully qualified ID to size +[debug/resolver] [hilti.hlt:43:57-43:86] declaration::Parameter "optional> size = Null" -> set declaration's canonical ID to hilti::size_2 [debug/resolver] [hilti.hlt:43:89-43:124] Attribute "&cxxname="hilti::rt::profiler::stop"" -> Attribute "&cxxname="::hilti::rt::profiler::stop"" -[debug/resolver] [hilti.hlt:43:1-43:141] declaration::Function "declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype;" -> set declaration's canonical ID to hilti::profiler_stop [debug/resolver] [hilti.hlt:43:1-43:141] declaration::Function "declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype;" -> set declaration's fully qualified ID to hilti::profiler_stop [debug/resolver] [hilti.hlt:43:1-43:141] declaration::Function "declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype;" -> creating function call operator +[debug/resolver] [hilti.hlt:43:1-43:141] declaration::Function "declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype;" -> set declaration's canonical ID to hilti::profiler_stop [debug/resolver] [hilti.hlt:46:35-46:65] Attribute "&cxxname="hilti::rt::Exception"" -> Attribute "&cxxname="::hilti::rt::Exception"" -[debug/resolver] [hilti.hlt:46:1-46:66] declaration::Type "public type Exception = exception &cxxname="::hilti::rt::Exception";" -> set declaration's canonical ID to hilti::Exception [debug/resolver] [hilti.hlt:46:1-46:66] declaration::Type "public type Exception = exception &cxxname="::hilti::rt::Exception";" -> set declaration's fully qualified ID to hilti::Exception -[debug/resolver] -> [D15] declaration::Type hilti::Exception | public type Exception = exception &cxxname="::hilti::rt::Exception"; (hilti.hlt:46:1-46:66) +[debug/resolver] -> [D15] declaration::Type | public type Exception = exception &cxxname="::hilti::rt::Exception"; (hilti.hlt:46:1-46:66) [debug/resolver] [hilti.hlt:46:25-46:33] type::Exception "hilti::Exception" -> set type's declaration to D15 +[debug/resolver] [hilti.hlt:46:1-46:66] declaration::Type "public type Exception = exception &cxxname="::hilti::rt::Exception";" -> set declaration's canonical ID to hilti::Exception [debug/resolver] [hilti.hlt:49:55-49:79] Attribute "&cxxname="std::exception"" -> Attribute "&cxxname="::std::exception"" -[debug/resolver] [hilti.hlt:49:1-49:80] declaration::Type "public type SystemException = [exception :Exception &cxxname="::std::exception";" -> set declaration's canonical ID to hilti::SystemException [debug/resolver] [hilti.hlt:49:1-49:80] declaration::Type "public type SystemException = [exception :Exception &cxxname="::std::exception";" -> set declaration's fully qualified ID to hilti::SystemException -[debug/resolver] -> [D16] declaration::Type hilti::SystemException | public type SystemException = [exception :Exception &cxxname="::std::exception"; (hilti.hlt:49:1-49:80) +[debug/resolver] -> [D16] declaration::Type | public type SystemException = [exception :Exception &cxxname="::std::exception"; (hilti.hlt:49:1-49:80) [debug/resolver] [hilti.hlt:49:31-49:53] type::Exception "hilti::SystemException" -> set type's declaration to D16 +[debug/resolver] [hilti.hlt:49:1-49:80] declaration::Type "public type SystemException = [exception :Exception &cxxname="::std::exception";" -> set declaration's canonical ID to hilti::SystemException [debug/resolver] [hilti.hlt:53:52-53:85] Attribute "&cxxname="hilti::rt::RuntimeError"" -> Attribute "&cxxname="::hilti::rt::RuntimeError"" -[debug/resolver] [hilti.hlt:53:1-53:86] declaration::Type "public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError";" -> set declaration's canonical ID to hilti::RuntimeError [debug/resolver] [hilti.hlt:53:1-53:86] declaration::Type "public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError";" -> set declaration's fully qualified ID to hilti::RuntimeError -[debug/resolver] -> [D17] declaration::Type hilti::RuntimeError | public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; (hilti.hlt:53:1-53:86) +[debug/resolver] -> [D17] declaration::Type | public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; (hilti.hlt:53:1-53:86) [debug/resolver] [hilti.hlt:53:28-53:50] type::Exception "hilti::RuntimeError" -> set type's declaration to D17 +[debug/resolver] [hilti.hlt:53:1-53:86] declaration::Type "public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError";" -> set declaration's canonical ID to hilti::RuntimeError [debug/resolver] [hilti.hlt:56:58-56:97] Attribute "&cxxname="hilti::rt::RecoverableFailure"" -> Attribute "&cxxname="::hilti::rt::RecoverableFailure"" -[debug/resolver] [hilti.hlt:56:1-56:98] declaration::Type "public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure";" -> set declaration's canonical ID to hilti::RecoverableFailure [debug/resolver] [hilti.hlt:56:1-56:98] declaration::Type "public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure";" -> set declaration's fully qualified ID to hilti::RecoverableFailure -[debug/resolver] -> [D18] declaration::Type hilti::RecoverableFailure | public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; (hilti.hlt:56:1-56:98) +[debug/resolver] -> [D18] declaration::Type | public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; (hilti.hlt:56:1-56:98) [debug/resolver] [hilti.hlt:56:34-56:56] type::Exception "hilti::RecoverableFailure" -> set type's declaration to D18 +[debug/resolver] [hilti.hlt:56:1-56:98] declaration::Type "public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure";" -> set declaration's canonical ID to hilti::RecoverableFailure [debug/resolver] [hilti.hlt:59:51-59:83] Attribute "&cxxname="hilti::rt::MissingData"" -> Attribute "&cxxname="::hilti::rt::MissingData"" -[debug/resolver] [hilti.hlt:59:1-59:84] declaration::Type "public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData";" -> set declaration's canonical ID to hilti::MissingData [debug/resolver] [hilti.hlt:59:1-59:84] declaration::Type "public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData";" -> set declaration's fully qualified ID to hilti::MissingData -[debug/resolver] -> [D19] declaration::Type hilti::MissingData | public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; (hilti.hlt:59:1-59:84) +[debug/resolver] -> [D19] declaration::Type | public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; (hilti.hlt:59:1-59:84) [debug/resolver] [hilti.hlt:59:27-59:49] type::Exception "hilti::MissingData" -> set type's declaration to D19 -[debug/resolver] [hilti.hlt:62:38-62:59] declaration::Parameter "hilti::SystemException except" -> set declaration's canonical ID to hilti::except +[debug/resolver] [hilti.hlt:59:1-59:84] declaration::Type "public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData";" -> set declaration's canonical ID to hilti::MissingData [debug/resolver] [hilti.hlt:62:38-62:59] declaration::Parameter "hilti::SystemException except" -> set declaration's fully qualified ID to except +[debug/resolver] [hilti.hlt:62:38-62:59] declaration::Parameter "hilti::SystemException except" -> set declaration's canonical ID to hilti::except [debug/resolver] [hilti.hlt:62:62-62:98] Attribute "&cxxname="hilti::rt::exception::what"" -> Attribute "&cxxname="::hilti::rt::exception::what"" -[debug/resolver] [hilti.hlt:62:1-62:115] declaration::Function "declare public function string exception_what(hilti::SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's canonical ID to hilti::exception_what [debug/resolver] [hilti.hlt:62:1-62:115] declaration::Function "declare public function string exception_what(hilti::SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's fully qualified ID to hilti::exception_what [debug/resolver] [hilti.hlt:62:1-62:115] declaration::Function "declare public function string exception_what(hilti::SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:63:38-63:62] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's canonical ID to hilti::except_2 +[debug/resolver] [hilti.hlt:62:1-62:115] declaration::Function "declare public function string exception_what(hilti::SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's canonical ID to hilti::exception_what [debug/resolver] [hilti.hlt:63:38-63:62] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's fully qualified ID to except +[debug/resolver] [hilti.hlt:63:38-63:62] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's canonical ID to hilti::except_2 [debug/resolver] [hilti.hlt:63:65-63:101] Attribute "&cxxname="hilti::rt::exception::what"" -> Attribute "&cxxname="::hilti::rt::exception::what"" -[debug/resolver] [hilti.hlt:63:1-63:118] declaration::Function "declare public function string exception_what(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's canonical ID to hilti::exception_what_2 [debug/resolver] [hilti.hlt:63:1-63:118] declaration::Function "declare public function string exception_what(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's fully qualified ID to hilti::exception_what [debug/resolver] [hilti.hlt:63:1-63:118] declaration::Function "declare public function string exception_what(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:66:39-66:60] declaration::Parameter "hilti::SystemException except" -> set declaration's canonical ID to hilti::except_3 +[debug/resolver] [hilti.hlt:63:1-63:118] declaration::Function "declare public function string exception_what(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype;" -> set declaration's canonical ID to hilti::exception_what_2 [debug/resolver] [hilti.hlt:66:39-66:60] declaration::Parameter "hilti::SystemException except" -> set declaration's fully qualified ID to except +[debug/resolver] [hilti.hlt:66:39-66:60] declaration::Parameter "hilti::SystemException except" -> set declaration's canonical ID to hilti::except_3 [debug/resolver] [hilti.hlt:66:63-66:100] Attribute "&cxxname="hilti::rt::exception::where"" -> Attribute "&cxxname="::hilti::rt::exception::where"" -[debug/resolver] [hilti.hlt:66:1-66:117] declaration::Function "declare public function string exception_where(hilti::SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's canonical ID to hilti::exception_where [debug/resolver] [hilti.hlt:66:1-66:117] declaration::Function "declare public function string exception_where(hilti::SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's fully qualified ID to hilti::exception_where [debug/resolver] [hilti.hlt:66:1-66:117] declaration::Function "declare public function string exception_where(hilti::SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> creating function call operator -[debug/resolver] [hilti.hlt:67:39-67:63] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's canonical ID to hilti::except_4 +[debug/resolver] [hilti.hlt:66:1-66:117] declaration::Function "declare public function string exception_where(hilti::SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's canonical ID to hilti::exception_where [debug/resolver] [hilti.hlt:67:39-67:63] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's fully qualified ID to except +[debug/resolver] [hilti.hlt:67:39-67:63] declaration::Parameter "hilti::RecoverableFailure except" -> set declaration's canonical ID to hilti::except_4 [debug/resolver] [hilti.hlt:67:66-67:103] Attribute "&cxxname="hilti::rt::exception::where"" -> Attribute "&cxxname="::hilti::rt::exception::where"" -[debug/resolver] [hilti.hlt:67:1-67:120] declaration::Function "declare public function string exception_where(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's canonical ID to hilti::exception_where_2 [debug/resolver] [hilti.hlt:67:1-67:120] declaration::Function "declare public function string exception_where(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's fully qualified ID to hilti::exception_where [debug/resolver] [hilti.hlt:67:1-67:120] declaration::Function "declare public function string exception_where(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> creating function call operator +[debug/resolver] [hilti.hlt:67:1-67:120] declaration::Function "declare public function string exception_where(hilti::RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype;" -> set declaration's canonical ID to hilti::exception_where_2 [debug/resolver] [hilti.hlt:3:1-68:1] declaration::Module "module hilti { public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; public type Captures = vector; public type Profiler = Profiler &cxxname="::hilti::rt::Profiler"; public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; public type Exception = exception &cxxname="::hilti::rt::Exception"; public type SystemException = [exception :Exception &cxxname="::std::exception"; public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype; declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype; declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype; declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype; declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype; declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype; declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype; declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype; declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype; declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype; declare public function string exception_what(SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_what(RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_where(SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype; declare public function string exception_where(RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype; }" -> set declaration's fully qualified ID to hilti [debug/resolver] [hilti.hlt:3:1-68:1] declaration::Module "module hilti { public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; public type Captures = vector; public type Profiler = Profiler &cxxname="::hilti::rt::Profiler"; public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; public type Exception = exception &cxxname="::hilti::rt::Exception"; public type SystemException = [exception :Exception &cxxname="::std::exception"; public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype; declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype; declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype; declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype; declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype; declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype; declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype; declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype; declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype; declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype; declare public function string exception_what(SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_what(RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_where(SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype; declare public function string exception_where(RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype; }" -> set module's canonical ID to hilti [debug/resolver] -> [D20] declaration::Module hilti | module hilti { public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; public type Captures = vector; public type Profiler = Profiler &cxxname="::hilti::rt::Profiler"; public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; public type Exception = exception &cxxname="::hilti::rt::Exception"; public type SystemException = [exception :Exception &cxxname="::std::exception"; public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype; declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype; declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype; declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype; declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype; declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype; declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype; declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype; declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype; declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype; declare public function string exception_what(SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_what(RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_where(SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype; declare public function string exception_where(RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype; } (hilti.hlt:3:1-68:1) [debug/resolver] [hilti.hlt:3:1-68:1] declaration::Module "module hilti { public type BitOrder = enum { LSB0 = 0, MSB0 = 1 } &cxxname="::hilti::rt::integer::BitOrder"; public type ByteOrder = enum { Little = 0, Big = 1, Network = 2, Host = 3 } &cxxname="::hilti::rt::ByteOrder"; public type Side = enum { Left = 0, Right = 1, Both = 2 } &cxxname="::hilti::rt::bytes::Side"; public type AddressFamily = enum { IPv4 = 0, IPv6 = 1 } &cxxname="::hilti::rt::AddressFamily"; public type RealType = enum { IEEE754_Single = 0, IEEE754_Double = 1 } &cxxname="::hilti::rt::real::Type"; public type Protocol = enum { TCP = 0, UDP = 1, ICMP = 2 } &cxxname="::hilti::rt::Protocol"; public type Charset = enum { ASCII = 0, UTF8 = 1, UTF16LE = 2, UTF16BE = 3 } &cxxname="::hilti::rt::unicode::Charset"; public type DecodeErrorStrategy = enum { IGNORE = 0, REPLACE = 1, STRICT = 2 } &cxxname="::hilti::rt::unicode::DecodeErrorStrategy"; public type Captures = vector; public type Profiler = Profiler &cxxname="::hilti::rt::Profiler"; public type MatchState = struct { method Captures captures(view data); } &cxxname="::hilti::rt::regexp::MatchState"; public type StreamStatistics = struct { uint<64> num_data_bytes; uint<64> num_data_chunks; uint<64> num_gap_bytes; uint<64> num_gap_chunks; } &cxxname="::hilti::rt::stream::Statistics"; public type Exception = exception &cxxname="::hilti::rt::Exception"; public type SystemException = [exception :Exception &cxxname="::std::exception"; public type RuntimeError = [exception :Exception &cxxname="::hilti::rt::RuntimeError"; public type RecoverableFailure = [exception :Exception &cxxname="::hilti::rt::RecoverableFailure"; public type MissingData = [exception :Exception &cxxname="::hilti::rt::MissingData"; declare public function void print(any obj, bool newline = True) &cxxname="::hilti::rt::print" &have_prototype; declare public function void printTuple(tuple<*> t, bool newline = True) &cxxname="::hilti::rt::tuple::print" &have_prototype; declare public function void debug(string dbg_stream, any obj) &cxxname="::hilti::rt::debug::print" &have_prototype; declare public function void debugIndent(string dbg_stream) &cxxname="::hilti::rt::debug::indent" &have_prototype; declare public function void debugDedent(string dbg_stream) &cxxname="::hilti::rt::debug::dedent" &have_prototype; declare public function time current_time() &cxxname="::hilti::rt::time::current_time" &have_prototype; declare public function time mktime(uint<64> y, uint<64> m, uint<64> d, uint<64> H, uint<64> M, uint<64> S) &cxxname="::hilti::rt::time::mktime" &have_prototype; declare public function void abort() &cxxname="::hilti::rt::abort_with_backtrace" &have_prototype; declare public function optional profiler_start(string name, optional> size = Null) &cxxname="::hilti::rt::profiler::start" &have_prototype; declare public function void profiler_stop(optional p, optional> size = Null) &cxxname="::hilti::rt::profiler::stop" &have_prototype; declare public function string exception_what(SystemException except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_what(RecoverableFailure except) &cxxname="::hilti::rt::exception::what" &have_prototype; declare public function string exception_where(SystemException except) &cxxname="::hilti::rt::exception::where" &have_prototype; declare public function string exception_where(RecoverableFailure except) &cxxname="::hilti::rt::exception::where" &have_prototype; }" -> set module's declaration index to D20 -[debug/resolver] [bar.hlt:4:1-4:11] declaration::ImportedModule "import Foo;" -> set declaration's canonical ID to Bar::Foo [debug/resolver] [bar.hlt:4:1-4:11] declaration::ImportedModule "import Foo;" -> set declaration's fully qualified ID to Bar::Foo [debug/resolver] [bar.hlt:4:1-4:11] declaration::ImportedModule "import Foo;" -> imported module Foo -[debug/resolver] [bar.hlt:6:1-6:26] declaration::Type "public type Bar1 = string;" -> set declaration's canonical ID to Bar::Bar1 +[debug/resolver] [bar.hlt:4:1-4:11] declaration::ImportedModule "import Foo;" -> set declaration's canonical ID to Bar::Foo [debug/resolver] [bar.hlt:6:1-6:26] declaration::Type "public type Bar1 = string;" -> set declaration's fully qualified ID to Bar::Bar1 -[debug/resolver] -> [D21] declaration::Type Bar::Bar1 | public type Bar1 = string; (bar.hlt:6:1-6:26) +[debug/resolver] -> [D21] declaration::Type | public type Bar1 = string; (bar.hlt:6:1-6:26) [debug/resolver] [bar.hlt:6:20-6:25] type::String "string" -> set type's declaration to D21 -[debug/resolver] [bar.hlt:7:1-7:29] declaration::Type "public type Bar2 = Foo::Foo1;" -> set declaration's canonical ID to Bar::Bar2 +[debug/resolver] [bar.hlt:6:1-6:26] declaration::Type "public type Bar1 = string;" -> set declaration's canonical ID to Bar::Bar1 [debug/resolver] [bar.hlt:7:1-7:29] declaration::Type "public type Bar2 = Foo::Foo1;" -> set declaration's fully qualified ID to Bar::Bar2 -[debug/resolver] [bar.hlt:9:21-9:28] declaration::Parameter "Bar1 bar" -> set declaration's canonical ID to Bar::bar +[debug/resolver] [bar.hlt:7:1-7:29] declaration::Type "public type Bar2 = Foo::Foo1;" -> set declaration's canonical ID to Bar::Bar2 [debug/resolver] [bar.hlt:9:21-9:28] declaration::Parameter "Bar1 bar" -> set declaration's fully qualified ID to bar -[debug/resolver] [bar.hlt:9:31-9:43] declaration::Parameter "Foo::Foo1 foo" -> set declaration's canonical ID to Bar::foo +[debug/resolver] [bar.hlt:9:21-9:28] declaration::Parameter "Bar1 bar" -> set declaration's canonical ID to Bar::bar [debug/resolver] [bar.hlt:9:31-9:43] declaration::Parameter "Foo::Foo1 foo" -> set declaration's fully qualified ID to foo -[debug/resolver] [bar.hlt:9:1-9:59] declaration::Function "function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; }" -> set declaration's canonical ID to Bar::bar_2 +[debug/resolver] [bar.hlt:9:31-9:43] declaration::Parameter "Foo::Foo1 foo" -> set declaration's canonical ID to Bar::foo [debug/resolver] [bar.hlt:9:1-9:59] declaration::Function "function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; }" -> set declaration's fully qualified ID to Bar::bar +[debug/resolver] [bar.hlt:9:1-9:59] declaration::Function "function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; }" -> set declaration's canonical ID to Bar::bar_2 [debug/resolver] [bar.hlt:2:1-11:1] declaration::Module "module Bar { import Foo; public type Bar1 = string; public type Bar2 = Foo::Foo1; function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; } }" -> set declaration's fully qualified ID to Bar [debug/resolver] [bar.hlt:2:1-11:1] declaration::Module "module Bar { import Foo; public type Bar1 = string; public type Bar2 = Foo::Foo1; function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; } }" -> set module's canonical ID to Bar [debug/resolver] -> [D22] declaration::Module Bar | module Bar { import Foo; public type Bar1 = string; public type Bar2 = Foo::Foo1; function string bar(Bar1 bar, Foo::Foo1 foo) { return ""; } } (bar.hlt:2:1-11:1) From 96a329cdf3d58f57e18deebb860b1c65c33a98bb Mon Sep 17 00:00:00 2001 From: Benjamin Bannier Date: Wed, 7 Jan 2026 14:18:26 +0100 Subject: [PATCH 2/3] Add `assert` to address coverity diagnostic. This code was already valid before, but coverity discovered different usage before and inferred that the dereferenced pointer could be null here as well. Add an `assert` to make clear that we expect it to be set. --- hilti/toolchain/src/compiler/validator.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hilti/toolchain/src/compiler/validator.cc b/hilti/toolchain/src/compiler/validator.cc index 7710933338..a6fee38756 100644 --- a/hilti/toolchain/src/compiler/validator.cc +++ b/hilti/toolchain/src/compiler/validator.cc @@ -939,7 +939,9 @@ struct VisitorCFG : visitor::PreOrder, public validator::VisitorMixIn { return false; for ( const auto& s : successors ) { - if ( ! ensureReturns(cfg, *cfg.graph().getNode(s), seen) ) + const auto* n = cfg.graph().getNode(s); + assert(n); + if ( ! ensureReturns(cfg, *n, seen) ) return false; } From 5e4ad24d471cb7260c8cded836ceae8dcd7f49ea Mon Sep 17 00:00:00 2001 From: Benjamin Bannier Date: Mon, 9 Feb 2026 15:43:52 +0100 Subject: [PATCH 3/3] Drop outdated FIXME. --- hilti/toolchain/include/compiler/detail/optimizer/optimizer.h | 1 - 1 file changed, 1 deletion(-) diff --git a/hilti/toolchain/include/compiler/detail/optimizer/optimizer.h b/hilti/toolchain/include/compiler/detail/optimizer/optimizer.h index e637469976..dd92bae00e 100644 --- a/hilti/toolchain/include/compiler/detail/optimizer/optimizer.h +++ b/hilti/toolchain/include/compiler/detail/optimizer/optimizer.h @@ -279,7 +279,6 @@ class Optimizer { * * @param id the ID to check */ - // FIXME(bbannier): drop `%`? static bool isFeatureFlag(const ID& id) { return util::startsWith(id.local(), HILTI_INTERNAL_ID("feat%")); } /**