# # Currently this is just a dummy/placeholder file. # # Copyright © 2025 Samuel Lidén Borell # # SPDX-License-Identifier: EUPL-1.2+ # # Problems: # # - Want to be able to have functions in the main file also, # so it has to be a class. # - Should it be possible to pass around the Main object? # - Should it be possible to support event-driven flows? # e.g. for GUI programs, or for phone apps (that can be stopped/ # started by decisions by the OS), or for services (also start/stop), # or for socket-activated stuff (could allow multiple activations # per instance/process), or FastCGI, etc... # # Should the main file be: # 1. a special case # 2. an external extension of an abstract class # 3. a standard class that has a `main` method that takes some # parameter with the main class? # 4. a standard class that has a `start` method that takes the # main class (and e.g. stores it in an instance variable), # plus "event" methods? or the possibility to register events? func testfunc String s SomeType st returns SomeResult res code int x unsigned y wrapping z int w long l var unsigned long vul signed byte sgb aliased SomeType st_aliased return true and false return true or false return (true and false) or true return 123 == 999 or 123 == 123 return not (true or (not false)) f x (g y z) w # This is not allowed, since it would be ambiguous #g x - y # It should be written with parentheses g x (-y) g (x - y) y while false while false break end break loopempty return false loopend return false end for Thing t in 123 # FIXME should be an array, iterator or iterable return 456 end Thing t1 Thing t2 = true if false return true elif true return false else return true end Int64 lowest_int = -0x8000_0000_0000_0000 UInt64 max_uint = 18446744073709551615 String empty1 = "" String s1 = "test" String empty2 = "" String escapetest = "test\\ escapes «f" String longstring = "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong" switch max_uint end switch max_uint case 1 return true case 2 return false # TODO multi-valued cases # this is tricky to do safely, because `case 1` immediately followed by # `case 2` can happen if all statements in the block of `case 1` have # been commented out. # options: # 1. special handling if multiple cases appear on consecutive lines. # 2. multiple values separated by spaces # 3. multiple values in array literals? (this would make it impossible # to add support for switching on arrays) end switch max_uint default return true end switch max_uint case 1 return true default return false end assert -333 < 222 assert 1+2 <> 3+4 and 5*6 == (711*511)-511 return -321 return 11 - 0x22 + 33 + 4_4 - (0b101 - (55 - 66)) section sec1 return true if true return false end return true section done return false return true section fail return false end func other A a1 A a2 B b returns A x B y end func noargs end func f int arg1 int arg2 int arg3 code end func g int x int y returns int ret code return x + (2*y) end