/* TSDL */ typealias integer { size = 8; align = 8; signed = false; base = hex; } := uint8_t; typealias integer { size = 32; align = 8; signed = false; base = hex; } := uint32_t; trace { major = 1; minor = 2; byte_order = le; uuid = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"; packet.header := struct { uint32_t magic; }; }; variant var { uint8_t small; uint32_t big; }; enum select : uint8_t { small = 0, big = 1 }; stream { event.header := struct { enum select a; }; }; event { name = event1; fields := struct { /* * TODO: Only an identifier is expected in the variant/sequence * tag. It should be a dotted expression (a path). * */ variant var b; /* * TODO * The path lookup only allows lookup for a full path starting * from the root or for a field within the current scope. The * CTF spec allows defining a relative sub-scope for a preceding * field. */ struct { enum select sel2; } str2; variant var2 b; /* * TODO: Deal with path name lookup conflict, e.g. if a field is * named "stream", it conflicts with the stream dynamic scope. * Local fields hide dynamic scopes. */ struct { enum select sel3 } stream; variant var3 c; /* But now the following lookup should fail: */ /* variant var4 d; */ /* * TODO: support conflict-free local-scoped tags, starting with * ".". */ variant var5 <.stream.sel3> e; }; };