diff --git a/examples/139-expression-bodied-fn.sx b/examples/139-expression-bodied-fn.sx new file mode 100644 index 0000000..a4a97f9 --- /dev/null +++ b/examples/139-expression-bodied-fn.sx @@ -0,0 +1,36 @@ +// M1.0 — expression-bodied function declarations. +// +// sx's `=>` body form (already used for lambdas) extends to +// top-level and struct-member function declarations: +// +// name :: (params) -> RetType => expr; +// +// Pins three positions: module-top, struct method, niladic. + +#import "modules/std.sx"; + +double :: (x: s32) -> s32 => x * 2; + +sum :: (a: s32, b: s32) -> s32 => a + b; + +answer :: () -> s32 => 42; + +Point :: struct { + x: s32; + y: s32; + + total :: (self: *Point) -> s32 => self.x + self.y; + scaled :: (self: *Point, by: s32) -> s32 => (self.x + self.y) * by; +} + +main :: () -> s32 { + print("double: {}\n", double(7)); + print("sum: {}\n", sum(3, 4)); + print("answer: {}\n", answer()); + + p := Point.{ x = 10, y = 20 }; + print("total: {}\n", p.total()); + print("scaled: {}\n", p.scaled(3)); + + 0; +} diff --git a/tests/expected/139-expression-bodied-fn.exit b/tests/expected/139-expression-bodied-fn.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/expected/139-expression-bodied-fn.exit @@ -0,0 +1 @@ +0 diff --git a/tests/expected/139-expression-bodied-fn.txt b/tests/expected/139-expression-bodied-fn.txt new file mode 100644 index 0000000..e4af9bc --- /dev/null +++ b/tests/expected/139-expression-bodied-fn.txt @@ -0,0 +1,5 @@ +double: 14 +sum: 7 +answer: 42 +total: 30 +scaled: 90