From b0c173910c8131298d9cc74335843fdcf91d4225 Mon Sep 17 00:00:00 2001 From: dave caruso Date: Mon, 16 Sep 2024 17:03:36 -0700 Subject: [PATCH] feat: allow any expression as a function body --- CHANGELOG.md | 2 ++ src/cli_compiler.zig | 2 ++ src/core/Parse.zig | 3 +-- src/core/Sema.zig | 2 +- test/behavior/inferred_return_type | 3 +-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 154b295985f1c51ec43d71762f8c69ff48af868b..ca42670084293a5a01d57f840c05c892fb68abdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## 0.1.7 +- feat: allow any expression as a function body + ## 0.1.6 - breaking: rename `@js` to `@extern`, considering future backends diff --git a/src/cli_compiler.zig b/src/cli_compiler.zig index ef054ca3a20d5f4d6ede392a4f2189b4a483fc80..a13fe48184ffa3dfd1e3aa9fb9c06940645e9de3 100644 --- a/src/cli_compiler.zig +++ b/src/cli_compiler.zig @@ -48,6 +48,8 @@ pub fn main() !u8 { defer Cli.programArgsFree(alloc, args); const opts = arg_config.parse(program_name, args); + if (opts.report_trace == true) Report.debug_show_report_trace = true; + const file_path = try std.fs.path.resolve(alloc, &.{ cwd, opts.positionals orelse diff --git a/src/core/Parse.zig b/src/core/Parse.zig index 64e69aea245518ba9812947cd904e9e7882af9f3..84421173d3a04f341bd60349920b23db46e44279 100644 --- a/src/core/Parse.zig +++ b/src/core/Parse.zig @@ -498,8 +498,7 @@ fn parseFnDecl(p: *Parse) Error!NodeIndex { else null; - try p.expectWithoutAdvance(.start_brace); - const body = try p.parseBlock(); + const body = try p.parseExpression(.expression); const extra = try p.addExtra(Ast.Fn, .{ .params = params orelse .empty, diff --git a/src/core/Sema.zig b/src/core/Sema.zig index ad27c853f23ce867985ba02972d1dcfa6f21c870..09b1d89f2d0f14ff125e31aada08ad0046f11b6e 100644 --- a/src/core/Sema.zig +++ b/src/core/Sema.zig @@ -1706,7 +1706,7 @@ fn coerceRef(s: *Sema, src: LazyNode, ref: Air.Inst.Ref, to: Type) !Air.Inst.Ref }, .int32 => switch (from) { .int32 => unreachable, // same type handled - .numeric_literal => unreachable, // must should comptime known + .numeric_literal => unreachable, // must be comptime known else => {}, }, .float => switch (from) { diff --git a/test/behavior/inferred_return_type b/test/behavior/inferred_return_type index 67c5cbc51abe8a608ea4e2a0fc56cbff6e2aac57..99f9c0b9def1779dd13716550978c33449129f82 100644 --- a/test/behavior/inferred_return_type +++ b/test/behavior/inferred_return_type @@ -1,8 +1,7 @@ let assertEqual = @extern("assertEqual"); -fn getString() { +fn getString() "hello" -} fn main { let str = getString(); -- 2.54.0