From 5f56c67ff9330d7ec685a5298bb3bf0624434370 Mon Sep 17 00:00:00 2001 From: Gusarich Date: Sat, 8 Jun 2024 16:49:07 +0300 Subject: [PATCH 1/3] fix --- src/imports/stdlib.ts | 22 +++++++++++----------- stdlib/std/cells.tact | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/imports/stdlib.ts b/src/imports/stdlib.ts index 8ee49b1df..b638161e9 100644 --- a/src/imports/stdlib.ts +++ b/src/imports/stdlib.ts @@ -141,17 +141,17 @@ files['std/cells.tact'] = 'bGY6IFNsaWNlLCBsOiBJbnQpOiBJbnQ7CgpAbmFtZShwcmVsb2FkX3VpbnQpCmV4dGVuZHMgbmF0aXZlIHByZWxvYWRVaW50KHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBJ' + 'bnQ7CgpAbmFtZShsb2FkX2NvaW5zKQpleHRlbmRzIG11dGF0ZXMgbmF0aXZlIGxvYWRDb2lucyhzZWxmOiBTbGljZSk6IEludDsKCkBuYW1lKF9fdGFjdF9sb2FkX2Fk' + 'ZHJlc3MpCmV4dGVuZHMgbXV0YXRlcyBuYXRpdmUgbG9hZEFkZHJlc3Moc2VsZjogU2xpY2UpOiBBZGRyZXNzOwoKQG5hbWUoc2tpcF9iaXRzKQpleHRlbmRzIG11dGF0' + - 'ZXMgbmF0aXZlIHNraXBCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOiBTbGljZTsKCkBuYW1lKGVuZF9wYXJzZSkKZXh0ZW5kcyBuYXRpdmUgZW5kUGFyc2Uoc2VsZjog' + - 'U2xpY2UpOwoKLy8KLy8gU2xpY2Ugc2l6ZQovLwoKQG5hbWUoc2xpY2VfcmVmcykKZXh0ZW5kcyBuYXRpdmUgcmVmcyhzZWxmOiBTbGljZSk6IEludDsKCkBuYW1lKHNs' + - 'aWNlX2JpdHMpCmV4dGVuZHMgbmF0aXZlIGJpdHMoc2VsZjogU2xpY2UpOiBJbnQ7CgpAbmFtZShzbGljZV9lbXB0eT8pCmV4dGVuZHMgbmF0aXZlIGVtcHR5KHNlbGY6' + - 'IFNsaWNlKTogQm9vbDsKCkBuYW1lKHNsaWNlX2RhdGFfZW1wdHk/KQpleHRlbmRzIG5hdGl2ZSBkYXRhRW1wdHkoc2VsZjogU2xpY2UpOiBCb29sOwoKQG5hbWUoc2xp' + - 'Y2VfcmVmc19lbXB0eT8pCmV4dGVuZHMgbmF0aXZlIHJlZnNFbXB0eShzZWxmOiBTbGljZSk6IEJvb2w7CgovLwovLyBDb252ZXJzaW9ucwovLwoKaW5saW5lIGV4dGVu' + - 'ZHMgZnVuIGFzU2xpY2Uoc2VsZjogQnVpbGRlcik6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKS5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRz' + - 'IGZ1biBhc1NsaWNlKHNlbGY6IENlbGwpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc0NlbGwoc2Vs' + - 'ZjogU2xpY2UpOiBDZWxsIHsKICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVNsaWNlKHNlbGYpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKaW5saW5l' + - 'IGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCmlubGluZSBmdW4gZW1wdHlDZWxsKCk6' + - 'IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIHJldHVybiBlbXB0eUNl' + - 'bGwoKS5hc1NsaWNlKCk7Cn0='; + 'ZXMgbmF0aXZlIHNraXBCaXRzKHNlbGY6IFNsaWNlLCBsOiBJbnQpOwoKQG5hbWUoZW5kX3BhcnNlKQpleHRlbmRzIG5hdGl2ZSBlbmRQYXJzZShzZWxmOiBTbGljZSk7' + + 'CgovLwovLyBTbGljZSBzaXplCi8vCgpAbmFtZShzbGljZV9yZWZzKQpleHRlbmRzIG5hdGl2ZSByZWZzKHNlbGY6IFNsaWNlKTogSW50OwoKQG5hbWUoc2xpY2VfYml0' + + 'cykKZXh0ZW5kcyBuYXRpdmUgYml0cyhzZWxmOiBTbGljZSk6IEludDsKCkBuYW1lKHNsaWNlX2VtcHR5PykKZXh0ZW5kcyBuYXRpdmUgZW1wdHkoc2VsZjogU2xpY2Up' + + 'OiBCb29sOwoKQG5hbWUoc2xpY2VfZGF0YV9lbXB0eT8pCmV4dGVuZHMgbmF0aXZlIGRhdGFFbXB0eShzZWxmOiBTbGljZSk6IEJvb2w7CgpAbmFtZShzbGljZV9yZWZz' + + 'X2VtcHR5PykKZXh0ZW5kcyBuYXRpdmUgcmVmc0VtcHR5KHNlbGY6IFNsaWNlKTogQm9vbDsKCi8vCi8vIENvbnZlcnNpb25zCi8vCgppbmxpbmUgZXh0ZW5kcyBmdW4g' + + 'YXNTbGljZShzZWxmOiBCdWlsZGVyKTogU2xpY2UgewogICAgcmV0dXJuIHNlbGYuZW5kQ2VsbCgpLmJlZ2luUGFyc2UoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFz' + + 'U2xpY2Uoc2VsZjogQ2VsbCk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmJlZ2luUGFyc2UoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBTbGlj' + + 'ZSk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlU2xpY2Uoc2VsZikKICAgICAgICAuZW5kQ2VsbCgpOwp9CgppbmxpbmUgZXh0ZW5k' + + 'cyBmdW4gYXNDZWxsKHNlbGY6IEJ1aWxkZXIpOiBDZWxsIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0eUNlbGwoKTogQ2VsbCB7' + + 'CiAgICByZXR1cm4gYmVnaW5DZWxsKCkuZW5kQ2VsbCgpOwp9CgppbmxpbmUgZnVuIGVtcHR5U2xpY2UoKTogU2xpY2UgewogICAgcmV0dXJuIGVtcHR5Q2VsbCgpLmFz' + + 'U2xpY2UoKTsKfQ=='; files['std/config.tact'] = 'QG5hbWUoY29uZmlnX3BhcmFtKQpuYXRpdmUgZ2V0Q29uZmlnUGFyYW0oaWQ6IEludCk6IENlbGw/Ow=='; files['std/context.tact'] = diff --git a/stdlib/std/cells.tact b/stdlib/std/cells.tact index eee831f46..f05cbe109 100644 --- a/stdlib/std/cells.tact +++ b/stdlib/std/cells.tact @@ -73,7 +73,7 @@ extends mutates native loadCoins(self: Slice): Int; extends mutates native loadAddress(self: Slice): Address; @name(skip_bits) -extends mutates native skipBits(self: Slice, l: Int): Slice; +extends mutates native skipBits(self: Slice, l: Int); @name(end_parse) extends native endParse(self: Slice); From f13e2b30a2ce6e1f379b5867d3b34d33a0411d44 Mon Sep 17 00:00:00 2001 From: Gusarich Date: Sat, 8 Jun 2024 16:52:41 +0300 Subject: [PATCH 2/3] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eb2a4b71..1c2448ed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Return type of `skipBits` now matches FunC and does not lead to compilation errors: PR [#388](https://github.com/tact-lang/tact/pull/388) + ## [1.3.1] - 2024-06-08 ### Added From 9cf3e83facf952a1f25aa6b5d9b3368c2d6fba52 Mon Sep 17 00:00:00 2001 From: Gusarich Date: Sat, 8 Jun 2024 17:27:55 +0300 Subject: [PATCH 3/3] add test --- src/test/compilation-fail/bugs.spec.ts | 32 +++++++++++++++++++ .../compilation-fail/contracts/issue349.tact | 8 +++++ src/test/compilation-fail/tact.config.json | 5 +++ 3 files changed, 45 insertions(+) create mode 100644 src/test/compilation-fail/bugs.spec.ts create mode 100644 src/test/compilation-fail/contracts/issue349.tact diff --git a/src/test/compilation-fail/bugs.spec.ts b/src/test/compilation-fail/bugs.spec.ts new file mode 100644 index 000000000..727e9fac0 --- /dev/null +++ b/src/test/compilation-fail/bugs.spec.ts @@ -0,0 +1,32 @@ +import { __DANGER_resetNodeId } from "../../grammar/ast"; +import { run } from "../../node"; +import { consoleLogger } from "../../logger"; + +describe("fail-bugs", () => { + beforeAll(() => { + jest.spyOn(consoleLogger, "error").mockImplementation(() => {}); + }); + + beforeEach(() => { + __DANGER_resetNodeId(); + }); + + afterAll(() => { + (consoleLogger.error as jest.Mock).mockRestore(); + }); + + afterEach(() => { + (consoleLogger.error as jest.Mock).mockClear(); + }); + + it("should not compile issue 349", async () => { + const result = await run({ + configPath: __dirname + "/tact.config.json", + projectNames: ["issue349"], + }); + expect(result).toBe(false); + expect((consoleLogger.error as jest.Mock).mock.lastCall[0]).toContain( + 'Type mismatch: "" is not assignable to "Slice"', + ); + }); +}); diff --git a/src/test/compilation-fail/contracts/issue349.tact b/src/test/compilation-fail/contracts/issue349.tact new file mode 100644 index 000000000..38bda49f2 --- /dev/null +++ b/src/test/compilation-fail/contracts/issue349.tact @@ -0,0 +1,8 @@ +contract MyContract { + receive() { + let s: Slice = beginCell().storeUint(123, 64).endCell().asSlice(); + let r: Int = s.loadUint(1); + s.skipBits(1); + let x: Slice = s.skipBits(1); + } +} \ No newline at end of file diff --git a/src/test/compilation-fail/tact.config.json b/src/test/compilation-fail/tact.config.json index 9a7777770..afd554853 100644 --- a/src/test/compilation-fail/tact.config.json +++ b/src/test/compilation-fail/tact.config.json @@ -15,6 +15,11 @@ "name": "const-eval", "path": "./contracts/const-eval.tact", "output": "./contracts/output" + }, + { + "name": "issue349", + "path": "./contracts/issue349.tact", + "output": "./contracts/output" } ] }