// Exercise the pretty-print visualizer for the various grammar elements testing_enabled: bool = false; outer: @print type = { object_alias: T requires true == 42; mytype: final type = { protected f: () -> int = 42; g: (virtual this, i:int) -> int = { using namespace ::std; s := "string literal"; ret: int = i; p: const * const int = ret&; if p* < 0 { ret = -p*; } ret += strlen(s) - 10 + s.strlen() * (16 / (3 & 2)) % 3; m: map = (); m[0] = "har" as string; ret -= h("x", m).length(); _ = m; return ret; } private h: (s: std::string, inout m: std::map ) -> std::string pre( m.empty() == false || false, "message" ) pre( 0 < m.ssize() < 100 && true != false, "size is (m.ssize())$" ) = { a := :()={}; b := :()={}; c := :()={}; while s.empty() next a() { break; } do { } next b() while s.empty(); label: for m next c() do (_) { continue label; } if !s.empty() is (true) { a(); } else if !m.empty() { b(); } else { c(); } assert( true ); return :() -> std::string = (s + m[0])$; (); } values: (this, _: T) throws -> (offset: int, name: std::string) = { offset = 53; name = "plugh"; } operator=: (out this) = { } operator=: (out this, that) = { } operator=: (implicit out this, _: int) = { } variadic: (x...: int) = { (std::cout << ... << x); } } test: () = { namespace_alias: namespace == ::std; using std::array; using std::cout; type_alias: type == array; object_alias_1: i8 == 42; object_alias_2: == 42; var: ::outer::mytype = (); cout << var.g(42) << "\n"; cout << inspect var.g(42) -> namespace_alias::string { is 43 = "forty-and-three"; is _ = "default case"; } << "\n"; } x: type = { tup: std::tuple = (); } print: (inout out: std::ostream, args...: Args) requires sizeof...(Args) >= 0u = { (out << ... << args); } all: (args...: Args) -> bool = (... && args); } main: () = { outer::test(); }