From 9de23475f63975f021f7f9b7ae6033a532bb5412 Mon Sep 17 00:00:00 2001 From: Nilton Constantino Date: Thu, 29 Jan 2026 15:45:48 +0000 Subject: [PATCH] fn declaration adjustments --- .../src/frontends/pbs/parser.rs | 4 +- .../prometeu-compiler/tests/parser_tests.rs | 4 +- .../tests/pbs_end_to_end_tests.rs | 2 +- .../tests/pbs_golden_tests.rs | 2 +- .../tests/pbs_lowering_tests.rs | 4 +- .../tests/pbs_typecheck_tests.rs | 10 ++--- .../test01/cartridge/manifest.json | 41 ++++++++++++++++++ .../test01/cartridge/program.disasm.txt | 12 +++++ test-cartridges/test01/cartridge/program.pbc | Bin 0 -> 95 bytes test-cartridges/test01/prometeu.json | 7 +++ test-cartridges/test01/sdk | 1 + test-cartridges/test01/src/main.pbs | 6 +++ test-cartridges/test01/src/sdk.pbs | 3 ++ .../test-cartridges/test01/src/main.pbs | 7 +++ 14 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 test-cartridges/test01/cartridge/manifest.json create mode 100644 test-cartridges/test01/cartridge/program.disasm.txt create mode 100644 test-cartridges/test01/cartridge/program.pbc create mode 100644 test-cartridges/test01/prometeu.json create mode 120000 test-cartridges/test01/sdk create mode 100644 test-cartridges/test01/src/main.pbs create mode 100644 test-cartridges/test01/src/sdk.pbs create mode 100644 test-cartridges/test01/test-cartridges/test01/src/main.pbs diff --git a/crates/prometeu-compiler/src/frontends/pbs/parser.rs b/crates/prometeu-compiler/src/frontends/pbs/parser.rs index 790d67c9..9e44942f 100644 --- a/crates/prometeu-compiler/src/frontends/pbs/parser.rs +++ b/crates/prometeu-compiler/src/frontends/pbs/parser.rs @@ -197,7 +197,7 @@ impl Parser { let start_span = self.consume(TokenKind::Fn)?.span; let name = self.expect_identifier()?; let params = self.parse_param_list()?; - let ret = if self.peek().kind == TokenKind::Arrow { + let ret = if self.peek().kind == TokenKind::Colon { self.advance(); Box::new(self.parse_type_ref()?) } else { @@ -275,7 +275,7 @@ impl Parser { let start_span = self.consume(TokenKind::Fn)?.span; let name = self.expect_identifier()?; let params = self.parse_param_list()?; - let _ret = if self.peek().kind == TokenKind::Arrow { + let _ret = if self.peek().kind == TokenKind::Colon { self.advance(); Some(Box::new(self.parse_type_ref()?)) } else { diff --git a/crates/prometeu-compiler/tests/parser_tests.rs b/crates/prometeu-compiler/tests/parser_tests.rs index 79f80284..5ec2ccf7 100644 --- a/crates/prometeu-compiler/tests/parser_tests.rs +++ b/crates/prometeu-compiler/tests/parser_tests.rs @@ -31,7 +31,7 @@ import math from "./math.pbs"; #[test] fn test_parse_fn_decl() { let source = r#" -fn add(a: int, b: int) -> int { +fn add(a: int, b: int): int { return a + b; } "#; @@ -71,7 +71,7 @@ fn test_parse_service_decl() { let source = r#" pub service Audio { fn play(sound: Sound); - fn stop() -> bool; + fn stop(): bool; } "#; let mut parser = Parser::new(source, 0); diff --git a/crates/prometeu-compiler/tests/pbs_end_to_end_tests.rs b/crates/prometeu-compiler/tests/pbs_end_to_end_tests.rs index 7dc29fdd..9c9060e7 100644 --- a/crates/prometeu-compiler/tests/pbs_end_to_end_tests.rs +++ b/crates/prometeu-compiler/tests/pbs_end_to_end_tests.rs @@ -21,7 +21,7 @@ fn test_compile_hip_program() { // Create main.pbs with HIP effects let code = " - fn main() { + fn frame(): void { let x = alloc int; mutate x as v { let y = v + 1; diff --git a/crates/prometeu-compiler/tests/pbs_golden_tests.rs b/crates/prometeu-compiler/tests/pbs_golden_tests.rs index 5e1630f2..36dd88c2 100644 --- a/crates/prometeu-compiler/tests/pbs_golden_tests.rs +++ b/crates/prometeu-compiler/tests/pbs_golden_tests.rs @@ -20,7 +20,7 @@ fn test_golden_bytecode_snapshot() { let code = r#" declare contract Gfx host {} - fn helper(val: int) -> int { + fn helper(val: int): int { return val * 2; } diff --git a/crates/prometeu-compiler/tests/pbs_lowering_tests.rs b/crates/prometeu-compiler/tests/pbs_lowering_tests.rs index 8d5643a1..c474026c 100644 --- a/crates/prometeu-compiler/tests/pbs_lowering_tests.rs +++ b/crates/prometeu-compiler/tests/pbs_lowering_tests.rs @@ -7,7 +7,7 @@ use prometeu_compiler::ir_core; #[test] fn test_basic_lowering() { let code = " - fn add(a: int, b: int) -> int { + fn add(a: int, b: int): int { return a + b; } fn main() { @@ -43,7 +43,7 @@ fn test_basic_lowering() { #[test] fn test_control_flow_lowering() { let code = " - fn max(a: int, b: int) -> int { + fn max(a: int, b: int): int { if (a > b) { return a; } else { diff --git a/crates/prometeu-compiler/tests/pbs_typecheck_tests.rs b/crates/prometeu-compiler/tests/pbs_typecheck_tests.rs index 66d8c4aa..a715cb3f 100644 --- a/crates/prometeu-compiler/tests/pbs_typecheck_tests.rs +++ b/crates/prometeu-compiler/tests/pbs_typecheck_tests.rs @@ -36,7 +36,7 @@ fn test_type_mismatch_let() { #[test] fn test_type_mismatch_return() { - let code = "fn main() -> int { return \"hello\"; }"; + let code = "fn main(): int { return \"hello\"; }"; let res = check_code(code); assert!(res.is_err()); assert!(res.unwrap_err().contains("E_TYPE_MISMATCH")); @@ -57,7 +57,7 @@ fn test_type_mismatch_call() { #[test] fn test_missing_return_path() { - let code = "fn foo() -> int { if (true) { return 1; } }"; + let code = "fn foo(): int { if (true) { return 1; } }"; let res = check_code(code); assert!(res.is_err()); assert!(res.unwrap_err().contains("E_TYPE_RETURN_PATH")); @@ -65,7 +65,7 @@ fn test_missing_return_path() { #[test] fn test_implicit_none_optional() { - let code = "fn foo() -> optional { if (true) { return some(1); } }"; + let code = "fn foo(): optional { if (true) { return some(1); } }"; let res = check_code(code); if let Err(e) = &res { println!("Error: {}", e); } assert!(res.is_ok()); // Implicit none allowed for optional @@ -82,7 +82,7 @@ fn test_valid_optional_assignment() { #[test] fn test_valid_result_usage() { let code = " - fn foo() -> result { + fn foo(): result { if (true) { return ok(10); } else { @@ -160,7 +160,7 @@ fn test_struct_type_usage() { fn test_service_type_usage() { let code = " pub service MyService { - fn hello(name: string) -> void + fn hello(name: string): void } fn foo(s: MyService) {} "; diff --git a/test-cartridges/test01/cartridge/manifest.json b/test-cartridges/test01/cartridge/manifest.json new file mode 100644 index 00000000..09caae67 --- /dev/null +++ b/test-cartridges/test01/cartridge/manifest.json @@ -0,0 +1,41 @@ +{ + "magic": "PMTU", + "cartridge_version": 1, + "app_id": 1, + "title": "Test 1", + "app_version": "0.1.0", + "app_mode": "Game", + "entrypoint": "0", + "asset_table": [ + { + "asset_id": 0, + "asset_name": "bgm_music", + "bank_type": "SOUNDS", + "offset": 0, + "size": 88200, + "decoded_size": 88200, + "codec": "RAW", + "metadata": { + "sample_rate": 44100 + } + }, + { + "asset_id": 1, + "asset_name": "mouse_cursor", + "bank_type": "TILES", + "offset": 88200, + "size": 2304, + "decoded_size": 2304, + "codec": "RAW", + "metadata": { + "tile_size": 16, + "width": 16, + "height": 16 + } + } + ], + "preload": [ + { "asset_name": "bgm_music", "slot": 0 }, + { "asset_name": "mouse_cursor", "slot": 1 } + ] +} diff --git a/test-cartridges/test01/cartridge/program.disasm.txt b/test-cartridges/test01/cartridge/program.disasm.txt new file mode 100644 index 00000000..4a12b599 --- /dev/null +++ b/test-cartridges/test01/cartridge/program.disasm.txt @@ -0,0 +1,12 @@ +00000000 PushConst U32(1) +00000006 SetLocal U32(0) +0000000C GetLocal U32(0) +00000012 PushConst U32(1) +00000018 Eq +0000001A JmpIfFalse U32(56) +00000020 Jmp U32(38) +00000026 PushConst U32(2) +0000002C Syscall U32(4097) +00000032 Jmp U32(62) +00000038 Jmp U32(62) +0000003E Ret diff --git a/test-cartridges/test01/cartridge/program.pbc b/test-cartridges/test01/cartridge/program.pbc new file mode 100644 index 0000000000000000000000000000000000000000..6ff155ac3eaa5d53eea6d8d95abe534c390820c0 GIT binary patch literal 95 zcmWFtaB^m500Krv5D5e@n!y3c5dd?YLE;QfU=ku?z`)F40pv3=r~yd