From 030b3af1339047dab79e158db16a5198c6e464b6 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:06:44 +0400 Subject: [PATCH 01/13] fix: support overriding constant and methods of BaseTrait Fixes #1291 --- .../base-trait-constant-override-1.spec.ts | 37 ++++++++++++++ .../base-trait-constant-override-2.spec.ts | 37 ++++++++++++++ .../base-trait-function-override.spec.ts | 36 +++++++++++++ .../base-trait-constant-override-1.tact | 13 +++++ .../base-trait-constant-override-2.tact | 21 ++++++++ .../base-trait-function-override.tact | 20 ++++++++ src/test/e2e-emulated/contracts/traits.tact | 13 ++++- src/test/e2e-emulated/traits.spec.ts | 5 ++ src/types/resolveDescriptors.ts | 51 ++++++++++++------- 9 files changed, 214 insertions(+), 19 deletions(-) create mode 100644 src/test/e2e-emulated/base-trait-constant-override-1.spec.ts create mode 100644 src/test/e2e-emulated/base-trait-constant-override-2.spec.ts create mode 100644 src/test/e2e-emulated/base-trait-function-override.spec.ts create mode 100644 src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact create mode 100644 src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact create mode 100644 src/test/e2e-emulated/contracts/base-trait-function-override.tact diff --git a/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts b/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts new file mode 100644 index 000000000..e868ff6bd --- /dev/null +++ b/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts @@ -0,0 +1,37 @@ +import { toNano } from "@ton/core"; +import { Blockchain, SandboxContract, TreasuryContract } from "@ton/sandbox"; +import { TraitsConstantContract } from "./contracts/output/base-trait-constant-override-1_TraitsConstantContract"; +import "@ton/test-utils"; + +describe("base-trait-constant-override-1", () => { + let blockchain: Blockchain; + let treasure: SandboxContract; + let contract: SandboxContract; + + beforeEach(async () => { + blockchain = await Blockchain.create(); + blockchain.verbosity.print = false; + treasure = await blockchain.treasury("treasure"); + + contract = blockchain.openContract( + await TraitsConstantContract.fromInit(), + ); + + const deployResult = await contract.send( + treasure.getSender(), + { value: toNano("0.5") }, + null, + ); + + expect(deployResult.transactions).toHaveTransaction({ + from: treasure.address, + to: contract.address, + success: true, + deploy: true, + }); + }); + + it("should override constant correctly", async () => { + expect(await contract.getConstant()).toEqual(100n); + }); +}); diff --git a/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts b/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts new file mode 100644 index 000000000..4d07603bc --- /dev/null +++ b/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts @@ -0,0 +1,37 @@ +import { toNano } from "@ton/core"; +import { Blockchain, SandboxContract, TreasuryContract } from "@ton/sandbox"; +import { TraitsConstantContract } from "./contracts/output/base-trait-constant-override-2_TraitsConstantContract"; +import "@ton/test-utils"; + +describe("base-trait-constant-override-2", () => { + let blockchain: Blockchain; + let treasure: SandboxContract; + let contract: SandboxContract; + + beforeEach(async () => { + blockchain = await Blockchain.create(); + blockchain.verbosity.print = false; + treasure = await blockchain.treasury("treasure"); + + contract = blockchain.openContract( + await TraitsConstantContract.fromInit(), + ); + + const deployResult = await contract.send( + treasure.getSender(), + { value: toNano("0.5") }, + null, + ); + + expect(deployResult.transactions).toHaveTransaction({ + from: treasure.address, + to: contract.address, + success: true, + deploy: true, + }); + }); + + it("should override constant correctly", async () => { + expect(await contract.getConstant()).toEqual(10000n); + }); +}); diff --git a/src/test/e2e-emulated/base-trait-function-override.spec.ts b/src/test/e2e-emulated/base-trait-function-override.spec.ts new file mode 100644 index 000000000..2a4613b95 --- /dev/null +++ b/src/test/e2e-emulated/base-trait-function-override.spec.ts @@ -0,0 +1,36 @@ +import { toNano } from "@ton/core"; +import { Blockchain, SandboxContract, TreasuryContract } from "@ton/sandbox"; +import { BaseTraitsFunctionContract } from "./contracts/output/base-trait-function-override_BaseTraitsFunctionContract"; +import "@ton/test-utils"; + +describe("base-trait-function-override", () => { + let blockchain: Blockchain; + let treasure: SandboxContract; + let contract: SandboxContract; + + beforeEach(async () => { + blockchain = await Blockchain.create(); + treasure = await blockchain.treasury("treasure"); + + contract = blockchain.openContract( + await BaseTraitsFunctionContract.fromInit(), + ); + + const deployResult = await contract.send( + treasure.getSender(), + { value: toNano("10") }, + null, + ); + + expect(deployResult.transactions).toHaveTransaction({ + from: treasure.address, + to: contract.address, + success: true, + deploy: true, + }); + }); + + it("should override function correctly", async () => { + expect(await contract.getValue()).toEqual(1000n); + }); +}); diff --git a/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact b/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact new file mode 100644 index 000000000..8f8967c10 --- /dev/null +++ b/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact @@ -0,0 +1,13 @@ +trait OverrideBaseTraitConstant { + override const storageReserve: Int = 100; +} + +contract TraitsConstantContract with OverrideBaseTraitConstant { + receive() { + // deploy + } + + get fun constant(): Int { + return self.storageReserve; + } +} diff --git a/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact new file mode 100644 index 000000000..6e940a832 --- /dev/null +++ b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact @@ -0,0 +1,21 @@ +trait OverrideBaseTraitConstant { + override const storageReserve: Int = 100; +} + +trait OverrideBaseTraitConstantWithVirtual { + override virtual const storageReserve: Int = 100; +} + +trait OverrideOverridden with OverrideBaseTraitConstantWithVirtual { + override const storageReserve: Int = 10000; +} + +contract TraitsConstantContract with OverrideOverridden { + receive() { + // deploy + } + + get fun constant(): Int { + return self.storageReserve; + } +} diff --git a/src/test/e2e-emulated/contracts/base-trait-function-override.tact b/src/test/e2e-emulated/contracts/base-trait-function-override.tact new file mode 100644 index 000000000..96d8da5fb --- /dev/null +++ b/src/test/e2e-emulated/contracts/base-trait-function-override.tact @@ -0,0 +1,20 @@ +trait OverrideBaseTraitFunction { + value: Int; + + override fun notify(body: Cell?) { + self.value = 1000; + } +} + +contract BaseTraitsFunctionContract with OverrideBaseTraitFunction { + value: Int = 0; + + receive() { + // deploy + } + + get fun value(): Int { + self.notify(null); + return self.value; + } +} diff --git a/src/test/e2e-emulated/contracts/traits.tact b/src/test/e2e-emulated/contracts/traits.tact index f13df02b2..4bb976846 100644 --- a/src/test/e2e-emulated/contracts/traits.tact +++ b/src/test/e2e-emulated/contracts/traits.tact @@ -33,7 +33,16 @@ trait Laika with Dog { } } -contract LaikaContract with Laika { - // empty contract, we just inherit everything from the traits +trait WithConstant { + virtual const foo: Int = 10; } +trait IWantToOverrideConstant with WithConstant { + override const foo: Int = 100; +} + +contract LaikaContract with Laika, IWantToOverrideConstant { + get fun fooConstant(): Int { + return self.foo + } +} diff --git a/src/test/e2e-emulated/traits.spec.ts b/src/test/e2e-emulated/traits.spec.ts index 5b43f1d2b..5a2eb4ddd 100644 --- a/src/test/e2e-emulated/traits.spec.ts +++ b/src/test/e2e-emulated/traits.spec.ts @@ -33,4 +33,9 @@ describe("traits", () => { // Check the contract's behavior after deployment expect(await contract.getSay()).toBe("I am a Laika and I say Woof"); }); + + it("should override constant correctly", async () => { + // Check the contract's behavior after deployment + expect(await contract.getFooConstant()).toBe(100n); + }); }); diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index 3c1160028..d5e0bdb33 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -587,14 +587,6 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { traitDecl.loc, ); } - if ( - traitDecl.attributes.find((v) => v.type === "override") - ) { - throwCompilationError( - `Trait constant cannot be overridden`, - traitDecl.loc, - ); - } types .get(idText(a.name))! .constants.push(buildConstantDescription(traitDecl)); @@ -1688,10 +1680,17 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { funInContractOrTrait.ast.loc, ); } - throwCompilationError( - `Function "${traitFunction.name}" is already defined in trait "${inheritedTrait.name}"`, - funInContractOrTrait.ast.loc, - ); + + if ( + traitFunction.ast.attributes.find( + (v) => v.type === "override", + ) === undefined + ) { + throwCompilationError( + `Function "${traitFunction.name}" is already defined in trait "${inheritedTrait.name}"`, + funInContractOrTrait.ast.loc, + ); + } } // Register function @@ -1754,10 +1753,17 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { constInContractOrTrait.ast.loc, ); } - throwCompilationError( - `Constant "${traitConstant.name}" is already defined in trait "${inheritedTrait.name}"`, - constInContractOrTrait.ast.loc, - ); + + if ( + traitConstant.ast.attributes.find( + (v) => v.type === "override", + ) === undefined + ) { + throwCompilationError( + `Constant "${traitConstant.name}" is already defined in trait "${inheritedTrait.name}"`, + constInContractOrTrait.ast.loc, + ); + } } const contractField = contractOrTrait.fields.find( (v) => v.name === traitConstant.name, @@ -1770,7 +1776,18 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { ); } - // Register constant + if ( + traitConstant.ast.attributes.find( + (v) => v.type === "override", + ) + ) { + // remove overridden constant + contractOrTrait.constants = + contractOrTrait.constants.filter( + (c) => c.name !== traitConstant.name, + ); + } + contractOrTrait.constants.push({ ...traitConstant, ast: cloneNode(traitConstant.ast, Ast), From f7f3a908a341ff33307b11395a2182e1e9ca6dbe Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:10:11 +0400 Subject: [PATCH 02/13] revert comment --- src/types/resolveDescriptors.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index d5e0bdb33..8c0017fb0 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -1788,6 +1788,7 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { ); } + // Register constant contractOrTrait.constants.push({ ...traitConstant, ast: cloneNode(traitConstant.ast, Ast), From 9a8552f7246798ee482479dec99d856dfbde008d Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:11:19 +0400 Subject: [PATCH 03/13] added CHANGELOG.md entry --- dev-docs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md index 936d8d061..dbb3a1e30 100644 --- a/dev-docs/CHANGELOG.md +++ b/dev-docs/CHANGELOG.md @@ -66,6 +66,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Incorrect arithmetic bit shift operations optimizations: PR [#1501](https://github.com/tact-lang/tact/pull/1501) - Throwing from functions with non-trivial branching in the `try` statement: PR [#1501](https://github.com/tact-lang/tact/pull/1501) - Forbid read and write to self in contract init function: PR [#1482](https://github.com/tact-lang/tact/pull/1482) +- Support overriding constants and methods of BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) ### Docs From 439c5a27a5ced4be996a4a920214575ae6caf00d Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:46:46 +0400 Subject: [PATCH 04/13] remove unnecessary code --- src/test/e2e-emulated/base-trait-constant-override-1.spec.ts | 1 - src/test/e2e-emulated/base-trait-constant-override-2.spec.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts b/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts index e868ff6bd..da54f801d 100644 --- a/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts +++ b/src/test/e2e-emulated/base-trait-constant-override-1.spec.ts @@ -10,7 +10,6 @@ describe("base-trait-constant-override-1", () => { beforeEach(async () => { blockchain = await Blockchain.create(); - blockchain.verbosity.print = false; treasure = await blockchain.treasury("treasure"); contract = blockchain.openContract( diff --git a/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts b/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts index 4d07603bc..fa11ea724 100644 --- a/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts +++ b/src/test/e2e-emulated/base-trait-constant-override-2.spec.ts @@ -10,7 +10,6 @@ describe("base-trait-constant-override-2", () => { beforeEach(async () => { blockchain = await Blockchain.create(); - blockchain.verbosity.print = false; treasure = await blockchain.treasury("treasure"); contract = blockchain.openContract( From 3da1825cce6257d17e53f0e4633fc4fd412622cc Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:47:59 +0400 Subject: [PATCH 05/13] missed `;` --- src/test/e2e-emulated/contracts/traits.tact | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/e2e-emulated/contracts/traits.tact b/src/test/e2e-emulated/contracts/traits.tact index 4bb976846..5fbdb25d7 100644 --- a/src/test/e2e-emulated/contracts/traits.tact +++ b/src/test/e2e-emulated/contracts/traits.tact @@ -43,6 +43,6 @@ trait IWantToOverrideConstant with WithConstant { contract LaikaContract with Laika, IWantToOverrideConstant { get fun fooConstant(): Int { - return self.foo + return self.foo; } } From 544d3429c90769e915b672730b0236b9a70d9f98 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:21:31 +0400 Subject: [PATCH 06/13] fix: forbid traits inherit implicitly from BaseTrait Fixes #1631 --- src/stdlib/stdlib.ts | 23 +- src/stdlib/stdlib/libs/deploy.tact | 6 +- src/stdlib/stdlib/libs/ownable.tact | 4 +- .../base-trait-constant-override-1.tact | 2 +- .../base-trait-constant-override-2.tact | 2 +- .../base-trait-function-override.tact | 2 +- src/test/e2e-emulated/contracts/traits.tact | 2 +- .../resolveDescriptors.spec.ts.snap | 4069 ++--------------- src/types/resolveDescriptors.ts | 14 +- ...-function-in-contract-from-base-trait.tact | 2 +- ...ith-multi-inheritance-from-base-trait.tact | 2 +- 11 files changed, 323 insertions(+), 3805 deletions(-) diff --git a/src/stdlib/stdlib.ts b/src/stdlib/stdlib.ts index aa58896a3..004fed65c 100644 --- a/src/stdlib/stdlib.ts +++ b/src/stdlib/stdlib.ts @@ -10,10 +10,11 @@ files["libs/content.tact"] = "fQ=="; files["libs/deploy.tact"] = "Cm1lc3NhZ2UgRGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7Cn0KCm1lc3NhZ2UgRGVwbG95T2sgewogICAgcXVlcnlJZDogSW50IGFzIHVpbnQ2NDsK" + - "fQoKdHJhaXQgRGVwbG95YWJsZSB7CiAgICByZWNlaXZlKGRlcGxveTogRGVwbG95KSB7CiAgICAgICAgc2VsZi5ub3RpZnkoRGVwbG95T2t7cXVlcnlJZDogZGVwbG95" + - "LnF1ZXJ5SWR9LnRvQ2VsbCgpKTsKICAgIH0KfQoKbWVzc2FnZSBGYWN0b3J5RGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7CiAgICBjYXNoYmFjazog" + - "QWRkcmVzczsKfQoKdHJhaXQgRmFjdG9yeURlcGxveWFibGUgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJk" + - "KGRlcGxveS5jYXNoYmFjaywgRGVwbG95T2t7cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpLCBmYWxzZSwgbnVsbCk7CiAgICB9Cn0="; + "fQoKdHJhaXQgRGVwbG95YWJsZSB3aXRoIEJhc2VUcmFpdCB7CiAgICByZWNlaXZlKGRlcGxveTogRGVwbG95KSB7CiAgICAgICAgc2VsZi5ub3RpZnkoRGVwbG95T2t7" + + "cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpKTsKICAgIH0KfQoKbWVzc2FnZSBGYWN0b3J5RGVwbG95IHsKICAgIHF1ZXJ5SWQ6IEludCBhcyB1aW50NjQ7" + + "CiAgICBjYXNoYmFjazogQWRkcmVzczsKfQoKdHJhaXQgRmFjdG9yeURlcGxveWFibGUgd2l0aCBCYXNlVHJhaXQgIHsKICAgIHJlY2VpdmUoZGVwbG95OiBGYWN0b3J5" + + "RGVwbG95KSB7CiAgICAgICAgc2VsZi5mb3J3YXJkKGRlcGxveS5jYXNoYmFjaywgRGVwbG95T2t7cXVlcnlJZDogZGVwbG95LnF1ZXJ5SWR9LnRvQ2VsbCgpLCBmYWxz" + + "ZSwgbnVsbCk7CiAgICB9Cn0K"; files["libs/dns.fc"] = "c2xpY2UgZG5zX3N0cmluZ190b19pbnRlcm5hbChzbGljZSBkb21haW4pIGlubGluZV9yZWYgewoKICAgIDs7IFNwZWNpYWwgY2FzZSBmb3Igcm9vdCBkb21haW4KICAg" + "IGlmICgoZG9tYWluLnNsaWNlX2JpdHMoKSA9PSA4KSAmIChkb21haW4uc2xpY2VfcmVmcygpID09IDApKSB7CiAgICAgICAgaWYgKGRvbWFpbi5wcmVsb2FkX3VpbnQo" + @@ -89,13 +90,13 @@ files["libs/dns.tact"] = files["libs/ownable.tact"] = "bWVzc2FnZSBDaGFuZ2VPd25lciB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCm1lc3NhZ2UgQ2hhbmdlT3duZXJP" + "ayB7CiAgICBxdWVyeUlkOiBJbnQgYXMgdWludDY0OwogICAgbmV3T3duZXI6IEFkZHJlc3M7Cn0KCkBpbnRlcmZhY2UoIm9yZy50b24ub3duYWJsZSIpCnRyYWl0IE93" + - "bmFibGUgewogICAgb3duZXI6IEFkZHJlc3M7CgogICAgZnVuIHJlcXVpcmVPd25lcigpIHsKICAgICAgICBuYXRpdmVUaHJvd1VubGVzcygxMzIsIHNlbmRlcigpID09" + - "IHNlbGYub3duZXIpOwogICAgfQoKICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYub3duZXI7CiAgICB9Cn0KCkBpbnRlcmZh" + - "Y2UoIm9yZy50b24ub3duYWJsZS50cmFuc2ZlcmFibGUudjIiKQp0cmFpdCBPd25hYmxlVHJhbnNmZXJhYmxlIHdpdGggT3duYWJsZSB7CgogICAgb3duZXI6IEFkZHJl" + - "c3M7CgogICAgcmVjZWl2ZShtc2c6IENoYW5nZU93bmVyKSB7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlbmRlciBpcyB0aGUgb3duZXIKICAgICAg" + - "ICBzZWxmLnJlcXVpcmVPd25lcigpOwoKICAgICAgICAvLyBVcGRhdGUgb3duZXIKICAgICAgICBzZWxmLm93bmVyID0gbXNnLm5ld093bmVyOwoKICAgICAgICAvLyBS" + - "ZXBseSByZXN1bHQKICAgICAgICBzZWxmLnJlcGx5KENoYW5nZU93bmVyT2t7IHF1ZXJ5SWQ6IG1zZy5xdWVyeUlkLCBuZXdPd25lcjptc2cubmV3T3duZXIgfS50b0Nl" + - "bGwoKSk7CiAgICB9Cn0="; + "bmFibGUgd2l0aCBCYXNlVHJhaXQgewogICAgb3duZXI6IEFkZHJlc3M7CgogICAgZnVuIHJlcXVpcmVPd25lcigpIHsKICAgICAgICBuYXRpdmVUaHJvd1VubGVzcygx" + + "MzIsIHNlbmRlcigpID09IHNlbGYub3duZXIpOwogICAgfQoKICAgIGdldCBmdW4gb3duZXIoKTogQWRkcmVzcyB7CiAgICAgICAgcmV0dXJuIHNlbGYub3duZXI7CiAg" + + "ICB9Cn0KCkBpbnRlcmZhY2UoIm9yZy50b24ub3duYWJsZS50cmFuc2ZlcmFibGUudjIiKQp0cmFpdCBPd25hYmxlVHJhbnNmZXJhYmxlIHdpdGggT3duYWJsZSB7Cgog" + + "ICAgb3duZXI6IEFkZHJlc3M7CgogICAgcmVjZWl2ZShtc2c6IENoYW5nZU93bmVyKSB7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlbmRlciBpcyB0" + + "aGUgb3duZXIKICAgICAgICBzZWxmLnJlcXVpcmVPd25lcigpOwoKICAgICAgICAvLyBVcGRhdGUgb3duZXIKICAgICAgICBzZWxmLm93bmVyID0gbXNnLm5ld093bmVy" + + "OwoKICAgICAgICAvLyBSZXBseSByZXN1bHQKICAgICAgICBzZWxmLnJlcGx5KENoYW5nZU93bmVyT2t7IHF1ZXJ5SWQ6IG1zZy5xdWVyeUlkLCBuZXdPd25lcjptc2cu" + + "bmV3T3duZXIgfS50b0NlbGwoKSk7CiAgICB9Cn0K"; files["libs/stoppable.tact"] = "aW1wb3J0ICIuL293bmFibGUiOwoKQGludGVyZmFjZSgib3JnLnRvbi5zdG9wcGFibGUiKQp0cmFpdCBTdG9wcGFibGUgd2l0aCBPd25hYmxlIHsKICAgIAogICAgc3Rv" + "cHBlZDogQm9vbDsKICAgIG93bmVyOiBBZGRyZXNzOwoKICAgIGZ1biByZXF1aXJlTm90U3RvcHBlZCgpIHsKICAgICAgICByZXF1aXJlKCFzZWxmLnN0b3BwZWQsICJD" + diff --git a/src/stdlib/stdlib/libs/deploy.tact b/src/stdlib/stdlib/libs/deploy.tact index ff27a53a0..d54d1970e 100644 --- a/src/stdlib/stdlib/libs/deploy.tact +++ b/src/stdlib/stdlib/libs/deploy.tact @@ -7,7 +7,7 @@ message DeployOk { queryId: Int as uint64; } -trait Deployable { +trait Deployable with BaseTrait { receive(deploy: Deploy) { self.notify(DeployOk{queryId: deploy.queryId}.toCell()); } @@ -18,8 +18,8 @@ message FactoryDeploy { cashback: Address; } -trait FactoryDeployable { +trait FactoryDeployable with BaseTrait { receive(deploy: FactoryDeploy) { self.forward(deploy.cashback, DeployOk{queryId: deploy.queryId}.toCell(), false, null); } -} \ No newline at end of file +} diff --git a/src/stdlib/stdlib/libs/ownable.tact b/src/stdlib/stdlib/libs/ownable.tact index 907c9ed95..429e36dba 100644 --- a/src/stdlib/stdlib/libs/ownable.tact +++ b/src/stdlib/stdlib/libs/ownable.tact @@ -9,7 +9,7 @@ message ChangeOwnerOk { } @interface("org.ton.ownable") -trait Ownable { +trait Ownable with BaseTrait { owner: Address; fun requireOwner() { @@ -37,4 +37,4 @@ trait OwnableTransferable with Ownable { // Reply result self.reply(ChangeOwnerOk{ queryId: msg.queryId, newOwner:msg.newOwner }.toCell()); } -} \ No newline at end of file +} diff --git a/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact b/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact index 8f8967c10..76a967093 100644 --- a/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact +++ b/src/test/e2e-emulated/contracts/base-trait-constant-override-1.tact @@ -1,4 +1,4 @@ -trait OverrideBaseTraitConstant { +trait OverrideBaseTraitConstant with BaseTrait { override const storageReserve: Int = 100; } diff --git a/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact index 6e940a832..58503af38 100644 --- a/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact +++ b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact @@ -1,4 +1,4 @@ -trait OverrideBaseTraitConstant { +trait OverrideBaseTraitConstant with BaseTrait { override const storageReserve: Int = 100; } diff --git a/src/test/e2e-emulated/contracts/base-trait-function-override.tact b/src/test/e2e-emulated/contracts/base-trait-function-override.tact index 96d8da5fb..1f39f9c35 100644 --- a/src/test/e2e-emulated/contracts/base-trait-function-override.tact +++ b/src/test/e2e-emulated/contracts/base-trait-function-override.tact @@ -1,4 +1,4 @@ -trait OverrideBaseTraitFunction { +trait OverrideBaseTraitFunction with BaseTrait { value: Int; override fun notify(body: Cell?) { diff --git a/src/test/e2e-emulated/contracts/traits.tact b/src/test/e2e-emulated/contracts/traits.tact index 5fbdb25d7..d7851fd8a 100644 --- a/src/test/e2e-emulated/contracts/traits.tact +++ b/src/test/e2e-emulated/contracts/traits.tact @@ -1,4 +1,4 @@ -trait Animal { +trait Animal with BaseTrait { abstract fun getType(): String; abstract fun getSound(): String; diff --git a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap index cbc4976f2..d0bf28d9e 100644 --- a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap +++ b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap @@ -550,7 +550,7 @@ exports[`resolveDescriptors should fail descriptors for override-for-non-existin `; exports[`resolveDescriptors should fail descriptors for override-for-non-existing-function-in-trait-with-inheritance 1`] = ` -":5:5: Function "foo" overrides nothing, remove "override" modifier +":5:5: Function "foo" overrides nothing, remove "override" modifier or inherit any traits with this function 4 | trait Test with T { > 5 | override fun foo() {} ^~~~~~~~~~~~~~~~~~~~~ @@ -3483,40 +3483,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -3768,40 +3735,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -3984,40 +3918,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -4289,40 +4190,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -5483,40 +5351,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-getter-overr "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -5832,40 +5667,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-getter-overr "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -6084,40 +5886,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-getter-overr "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -6461,40 +6230,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-getter-overr "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -6670,40 +6406,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-with-as-type "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, { @@ -6961,40 +6664,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-with-as-type "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, ], @@ -14104,40 +13774,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -14243,38 +13880,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -14358,40 +13963,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -14502,11 +14074,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 7, + "id": 8, "kind": "function_def", "loc": override fun foo() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": foo, "text": "foo", @@ -14516,9 +14088,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "statements": [], }, ], - "id": 8, + "id": 9, "kind": "trait", - "loc": trait Test { + "loc": trait Test with BaseTrait { override fun foo() {} }, "name": { @@ -14527,7 +14099,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "loc": Test, "text": "Test", }, - "traits": [], + "traits": [ + { + "id": 6, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], }, "constants": [], "dependsOn": [], @@ -14542,11 +14121,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 7, + "id": 8, "kind": "function_def", "loc": override fun foo() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": foo, "text": "foo", @@ -14743,40 +14322,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -14862,40 +14408,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, { @@ -15079,40 +14592,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -15198,40 +14678,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, ], @@ -15402,41 +14849,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "optional": false, }, }, - "foo" => { - "ast": { - "attributes": [], - "id": 23, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "T", - "optional": false, - }, - }, }, "header": null, "init": null, @@ -15448,94 +14860,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -15610,41 +14935,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "optional": false, }, }, - "foo" => { - "ast": { - "attributes": [], - "id": 24, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "T2", - "optional": false, - }, - }, }, "header": null, "init": null, @@ -15656,94 +14946,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, { @@ -16094,41 +15297,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "optional": false, }, }, - "foo" => { - "ast": { - "attributes": [], - "id": 23, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "T", - "optional": false, - }, - }, }, "header": null, "init": null, @@ -16140,94 +15308,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -16302,41 +15383,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "optional": false, }, }, - "foo" => { - "ast": { - "attributes": [], - "id": 24, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "T2", - "optional": false, - }, - }, }, "header": null, "init": null, @@ -16348,94 +15394,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, ], @@ -16563,40 +15522,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -16828,40 +15754,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -17276,40 +16169,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, { @@ -17385,38 +16245,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -17498,40 +16326,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -17614,46 +16409,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "ast": { "attributes": [], "declarations": [], - "id": 2, + "id": 9, "kind": "trait", - "loc": trait BaseTrait {}, + "loc": trait T2 with T1 {}, "name": { - "id": 1, + "id": 7, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [], - "id": 9, - "kind": "trait", - "loc": trait T2 with T1 {}, - "name": { - "id": 7, - "kind": "id", - "loc": T2, - "text": "T2", + "loc": T2, + "text": "T2", }, "traits": [ { @@ -17715,38 +16478,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -17828,40 +16559,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -17948,40 +16646,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -18206,38 +16871,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -18311,38 +16944,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -18424,40 +17025,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -18544,40 +17112,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -18656,38 +17191,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -18769,40 +17272,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -18889,40 +17359,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -18996,40 +17433,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, { @@ -19121,38 +17525,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -19182,40 +17554,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -19294,38 +17633,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -19415,38 +17722,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -19476,40 +17751,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -19544,40 +17786,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -19802,38 +18011,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -19923,38 +18100,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -19984,40 +18129,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -20052,40 +18164,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -20180,38 +18259,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -20241,40 +18288,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -20309,40 +18323,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 58377, }, ], @@ -20470,40 +18451,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -20635,60 +18583,28 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 2, + "declarations": [ + { + "attributes": [], + "id": 5, + "kind": "function_def", + "loc": fun bar() {}, + "name": { + "id": 4, + "kind": "id", + "loc": bar, + "text": "bar", + }, + "params": [], + "return": null, + "statements": [], + }, + ], + "id": 6, "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 5, - "kind": "function_def", - "loc": fun bar() {}, - "name": { - "id": 4, - "kind": "id", - "loc": bar, - "text": "bar", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 6, - "kind": "trait", - "loc": trait T { - fun bar() {} -}, + "loc": trait T { + fun bar() {} +}, "name": { "id": 3, "kind": "id", @@ -20747,40 +18663,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -20912,38 +18795,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -21027,40 +18878,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -21245,38 +19063,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -21403,38 +19189,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -21518,40 +19272,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -21640,53 +19361,20 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, + "id": 15, + "kind": "function_def", + "loc": fun ban() {}, "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], - "uid": 6769, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 15, - "kind": "function_def", - "loc": fun ban() {}, - "name": { - "id": 14, + "id": 14, "kind": "id", "loc": ban, "text": "ban", @@ -21802,38 +19490,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -21917,40 +19573,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -22027,40 +19650,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -22146,40 +19736,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, { @@ -22291,38 +19848,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -22352,40 +19877,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -22471,40 +19963,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 2, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, ], @@ -22609,11 +20068,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 7, + "id": 8, "kind": "function_def", "loc": fun bar() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": bar, "text": "bar", @@ -22623,9 +20082,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "statements": [], }, ], - "id": 8, + "id": 9, "kind": "trait", - "loc": trait T { + "loc": trait T with BaseTrait { fun bar() {} }, "name": { @@ -22634,7 +20093,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "loc": T, "text": "T", }, - "traits": [], + "traits": [ + { + "id": 6, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], }, "constants": [], "dependsOn": [], @@ -22643,11 +20109,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "bar" => { "ast": { "attributes": [], - "id": 7, + "id": 8, "kind": "function_def", "loc": fun bar() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": bar, "text": "bar", @@ -22678,7 +20144,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "foo" => { "ast": { "attributes": [], - "id": 22, + "id": 23, "kind": "function_def", "loc": fun foo() {}, "name": { @@ -22817,11 +20283,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 11, + "id": 12, "kind": "function_def", "loc": fun baz() {}, "name": { - "id": 10, + "id": 11, "kind": "id", "loc": baz, "text": "baz", @@ -22831,13 +20297,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "statements": [], }, ], - "id": 12, + "id": 13, "kind": "trait", "loc": trait T2 { fun baz() {} }, "name": { - "id": 9, + "id": 10, "kind": "id", "loc": T2, "text": "T2", @@ -22851,11 +20317,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "baz" => { "ast": { "attributes": [], - "id": 11, + "id": 12, "kind": "function_def", "loc": fun baz() {}, "name": { - "id": 10, + "id": 11, "kind": "id", "loc": baz, "text": "baz", @@ -22883,41 +20349,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "optional": false, }, }, - "foo" => { - "ast": { - "attributes": [], - "id": 23, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "T2", - "optional": false, - }, - }, }, "header": null, "init": null, @@ -22929,94 +20360,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, { @@ -23031,11 +20375,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 17, + "id": 18, "kind": "function_def", "loc": override fun foo() {}, "name": { - "id": 16, + "id": 17, "kind": "id", "loc": foo, "text": "foo", @@ -23045,26 +20389,26 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "statements": [], }, ], - "id": 18, + "id": 19, "kind": "trait", "loc": trait Test with T, T2 { override fun foo() {} }, "name": { - "id": 13, + "id": 14, "kind": "id", "loc": Test, "text": "Test", }, "traits": [ { - "id": 14, + "id": 15, "kind": "id", "loc": T, "text": "T", }, { - "id": 15, + "id": 16, "kind": "id", "loc": T2, "text": "T2", @@ -23084,11 +20428,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 17, + "id": 18, "kind": "function_def", "loc": override fun foo() {}, "name": { - "id": 16, + "id": 17, "kind": "id", "loc": foo, "text": "foo", @@ -23119,11 +20463,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "bar" => { "ast": { "attributes": [], - "id": 20, + "id": 21, "kind": "function_def", "loc": fun bar() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": bar, "text": "bar", @@ -23154,11 +20498,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "baz" => { "ast": { "attributes": [], - "id": 21, + "id": 22, "kind": "function_def", "loc": fun baz() {}, "name": { - "id": 10, + "id": 11, "kind": "id", "loc": baz, "text": "baz", @@ -23204,97 +20548,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 7, + "id": 8, "kind": "function_def", "loc": fun bar() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": bar, "text": "bar", @@ -23304,9 +20562,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "statements": [], }, ], - "id": 8, + "id": 9, "kind": "trait", - "loc": trait T { + "loc": trait T with BaseTrait { fun bar() {} }, "name": { @@ -23315,7 +20573,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "loc": T, "text": "T", }, - "traits": [], + "traits": [ + { + "id": 6, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], }, "constants": [], "dependsOn": [], @@ -23324,11 +20589,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "bar" => { "ast": { "attributes": [], - "id": 7, + "id": 8, "kind": "function_def", "loc": fun bar() {}, "name": { - "id": 6, + "id": 7, "kind": "id", "loc": bar, "text": "bar", @@ -23359,7 +20624,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "foo" => { "ast": { "attributes": [], - "id": 22, + "id": 23, "kind": "function_def", "loc": fun foo() {}, "name": { @@ -23498,30 +20763,30 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 11, + "id": 3, "kind": "function_def", - "loc": fun baz() {}, + "loc": fun foo() {}, "name": { - "id": 10, + "id": 2, "kind": "id", - "loc": baz, - "text": "baz", + "loc": foo, + "text": "foo", }, "params": [], "return": null, "statements": [], }, ], - "id": 12, + "id": 4, "kind": "trait", - "loc": trait T2 { - fun baz() {} + "loc": trait BaseTrait { + fun foo() {} }, "name": { - "id": 9, + "id": 1, "kind": "id", - "loc": T2, - "text": "T2", + "loc": BaseTrait, + "text": "BaseTrait", }, "traits": [], }, @@ -23529,17 +20794,17 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "dependsOn": [], "fields": [], "functions": Map { - "baz" => { + "foo" => { "ast": { "attributes": [], - "id": 11, + "id": 3, "kind": "function_def", - "loc": fun baz() {}, + "loc": fun foo() {}, "name": { - "id": 10, + "id": 2, "kind": "id", - "loc": baz, - "text": "baz", + "loc": foo, + "text": "foo", }, "params": [], "return": null, @@ -23552,7 +20817,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "isOverride": false, "isVirtual": false, "methodId": null, - "name": "baz", + "name": "foo", "origin": "user", "params": [], "returns": { @@ -23560,21 +20825,72 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "self": { "kind": "ref", - "name": "T2", + "name": "BaseTrait", "optional": false, }, }, - "foo" => { + }, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "kind": "function_def", + "loc": fun baz() {}, + "name": { + "id": 11, + "kind": "id", + "loc": baz, + "text": "baz", + }, + "params": [], + "return": null, + "statements": [], + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 { + fun baz() {} +}, + "name": { + "id": 10, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map { + "baz" => { "ast": { "attributes": [], - "id": 23, + "id": 12, "kind": "function_def", - "loc": fun foo() {}, + "loc": fun baz() {}, "name": { - "id": 2, + "id": 11, "kind": "id", - "loc": foo, - "text": "foo", + "loc": baz, + "text": "baz", }, "params": [], "return": null, @@ -23587,7 +20903,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "isOverride": false, "isVirtual": false, "methodId": null, - "name": "foo", + "name": "baz", "origin": "user", "params": [], "returns": { @@ -23610,94 +20926,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - ], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { - fun foo() {} -}, - "name": { - "id": 1, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map { - "foo" => { - "ast": { - "attributes": [], - "id": 3, - "kind": "function_def", - "loc": fun foo() {}, - "name": { - "id": 2, - "kind": "id", - "loc": foo, - "text": "foo", - }, - "params": [], - "return": null, - "statements": [], - }, - "isAbstract": false, - "isGetter": false, - "isInline": false, - "isMutating": true, - "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "foo", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "BaseTrait", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 54378, }, ], @@ -25669,65 +22898,32 @@ exports[`resolveDescriptors should resolve descriptors for trait-foreach 1`] = ` "isInline": false, "isMutating": true, "isOverride": false, - "isVirtual": false, - "methodId": null, - "name": "test", - "origin": "user", - "params": [], - "returns": { - "kind": "void", - }, - "self": { - "kind": "ref", - "name": "TraitWithForeach", - "optional": false, - }, - }, - }, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "TraitWithForeach", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, + "isVirtual": false, + "methodId": null, + "name": "test", + "origin": "user", + "params": [], + "returns": { + "kind": "void", + }, + "self": { + "kind": "ref", + "name": "TraitWithForeach", + "optional": false, + }, }, - ], + }, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "TraitWithForeach", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], "uid": 20892, }, { @@ -26220,40 +23416,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-foreach 1`] = ` "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait { }, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 20892, }, ], @@ -26419,40 +23582,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-int-field-with- "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, { @@ -26565,38 +23695,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-int-field-with- "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -26689,40 +23787,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-int-field-with- "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, ], @@ -26898,40 +23963,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, { @@ -27044,38 +24076,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -27167,51 +24167,18 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f }, }, ], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "Foo", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Foo", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], "uid": 10576, }, ], @@ -27387,40 +24354,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -27603,38 +24537,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -27737,40 +24639,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -27956,38 +24825,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -28090,40 +24927,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -28385,38 +25189,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -28581,54 +25353,22 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "type": { "kind": "ref", "name": "Int", - "optional": false, - }, - }, - ], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T2", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], + "optional": false, }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, }, + ], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ { "ast": { "attributes": [], @@ -28731,40 +25471,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -28872,40 +25579,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, { @@ -29088,38 +25762,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -29222,40 +25864,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-f "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 6769, }, ], @@ -29434,40 +26043,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-i "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, { @@ -29570,38 +26146,6 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-i "signature": null, "tlb": null, "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, { "ast": { "attributes": [], @@ -29704,40 +26248,7 @@ exports[`resolveDescriptors should resolve descriptors for trait-with-as-typed-i "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - ], + "traits": [], "uid": 10576, }, ], diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index 8bb053901..c4c1ff8ff 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -1511,7 +1511,12 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { ); } } - visit("BaseTrait"); + + // implicitly inherit from BaseTrait only in contracts + if (t.ast.kind === "contract") { + visit("BaseTrait"); + } + for (const s of t.ast.traits) { visit(idText(s)); } @@ -1600,9 +1605,10 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { ); if (!foundOverriddenFunction) { - const msg = inheritOnlyBaseTrait - ? `Function "${funInContractOrTrait.name}" overrides nothing, remove "override" modifier or inherit any traits with this function` - : `Function "${funInContractOrTrait.name}" overrides nothing, remove "override" modifier`; + const msg = + contractOrTrait.traits.length === 0 || inheritOnlyBaseTrait + ? `Function "${funInContractOrTrait.name}" overrides nothing, remove "override" modifier or inherit any traits with this function` + : `Function "${funInContractOrTrait.name}" overrides nothing, remove "override" modifier`; throwCompilationError(msg, funInContractOrTrait.ast.loc); } diff --git a/src/types/test/override-for-existing-function-in-contract-from-base-trait.tact b/src/types/test/override-for-existing-function-in-contract-from-base-trait.tact index 5850b0948..e8806c325 100644 --- a/src/types/test/override-for-existing-function-in-contract-from-base-trait.tact +++ b/src/types/test/override-for-existing-function-in-contract-from-base-trait.tact @@ -2,6 +2,6 @@ trait BaseTrait { fun foo() {} } -trait Test { +trait Test with BaseTrait { override fun foo() {} } diff --git a/src/types/test/override-for-existing-function-in-trait-with-multi-inheritance-from-base-trait.tact b/src/types/test/override-for-existing-function-in-trait-with-multi-inheritance-from-base-trait.tact index 41091c08a..229fd2de4 100644 --- a/src/types/test/override-for-existing-function-in-trait-with-multi-inheritance-from-base-trait.tact +++ b/src/types/test/override-for-existing-function-in-trait-with-multi-inheritance-from-base-trait.tact @@ -1,7 +1,7 @@ trait BaseTrait { fun foo() {} } -trait T { +trait T with BaseTrait { fun bar() {} } From 91ea3fffa05a2e5219167a098b63583770e1a4b2 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:31:15 +0400 Subject: [PATCH 07/13] added note in documentation --- docs/src/content/docs/ref/core-base.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/src/content/docs/ref/core-base.mdx b/docs/src/content/docs/ref/core-base.mdx index 8ccfbfe2e..1bfb1a368 100644 --- a/docs/src/content/docs/ref/core-base.mdx +++ b/docs/src/content/docs/ref/core-base.mdx @@ -6,7 +6,13 @@ prev: label: "OTP-006: Contract Package" --- -Every [contract](/book/contracts) and [trait](/book/types#traits) in Tact implicitly [inherits](/book/contracts#traits) the `BaseTrait{:tact}` trait, which contains a number of the most useful [internal functions](/book/contracts#internal-functions) for any kind of contract, and a constant `self.storageReserve{:tact}` aimed at advanced users of Tact. +Every [contract](/book/contracts) in Tact implicitly [inherits](/book/contracts#traits) the `BaseTrait{:tact}` trait, which contains a number of the most useful [internal functions](/book/contracts#internal-functions) for any kind of contract, and a constant `self.storageReserve{:tact}` aimed at advanced users of Tact. + +:::note + + Before 1.6.0, `BaseTrait{:tact}` was also implicitly inherited by traits, but now you need to explicitly specify `with BaseTrait{:tact}` for your traits. + +::: ## Constants From 805d3e6da98c9131d68248542ef3f5d07e1e476f Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:33:22 +0400 Subject: [PATCH 08/13] added entry to CHANGELOG.md --- dev-docs/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md index af38c6cfb..5aff1453e 100644 --- a/dev-docs/CHANGELOG.md +++ b/dev-docs/CHANGELOG.md @@ -74,8 +74,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Forbid read and write to self in contract init function: PR [#1482](https://github.com/tact-lang/tact/pull/1482) - Support for using a constant within another constant and for the default value of a struct field before constant declaration: PR [#1478](https://github.com/tact-lang/tact/pull/1478) - Incorrect call generation to a mutation function: PR [#1608](https://github.com/tact-lang/tact/pull/1608) -- Support overriding constants and methods of BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) - Allow constant/trait constants depend on each other: PR [#1622](https://github.com/tact-lang/tact/pull/1622) +- Support overriding constants and methods of BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) +- Forbid traits inherit implicitly from BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) ### Docs From 72cb3a9eb5441abc26d05929a0aa815a93dc94c1 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Tue, 4 Feb 2025 16:03:28 +0400 Subject: [PATCH 09/13] review fixes --- docs/src/content/docs/ref/core-base.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/content/docs/ref/core-base.mdx b/docs/src/content/docs/ref/core-base.mdx index 1bfb1a368..e23150d18 100644 --- a/docs/src/content/docs/ref/core-base.mdx +++ b/docs/src/content/docs/ref/core-base.mdx @@ -8,9 +8,9 @@ prev: Every [contract](/book/contracts) in Tact implicitly [inherits](/book/contracts#traits) the `BaseTrait{:tact}` trait, which contains a number of the most useful [internal functions](/book/contracts#internal-functions) for any kind of contract, and a constant `self.storageReserve{:tact}` aimed at advanced users of Tact. -:::note +:::tip - Before 1.6.0, `BaseTrait{:tact}` was also implicitly inherited by traits, but now you need to explicitly specify `with BaseTrait{:tact}` for your traits. + Prior to 1.6.0, `BaseTrait{:tact}` was also implicitly inherited by traits, but now you must explicitly specify `with BaseTrait{:tact}` for your traits to use it. ::: From 3b351ede92c187bc30445a6206f0c8eeb91e8f46 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:00:20 +0400 Subject: [PATCH 10/13] check that the overridden constant has a super constant Fixes #1713 --- .../base-trait-constant-override-2.tact | 6 +- .../resolveDescriptors.spec.ts.snap | 7143 +++++++++++++++++ src/types/resolveDescriptors.ts | 24 + ...-constant-in-contract-from-base-trait.tact | 9 + ...nt-in-contract-with-multi-inheritance.tact | 14 + ...stant-in-contract-without-inheritance.tact | 7 + ...ing-constant-in-trait-from-base-trait.tact | 9 + ...stant-in-trait-with-multi-inheritance.tact | 14 + ...constant-in-trait-without-inheritance.tact | 7 + ...-constant-in-contract-from-base-trait.tact | 9 + ...ith-multi-inheritance-from-base-trait.tact | 17 + ...nt-in-contract-with-multi-inheritance.tact | 12 + ...ide-for-existing-constant-in-contract.tact | 10 + ...ing-constant-in-trait-from-base-trait.tact | 9 + ...trait-with-deep-inheritance-in-middle.tact | 13 + ...ant-in-trait-with-diamond-inheritance.tact | 19 + ...ith-multi-inheritance-from-base-trait.tact | 16 + ...stant-in-trait-with-multi-inheritance.tact | 12 + ...erride-for-existing-constant-in-trait.tact | 10 + src/types/types.ts | 1 + 20 files changed, 7356 insertions(+), 5 deletions(-) create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-contract-from-base-trait.tact create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-contract-with-multi-inheritance.tact create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-contract-without-inheritance.tact create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-trait-from-base-trait.tact create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-trait-with-multi-inheritance.tact create mode 100644 src/types/test-failed/override-for-non-existing-constant-in-trait-without-inheritance.tact create mode 100644 src/types/test/override-for-existing-constant-in-contract-from-base-trait.tact create mode 100644 src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait.tact create mode 100644 src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance.tact create mode 100644 src/types/test/override-for-existing-constant-in-contract.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait-from-base-trait.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait-with-deep-inheritance-in-middle.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait-with-diamond-inheritance.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance.tact create mode 100644 src/types/test/override-for-existing-constant-in-trait.tact diff --git a/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact index 58503af38..3395fb501 100644 --- a/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact +++ b/src/test/e2e-emulated/contracts/base-trait-constant-override-2.tact @@ -1,8 +1,4 @@ -trait OverrideBaseTraitConstant with BaseTrait { - override const storageReserve: Int = 100; -} - -trait OverrideBaseTraitConstantWithVirtual { +trait OverrideBaseTraitConstantWithVirtual with BaseTrait { override virtual const storageReserve: Int = 100; } diff --git a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap index 38198f738..a9675fc80 100644 --- a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap +++ b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap @@ -495,6 +495,60 @@ exports[`resolveDescriptors should fail descriptors for native-fun-getter 1`] = " `; +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-contract-from-base-trait 1`] = ` +":8:5: Constant "BAR" overrides nothing, remove "override" modifier or inherit any traits with this constant + 7 | contract Test { +> 8 | override const BAR: Int = 10; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 9 | } +" +`; + +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-contract-with-multi-inheritance 1`] = ` +":13:5: Constant "FOO" overrides nothing, remove "override" modifier + 12 | contract Test with T, T2 { +> 13 | override const FOO: Int = 10; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 14 | } +" +`; + +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-contract-without-inheritance 1`] = ` +":6:5: Constant "FOO" overrides nothing, remove "override" modifier or inherit any traits with this constant + 5 | contract Test { +> 6 | override const FOO: Int = 100; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 7 | } +" +`; + +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-trait-from-base-trait 1`] = ` +":8:5: Constant "BAR" overrides nothing, remove "override" modifier or inherit any traits with this constant + 7 | trait Test { +> 8 | override const BAR: Int = 10; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 9 | } +" +`; + +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-trait-with-multi-inheritance 1`] = ` +":13:5: Constant "FOO" overrides nothing, remove "override" modifier + 12 | trait Test with T, T2 { +> 13 | override const FOO: Int = 10; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 14 | } +" +`; + +exports[`resolveDescriptors should fail descriptors for override-for-non-existing-constant-in-trait-without-inheritance 1`] = ` +":6:5: Constant "FOO" overrides nothing, remove "override" modifier or inherit any traits with this constant + 5 | trait Test { +> 6 | override const FOO: Int = 100; + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 7 | } +" +`; + exports[`resolveDescriptors should fail descriptors for override-for-non-existing-function-in-contract-from-base-trait 1`] = ` ":6:5: Function "foo" overrides nothing, remove "override" modifier or inherit any traits with this function 5 | contract Test { @@ -3478,6 +3532,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": false, "loc": abstract const Foo: Int;, "name": "Foo", "type": { @@ -3591,6 +3646,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": true, "loc": override const Foo: Int = 42;, "name": "Foo", "type": { @@ -3730,6 +3786,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": false, "loc": abstract const Foo: Int;, "name": "Foo", "type": { @@ -3907,6 +3964,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": false, "loc": virtual const Foo: Int = 41;, "name": "Foo", "type": { @@ -4026,6 +4084,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": true, "loc": override const Foo: Int = 42;, "name": "Foo", "type": { @@ -4179,6 +4238,7 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, + "isOverride": false, "loc": virtual const Foo: Int = 41;, "name": "Foo", "type": { @@ -13675,6 +13735,7089 @@ exports[`resolveDescriptors should resolve descriptors for message-opcode-expr 1 exports[`resolveDescriptors should resolve descriptors for message-opcode-expr 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-constant-function-in-trait-with-diamond-inheritance 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 17, + "kind": "trait", + "loc": trait T2 with T { + const BAZ: Int = 100; +}, + "name": { + "id": 11, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 12, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 37, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, + "initializer": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 20, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 21, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 24, + "kind": "trait", + "loc": trait T3 with T { + override const BAR: Int = 100; +}, + "name": { + "id": 18, + "kind": "id", + "loc": T3, + "text": "T3", + }, + "traits": [ + { + "id": 19, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, + "initializer": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 20, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 21, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T3", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 50251, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 31, + "initializer": { + "base": 10, + "id": 30, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 28, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 29, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 32, + "kind": "trait", + "loc": trait Test with T2, T3 { + override const BAR: Int = 100; +}, + "name": { + "id": 25, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 26, + "kind": "id", + "loc": T2, + "text": "T2", + }, + { + "id": 27, + "kind": "id", + "loc": T3, + "text": "T3", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 31, + "initializer": { + "base": 10, + "id": 30, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 28, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 29, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 30, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 36, + "initializer": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 34, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 17, + "kind": "trait", + "loc": trait T2 with T { + const BAZ: Int = 100; +}, + "name": { + "id": 11, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 12, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 37, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, + "initializer": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 20, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 21, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 24, + "kind": "trait", + "loc": trait T3 with T { + override const BAR: Int = 100; +}, + "name": { + "id": 18, + "kind": "id", + "loc": T3, + "text": "T3", + }, + "traits": [ + { + "id": 19, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, + "initializer": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 20, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 21, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T3", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 50251, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-constant-function-in-trait-with-diamond-inheritance 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 10; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 10;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 17, + "kind": "contract", + "loc": contract Test with T { + override const BAR: Int = 100; +}, + "name": { + "id": 11, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 12, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": { + "ast": { + "id": 19, + "kind": "contract_init", + "loc": contract Test with T { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, + "interfaces": [], + "kind": "contract", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 10; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 10;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 15, + "kind": "contract", + "loc": contract Test with BaseTrait { + override const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 10, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": { + "ast": { + "id": 17, + "kind": "contract_init", + "loc": contract Test with BaseTrait { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, + "interfaces": [], + "kind": "contract", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 12, + "kind": "trait", + "loc": trait T2 { + const BAR: Int = 100; +}, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 20, + "kind": "contract", + "loc": contract Test with T, T2 { + override const BAR: Int = 100; +}, + "name": { + "id": 13, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 14, + "kind": "id", + "loc": T, + "text": "T", + }, + { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": { + "ast": { + "id": 22, + "kind": "contract_init", + "loc": contract Test with T, T2 { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, + "interfaces": [], + "kind": "contract", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 12, + "kind": "trait", + "loc": trait T2 { + const BAR: Int = 100; +}, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 14, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 20, + "kind": "trait", + "loc": trait T2 { + const BAZ: Int = 100; +}, + "name": { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 27, + "initializer": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const FOO: Int = 100;, + "name": { + "id": 24, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 25, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 28, + "kind": "contract", + "loc": contract Test with T, T2 { + override const FOO: Int = 100; +}, + "name": { + "id": 21, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 22, + "kind": "id", + "loc": T, + "text": "T", + }, + { + "id": 23, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 27, + "initializer": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const FOO: Int = 100;, + "name": { + "id": 24, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 25, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 33, + "initializer": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 31, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 36, + "initializer": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 34, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": { + "ast": { + "id": 30, + "kind": "contract_init", + "loc": contract Test with T, T2 { + override const FOO: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, + "interfaces": [], + "kind": "contract", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 14, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 20, + "kind": "trait", + "loc": trait T2 { + const BAZ: Int = 100; +}, + "name": { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 10; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 10;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 17, + "kind": "trait", + "loc": trait Test with T { + override const BAR: Int = 100; +}, + "name": { + "id": 11, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 12, + "kind": "id", + "loc": T, + "text": "T", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 10; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 10;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 15, + "kind": "trait", + "loc": trait Test with BaseTrait { + override const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 10, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 with T1 { const BAR: Int = 100; }, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 16, + "kind": "trait", + "loc": trait T3 with T2 {}, + "name": { + "id": 14, + "kind": "id", + "loc": T3, + "text": "T3", + }, + "traits": [ + { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 28, + "initializer": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 26, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T3", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 with T1 { const BAR: Int = 100; }, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 50251, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 22, + "initializer": { + "base": 10, + "id": 21, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 19, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 20, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 23, + "kind": "contract", + "loc": contract Test with T3 { + override const BAR: Int = 100; +}, + "name": { + "id": 17, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 18, + "kind": "id", + "loc": T3, + "text": "T3", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 22, + "initializer": { + "base": 10, + "id": 21, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 19, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 20, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 21, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": { + "ast": { + "id": 25, + "kind": "contract_init", + "loc": contract Test with T3 { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, + "interfaces": [], + "kind": "contract", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 16, + "kind": "trait", + "loc": trait T3 with T2 {}, + "name": { + "id": 14, + "kind": "id", + "loc": T3, + "text": "T3", + }, + "traits": [ + { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 28, + "initializer": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 26, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T3", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 with T1 { const BAR: Int = 100; }, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 50251, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 with T1 { const BAR: Int = 100; }, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-multi-inheritance 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 12, + "kind": "trait", + "loc": trait T2 { + const BAR: Int = 100; +}, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 20, + "kind": "trait", + "loc": trait Test with T, T2 { + override const BAR: Int = 100; +}, + "name": { + "id": 13, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 14, + "kind": "id", + "loc": T, + "text": "T", + }, + { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 19, + "initializer": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 16, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 17, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 18, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 12, + "kind": "trait", + "loc": trait T2 { + const BAR: Int = 100; +}, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-multi-inheritance 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 15, + "kind": "trait", + "loc": trait T with BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [ + { + "id": 10, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 37, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + ], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 20, + "initializer": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 17, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 18, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 21, + "kind": "trait", + "loc": trait T2 { + const BAZ: Int = 100; +}, + "name": { + "id": 16, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 20, + "initializer": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 17, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 18, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 28, + "initializer": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const FOO: Int = 100;, + "name": { + "id": 25, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 26, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 29, + "kind": "trait", + "loc": trait Test with T, T2 { + override const FOO: Int = 100; +}, + "name": { + "id": 22, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 23, + "kind": "id", + "loc": T, + "text": "T", + }, + { + "id": 24, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 28, + "initializer": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const FOO: Int = 100;, + "name": { + "id": 25, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 26, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 27, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 33, + "initializer": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 31, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 36, + "initializer": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 17, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 34, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 15, + "kind": "trait", + "loc": trait T with BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [ + { + "id": 10, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 37, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 38, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + ], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const FOO: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 20, + "initializer": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 17, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 18, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 21, + "kind": "trait", + "loc": trait T2 { + const BAZ: Int = 100; +}, + "name": { + "id": 16, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 20, + "initializer": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 17, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 18, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 19, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 54378, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait 2`] = `[]`; + exports[`resolveDescriptors should resolve descriptors for override-for-existing-function-in-contract 1`] = ` [ { diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index 769b69e03..81cae3e78 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -428,10 +428,12 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { src: A.AstConstantDef | A.AstConstantDecl, ): ConstantDescription { const constDeclTy = buildTypeRef(src.type, types); + const isOverride = src.attributes.find((a) => a.type === "override"); return { name: idText(src.name), type: constDeclTy, value: undefined, // initializer will be evaluated after typechecking + isOverride: !!isOverride, loc: src.loc, ast: src, }; @@ -1614,6 +1616,28 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { } } + // Check that "override" constants have a super constant + for (const constantInContractOrTrait of contractOrTrait.constants.values()) { + if (!constantInContractOrTrait.isOverride) { + continue; + } + + const foundOverriddenConstant = contractOrTrait.traits.some((t) => + t.constants.some( + (c) => c.name === constantInContractOrTrait.name, + ), + ); + + if (!foundOverriddenConstant) { + const msg = + contractOrTrait.traits.length === 0 || inheritOnlyBaseTrait + ? `Constant "${constantInContractOrTrait.name}" overrides nothing, remove "override" modifier or inherit any traits with this constant` + : `Constant "${constantInContractOrTrait.name}" overrides nothing, remove "override" modifier`; + + throwCompilationError(msg, constantInContractOrTrait.ast.loc); + } + } + for (const inheritedTrait of contractOrTrait.traits) { // Copy functions for (const traitFunction of inheritedTrait.functions.values()) { diff --git a/src/types/test-failed/override-for-non-existing-constant-in-contract-from-base-trait.tact b/src/types/test-failed/override-for-non-existing-constant-in-contract-from-base-trait.tact new file mode 100644 index 000000000..a63f1117a --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-contract-from-base-trait.tact @@ -0,0 +1,9 @@ +primitive Int; + +trait BaseTrait { + const FOO: Int = 10; +} + +contract Test { + override const BAR: Int = 10; +} diff --git a/src/types/test-failed/override-for-non-existing-constant-in-contract-with-multi-inheritance.tact b/src/types/test-failed/override-for-non-existing-constant-in-contract-with-multi-inheritance.tact new file mode 100644 index 000000000..fe2ab9154 --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-contract-with-multi-inheritance.tact @@ -0,0 +1,14 @@ +primitive Int; + +trait BaseTrait {} +trait T { + const BAR: Int = 10; +} + +trait T2 { + const BAZ: Int = 10; +} + +contract Test with T, T2 { + override const FOO: Int = 10; +} diff --git a/src/types/test-failed/override-for-non-existing-constant-in-contract-without-inheritance.tact b/src/types/test-failed/override-for-non-existing-constant-in-contract-without-inheritance.tact new file mode 100644 index 000000000..5cebcce96 --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-contract-without-inheritance.tact @@ -0,0 +1,7 @@ +primitive Int; + +trait BaseTrait {} + +contract Test { + override const FOO: Int = 100; +} diff --git a/src/types/test-failed/override-for-non-existing-constant-in-trait-from-base-trait.tact b/src/types/test-failed/override-for-non-existing-constant-in-trait-from-base-trait.tact new file mode 100644 index 000000000..6a3f1f1dd --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-trait-from-base-trait.tact @@ -0,0 +1,9 @@ +primitive Int; + +trait BaseTrait { + const FOO: Int = 10; +} + +trait Test { + override const BAR: Int = 10; +} diff --git a/src/types/test-failed/override-for-non-existing-constant-in-trait-with-multi-inheritance.tact b/src/types/test-failed/override-for-non-existing-constant-in-trait-with-multi-inheritance.tact new file mode 100644 index 000000000..770730c89 --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-trait-with-multi-inheritance.tact @@ -0,0 +1,14 @@ +primitive Int; + +trait BaseTrait {} +trait T { + const BAR: Int = 10; +} + +trait T2 { + const BAZ: Int = 10; +} + +trait Test with T, T2 { + override const FOO: Int = 10; +} diff --git a/src/types/test-failed/override-for-non-existing-constant-in-trait-without-inheritance.tact b/src/types/test-failed/override-for-non-existing-constant-in-trait-without-inheritance.tact new file mode 100644 index 000000000..c9a13d053 --- /dev/null +++ b/src/types/test-failed/override-for-non-existing-constant-in-trait-without-inheritance.tact @@ -0,0 +1,7 @@ +primitive Int; + +trait BaseTrait {} + +trait Test { + override const FOO: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-contract-from-base-trait.tact b/src/types/test/override-for-existing-constant-in-contract-from-base-trait.tact new file mode 100644 index 000000000..917acd1b6 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-contract-from-base-trait.tact @@ -0,0 +1,9 @@ +primitive Int; + +trait BaseTrait { + const BAR: Int = 100; +} + +contract Test with BaseTrait { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait.tact b/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait.tact new file mode 100644 index 000000000..615786bc1 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait.tact @@ -0,0 +1,17 @@ +primitive Int; + +trait BaseTrait { + const FOO: Int = 100; +} + +trait T { + const BAR: Int = 100; +} + +trait T2 { + const BAZ: Int = 100; +} + +contract Test with T, T2 { + override const FOO: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance.tact b/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance.tact new file mode 100644 index 000000000..97775035c --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-contract-with-multi-inheritance.tact @@ -0,0 +1,12 @@ +primitive Int; + +trait BaseTrait {} +trait T {} + +trait T2 { + const BAR: Int = 100; +} + +contract Test with T, T2 { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-contract.tact b/src/types/test/override-for-existing-constant-in-contract.tact new file mode 100644 index 000000000..3d35974b9 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-contract.tact @@ -0,0 +1,10 @@ +primitive Int; + +trait BaseTrait {} +trait T { + const BAR: Int = 10; +} + +contract Test with T { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait-from-base-trait.tact b/src/types/test/override-for-existing-constant-in-trait-from-base-trait.tact new file mode 100644 index 000000000..dad41adf9 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait-from-base-trait.tact @@ -0,0 +1,9 @@ +primitive Int; + +trait BaseTrait { + const BAR: Int = 100; +} + +trait Test with BaseTrait { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait-with-deep-inheritance-in-middle.tact b/src/types/test/override-for-existing-constant-in-trait-with-deep-inheritance-in-middle.tact new file mode 100644 index 000000000..22173123b --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait-with-deep-inheritance-in-middle.tact @@ -0,0 +1,13 @@ +primitive Int; + +trait BaseTrait {} + +trait T1 {} + +trait T2 with T1 { const BAR: Int = 100; } + +trait T3 with T2 {} + +trait Test with T3 { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait-with-diamond-inheritance.tact b/src/types/test/override-for-existing-constant-in-trait-with-diamond-inheritance.tact new file mode 100644 index 000000000..61e20ef5e --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait-with-diamond-inheritance.tact @@ -0,0 +1,19 @@ +primitive Int; + +trait BaseTrait {} + +trait T { + const BAR: Int = 100; +} + +trait T2 with T { + const BAZ: Int = 100; +} + +trait T3 with T { + override const BAR: Int = 100; +} + +trait Test with T2, T3 { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait.tact b/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait.tact new file mode 100644 index 000000000..afe7a3674 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance-from-base-trait.tact @@ -0,0 +1,16 @@ +primitive Int; + +trait BaseTrait { + const FOO: Int = 100; +} +trait T with BaseTrait { + const BAR: Int = 100; +} + +trait T2 { + const BAZ: Int = 100; +} + +trait Test with T, T2 { + override const FOO: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance.tact b/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance.tact new file mode 100644 index 000000000..1fa9a74c4 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait-with-multi-inheritance.tact @@ -0,0 +1,12 @@ +primitive Int; + +trait BaseTrait {} +trait T {} + +trait T2 { + const BAR: Int = 100; +} + +trait Test with T, T2 { + override const BAR: Int = 100; +} diff --git a/src/types/test/override-for-existing-constant-in-trait.tact b/src/types/test/override-for-existing-constant-in-trait.tact new file mode 100644 index 000000000..c6e5bafc2 --- /dev/null +++ b/src/types/test/override-for-existing-constant-in-trait.tact @@ -0,0 +1,10 @@ +primitive Int; + +trait BaseTrait {} +trait T { + const BAR: Int = 10; +} + +trait Test with T { + override const BAR: Int = 100; +} diff --git a/src/types/types.ts b/src/types/types.ts index 48aa1b8a6..8648b37a9 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -95,6 +95,7 @@ export type ConstantDescription = { name: string; type: TypeRef; value: A.AstLiteral | undefined; + isOverride: boolean; loc: SrcInfo; ast: A.AstConstantDef | A.AstConstantDecl; }; From e4e96d24b455180535bd27dc0547c27ad61503dc Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:02:19 +0400 Subject: [PATCH 11/13] added entry to CHANGELOG.md --- dev-docs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md index e3896950f..d8840a17d 100644 --- a/dev-docs/CHANGELOG.md +++ b/dev-docs/CHANGELOG.md @@ -81,6 +81,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Error message for comment (text) receivers with 124 bytes or more: PR [#1711](https://github.com/tact-lang/tact/pull/1711) - Support overriding constants and methods of BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) - Forbid traits inherit implicitly from BaseTrait: PR [#1591](https://github.com/tact-lang/tact/pull/1591) +- Forbid the `override` modifier for constants without the corresponding super-constant: PR [#1591](https://github.com/tact-lang/tact/pull/1591) ### Docs From e254a9cedee97a42a7f4ada74c480510d87a4e91 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:22:20 +0400 Subject: [PATCH 12/13] updated snapshots --- .../resolveDescriptors.spec.ts.snap | 5199 ++++++++--------- 1 file changed, 2578 insertions(+), 2621 deletions(-) diff --git a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap index a9675fc80..6779634e8 100644 --- a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap +++ b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap @@ -13735,7 +13735,7 @@ exports[`resolveDescriptors should resolve descriptors for message-opcode-expr 1 exports[`resolveDescriptors should resolve descriptors for message-opcode-expr 2`] = `[]`; -exports[`resolveDescriptors should resolve descriptors for override-for-constant-function-in-trait-with-diamond-inheritance 1`] = ` +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 1`] = ` [ { "ast": { @@ -13809,11 +13809,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { "id": 6, "kind": "id", @@ -13831,7 +13831,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "id": 10, "kind": "trait", "loc": trait T { - const BAR: Int = 100; + const BAR: Int = 10; }, "name": { "id": 5, @@ -13850,11 +13850,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { "id": 6, "kind": "id", @@ -13869,7 +13869,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, }, "isOverride": false, - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": "BAR", "type": { "kind": "ref", @@ -13880,8 +13880,8 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, }, ], @@ -13906,7 +13906,12 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "attributes": [], "declarations": [ { - "attributes": [], + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], "id": 16, "initializer": { "base": 10, @@ -13916,12 +13921,12 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { "id": 13, "kind": "id", - "loc": BAZ, - "text": "BAZ", + "loc": BAR, + "text": "BAR", }, "type": { "id": 14, @@ -13932,15 +13937,15 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, ], "id": 17, - "kind": "trait", - "loc": trait T2 with T { - const BAZ: Int = 100; + "kind": "contract", + "loc": contract Test with T { + override const BAR: Int = 100; }, "name": { "id": 11, "kind": "id", - "loc": T2, - "text": "T2", + "loc": Test, + "text": "Test", }, "traits": [ { @@ -13954,7 +13959,12 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "constants": [ { "ast": { - "attributes": [], + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], "id": 16, "initializer": { "base": 10, @@ -13964,64 +13974,22 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { "id": 13, "kind": "id", - "loc": BAZ, - "text": "BAZ", - }, - "type": { - "id": 14, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - { - "ast": { - "attributes": [], - "id": 39, - "initializer": { - "base": 10, - "id": 38, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 37, + "id": 14, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": false, - "loc": const BAR: Int = 100;, + "isOverride": true, + "loc": override const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -14030,7 +13998,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, "value": { "base": 10, - "id": 38, + "id": 15, "kind": "number", "loc": 100, "value": 100n, @@ -14041,16 +14009,59 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "fields": [], "functions": Map {}, "header": null, - "init": null, + "init": { + "ast": { + "id": 19, + "kind": "contract_init", + "loc": contract Test with T { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, "interfaces": [], - "kind": "trait", - "name": "T2", + "kind": "contract", + "name": "Test", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, { "ast": { "attributes": [], @@ -14062,11 +14073,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { "id": 6, "kind": "id", @@ -14084,7 +14095,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "id": 10, "kind": "trait", "loc": trait T { - const BAR: Int = 100; + const BAR: Int = 10; }, "name": { "id": 5, @@ -14103,11 +14114,11 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { "id": 6, "kind": "id", @@ -14122,7 +14133,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, }, "isOverride": false, - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": "BAR", "type": { "kind": "ref", @@ -14133,8 +14144,8 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "base": 10, "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, }, ], @@ -14155,97 +14166,116 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "uid": 6769, }, ], - "uid": 54378, + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, }, { "ast": { "attributes": [], "declarations": [ { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 23, + "attributes": [], + "id": 7, "initializer": { "base": 10, - "id": 22, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 20, + "id": 4, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 21, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 24, + "id": 8, "kind": "trait", - "loc": trait T3 with T { - override const BAR: Int = 100; + "loc": trait BaseTrait { + const BAR: Int = 100; }, "name": { - "id": 18, + "id": 3, "kind": "id", - "loc": T3, - "text": "T3", + "loc": BaseTrait, + "text": "BaseTrait", }, - "traits": [ - { - "id": 19, - "kind": "id", - "loc": T, - "text": "T", - }, - ], + "traits": [], }, "constants": [ { "ast": { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 23, - "initializer": { + "attributes": [], + "id": 7, + "initializer": { "base": 10, - "id": 22, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 20, + "id": 4, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 21, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": true, - "loc": override const BAR: Int = 100;, + "isOverride": false, + "loc": const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -14254,7 +14284,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, "value": { "base": 10, - "id": 22, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -14268,118 +14298,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "init": null, "interfaces": [], "kind": "trait", - "name": "T3", + "name": "BaseTrait", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 100; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - ], - "uid": 50251, + "traits": [], + "uid": 1020, }, { "ast": { @@ -14392,10 +14318,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "type": "override", }, ], - "id": 31, + "id": 14, "initializer": { "base": 10, - "id": 30, + "id": 13, "kind": "number", "loc": 100, "value": 100n, @@ -14403,42 +14329,36 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 28, + "id": 11, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 29, + "id": 12, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 32, - "kind": "trait", - "loc": trait Test with T2, T3 { + "id": 15, + "kind": "contract", + "loc": contract Test with BaseTrait { override const BAR: Int = 100; }, "name": { - "id": 25, + "id": 9, "kind": "id", "loc": Test, "text": "Test", }, "traits": [ { - "id": 26, - "kind": "id", - "loc": T2, - "text": "T2", - }, - { - "id": 27, + "id": 10, "kind": "id", - "loc": T3, - "text": "T3", + "loc": BaseTrait, + "text": "BaseTrait", }, ], }, @@ -14451,10 +14371,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "type": "override", }, ], - "id": 31, + "id": 14, "initializer": { "base": 10, - "id": 30, + "id": 13, "kind": "number", "loc": 100, "value": 100n, @@ -14462,13 +14382,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 28, + "id": 11, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 29, + "id": 12, "kind": "type_id", "loc": Int, "text": "Int", @@ -14484,49 +14404,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, "value": { "base": 10, - "id": 30, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - { - "ast": { - "attributes": [], - "id": 36, - "initializer": { - "base": 10, - "id": 35, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAZ: Int = 100;, - "name": { - "id": 13, - "kind": "id", - "loc": BAZ, - "text": "BAZ", - }, - "type": { - "id": 34, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 35, + "id": 13, "kind": "number", "loc": 100, "value": 100n, @@ -14537,9 +14415,20 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "fields": [], "functions": Map {}, "header": null, - "init": null, + "init": { + "ast": { + "id": 17, + "kind": "contract_init", + "loc": contract Test with BaseTrait { + override const BAR: Int = 100; +}, + "params": [], + "statements": [], + }, + "params": [], + }, "interfaces": [], - "kind": "trait", + "kind": "contract", "name": "Test", "origin": "user", "partialFieldCount": 0, @@ -14553,100 +14442,51 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "declarations": [ { "attributes": [], - "id": 16, + "id": 7, "initializer": { "base": 10, - "id": 15, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 13, + "id": 4, "kind": "id", - "loc": BAZ, - "text": "BAZ", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 14, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 17, + "id": 8, "kind": "trait", - "loc": trait T2 with T { - const BAZ: Int = 100; + "loc": trait BaseTrait { + const BAR: Int = 100; }, "name": { - "id": 11, + "id": 3, "kind": "id", - "loc": T2, - "text": "T2", + "loc": BaseTrait, + "text": "BaseTrait", }, - "traits": [ - { - "id": 12, - "kind": "id", - "loc": T, - "text": "T", - }, - ], + "traits": [], }, "constants": [ { "ast": { "attributes": [], - "id": 16, - "initializer": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAZ: Int = 100;, - "name": { - "id": 13, - "kind": "id", - "loc": BAZ, - "text": "BAZ", - }, - "type": { - "id": 14, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - { - "ast": { - "attributes": [], - "id": 39, + "id": 7, "initializer": { "base": 10, - "id": 38, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -14654,13 +14494,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 6, + "id": 4, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 37, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", @@ -14676,7 +14516,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant }, "value": { "base": 10, - "id": 38, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -14690,963 +14530,158 @@ exports[`resolveDescriptors should resolve descriptors for override-for-constant "init": null, "interfaces": [], "kind": "trait", - "name": "T2", + "name": "BaseTrait", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 100; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - ], - "uid": 54378, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 100; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 23, - "initializer": { - "base": 10, - "id": 22, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 20, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 21, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 24, - "kind": "trait", - "loc": trait T3 with T { - override const BAR: Int = 100; -}, - "name": { - "id": 18, - "kind": "id", - "loc": T3, - "text": "T3", - }, - "traits": [ - { - "id": 19, - "kind": "id", - "loc": T, - "text": "T", - }, - ], - }, - "constants": [ - { - "ast": { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 23, - "initializer": { - "base": 10, - "id": 22, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 20, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 21, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": true, - "loc": override const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 22, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T3", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 100; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - ], - "uid": 50251, - }, - ], - "uid": 44104, - }, -] -`; - -exports[`resolveDescriptors should resolve descriptors for override-for-constant-function-in-trait-with-diamond-inheritance 2`] = `[]`; - -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 1`] = ` -[ - { - "ast": { - "id": 2, - "kind": "primitive_type_decl", - "loc": primitive Int;, - "name": { - "id": 1, - "kind": "id", - "loc": Int, - "text": "Int", - }, - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "primitive_type_decl", - "name": "Int", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 38154, - }, - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 10;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 10; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 10;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 10;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 16, - "initializer": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 13, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 14, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 17, - "kind": "contract", - "loc": contract Test with T { - override const BAR: Int = 100; -}, - "name": { - "id": 11, - "kind": "id", - "loc": Test, - "text": "Test", - }, - "traits": [ - { - "id": 12, - "kind": "id", - "loc": T, - "text": "T", - }, - ], - }, - "constants": [ - { - "ast": { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 16, - "initializer": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 13, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 14, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": true, - "loc": override const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": { - "ast": { - "id": 19, - "kind": "contract_init", - "loc": contract Test with T { - override const BAR: Int = 100; -}, - "params": [], - "statements": [], - }, - "params": [], - }, - "interfaces": [], - "kind": "contract", - "name": "Test", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 10;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 10, - "kind": "trait", - "loc": trait T { - const BAR: Int = 10; -}, - "name": { - "id": 5, - "kind": "id", - "loc": T, - "text": "T", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 9, - "initializer": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 10;, - "name": { - "id": 6, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 7, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 10;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 8, - "kind": "number", - "loc": 10, - "value": 10n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, - }, - ], - "uid": 44104, - }, -] -`; - -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract 2`] = `[]`; - -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 1`] = ` -[ - { - "ast": { - "id": 2, - "kind": "primitive_type_decl", - "loc": primitive Int;, - "name": { - "id": 1, - "kind": "id", - "loc": Int, - "text": "Int", - }, - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "primitive_type_decl", - "name": "Int", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 38154, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 7, - "initializer": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 4, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 5, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 8, - "kind": "trait", - "loc": trait BaseTrait { + "traits": [], + "uid": 1020, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 11, + "initializer": { + "base": 10, + "id": 10, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 8, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 9, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 12, + "kind": "trait", + "loc": trait T2 { const BAR: Int = 100; }, "name": { - "id": 3, + "id": 7, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": T2, + "text": "T2", }, "traits": [], }, @@ -15654,10 +14689,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 7, + "id": 11, "initializer": { "base": 10, - "id": 6, + "id": 10, "kind": "number", "loc": 100, "value": 100n, @@ -15665,13 +14700,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 4, + "id": 8, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 9, "kind": "type_id", "loc": Int, "text": "Int", @@ -15687,7 +14722,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 6, + "id": 10, "kind": "number", "loc": 100, "value": 100n, @@ -15701,14 +14736,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "BaseTrait", + "name": "T2", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 1020, + "uid": 54378, }, { "ast": { @@ -15721,10 +14756,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 14, + "id": 19, "initializer": { "base": 10, - "id": 13, + "id": 18, "kind": "number", "loc": 100, "value": 100n, @@ -15732,36 +14767,42 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 11, + "id": 16, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 12, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 15, + "id": 20, "kind": "contract", - "loc": contract Test with BaseTrait { + "loc": contract Test with T, T2 { override const BAR: Int = 100; }, "name": { - "id": 9, + "id": 13, "kind": "id", "loc": Test, "text": "Test", }, "traits": [ { - "id": 10, + "id": 14, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": T, + "text": "T", + }, + { + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", }, ], }, @@ -15774,10 +14815,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 14, + "id": 19, "initializer": { "base": 10, - "id": 13, + "id": 18, "kind": "number", "loc": 100, "value": 100n, @@ -15785,13 +14826,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 11, + "id": 16, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 12, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", @@ -15807,7 +14848,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 13, + "id": 18, "kind": "number", "loc": 100, "value": 100n, @@ -15820,9 +14861,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "header": null, "init": { "ast": { - "id": 17, + "id": 22, "kind": "contract_init", - "loc": contract Test with BaseTrait { + "loc": contract Test with T, T2 { override const BAR: Int = 100; }, "params": [], @@ -15839,16 +14880,80 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "signature": null, "tlb": null, "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 4, + "kind": "trait", + "loc": trait BaseTrait {}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "BaseTrait", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T {}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, { "ast": { "attributes": [], "declarations": [ { "attributes": [], - "id": 7, + "id": 11, "initializer": { "base": 10, - "id": 6, + "id": 10, "kind": "number", "loc": 100, "value": 100n, @@ -15856,29 +14961,29 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 4, + "id": 8, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 9, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 8, + "id": 12, "kind": "trait", - "loc": trait BaseTrait { + "loc": trait T2 { const BAR: Int = 100; }, "name": { - "id": 3, + "id": 7, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": T2, + "text": "T2", }, "traits": [], }, @@ -15886,10 +14991,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 7, + "id": 11, "initializer": { "base": 10, - "id": 6, + "id": 10, "kind": "number", "loc": 100, "value": 100n, @@ -15897,13 +15002,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 4, + "id": 8, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 9, "kind": "type_id", "loc": Int, "text": "Int", @@ -15919,7 +15024,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 6, + "id": 10, "kind": "number", "loc": 100, "value": 100n, @@ -15933,14 +15038,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "BaseTrait", + "name": "T2", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 1020, + "uid": 54378, }, ], "uid": 44104, @@ -15948,9 +15053,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing ] `; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-from-base-trait 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 2`] = `[]`; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 1`] = ` +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 1`] = ` [ { "ast": { @@ -15984,19 +15089,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 4, + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, "kind": "trait", - "loc": trait BaseTrait {}, + "loc": trait BaseTrait { + const FOO: Int = 100; +}, "name": { "id": 3, "kind": "id", "loc": BaseTrait, "text": "BaseTrait", }, - "traits": [], - }, - "constants": [], + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -16016,19 +15192,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 6, + "declarations": [ + { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 14, "kind": "trait", - "loc": trait T {}, + "loc": trait T { + const BAR: Int = 100; +}, "name": { - "id": 5, + "id": 9, "kind": "id", "loc": T, "text": "T", }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -16051,37 +15298,37 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 11, + "id": 19, "initializer": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { - "id": 8, + "id": 16, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 9, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 12, + "id": 20, "kind": "trait", "loc": trait T2 { - const BAR: Int = 100; + const BAZ: Int = 100; }, "name": { - "id": 7, + "id": 15, "kind": "id", "loc": T2, "text": "T2", @@ -16092,32 +15339,32 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 11, + "id": 19, "initializer": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { - "id": 8, + "id": 16, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 9, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", + "loc": const BAZ: Int = 100;, + "name": "BAZ", "type": { "kind": "ref", "name": "Int", @@ -16125,7 +15372,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, @@ -16159,91 +15406,175 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 19, + "id": 27, "initializer": { "base": 10, - "id": 18, + "id": 26, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "loc": override const FOO: Int = 100;, "name": { - "id": 16, + "id": 24, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 25, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 28, + "kind": "contract", + "loc": contract Test with T, T2 { + override const FOO: Int = 100; +}, + "name": { + "id": 21, + "kind": "id", + "loc": Test, + "text": "Test", + }, + "traits": [ + { + "id": 22, + "kind": "id", + "loc": T, + "text": "T", + }, + { + "id": 23, + "kind": "id", + "loc": T2, + "text": "T2", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 27, + "initializer": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const FOO: Int = 100;, + "name": { + "id": 24, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 25, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 33, + "initializer": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 17, + "id": 31, "kind": "type_id", "loc": Int, "text": "Int", }, }, - ], - "id": 20, - "kind": "contract", - "loc": contract Test with T, T2 { - override const BAR: Int = 100; -}, - "name": { - "id": 13, - "kind": "id", - "loc": Test, - "text": "Test", - }, - "traits": [ - { - "id": 14, - "kind": "id", - "loc": T, - "text": "T", + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, }, - { - "id": 15, - "kind": "id", - "loc": T2, - "text": "T2", + "value": { + "base": 10, + "id": 32, + "kind": "number", + "loc": 100, + "value": 100n, }, - ], - }, - "constants": [ + }, { "ast": { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 19, + "attributes": [], + "id": 36, "initializer": { "base": 10, - "id": 18, + "id": 35, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { "id": 16, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 17, + "id": 34, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": true, - "loc": override const BAR: Int = 100;, - "name": "BAR", + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", "type": { "kind": "ref", "name": "Int", @@ -16251,7 +15582,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 18, + "id": 35, "kind": "number", "loc": 100, "value": 100n, @@ -16264,10 +15595,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "header": null, "init": { "ast": { - "id": 22, + "id": 30, "kind": "contract_init", "loc": contract Test with T, T2 { - override const BAR: Int = 100; + override const FOO: Int = 100; }, "params": [], "statements": [], @@ -16286,10 +15617,38 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 4, + "declarations": [ + { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 8, "kind": "trait", - "loc": trait BaseTrait {}, + "loc": trait BaseTrait { + const FOO: Int = 100; +}, "name": { "id": 3, "kind": "id", @@ -16298,7 +15657,50 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 7, + "initializer": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const FOO: Int = 100;, + "name": { + "id": 4, + "kind": "id", + "loc": FOO, + "text": "FOO", + }, + "type": { + "id": 5, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const FOO: Int = 100;, + "name": "FOO", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 6, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -16318,19 +15720,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 6, + "declarations": [ + { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 14, "kind": "trait", - "loc": trait T {}, + "loc": trait T { + const BAR: Int = 100; +}, "name": { - "id": 5, + "id": 9, "kind": "id", "loc": T, "text": "T", }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 13, + "initializer": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 10, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 11, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 12, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -16353,37 +15826,37 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 11, + "id": 19, "initializer": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { - "id": 8, + "id": 16, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 9, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 12, + "id": 20, "kind": "trait", "loc": trait T2 { - const BAR: Int = 100; + const BAZ: Int = 100; }, "name": { - "id": 7, + "id": 15, "kind": "id", "loc": T2, "text": "T2", @@ -16394,32 +15867,32 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 11, + "id": 19, "initializer": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { - "id": 8, + "id": 16, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 9, + "id": 17, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", + "loc": const BAZ: Int = 100;, + "name": "BAZ", "type": { "kind": "ref", "name": "Int", @@ -16427,7 +15900,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 10, + "id": 18, "kind": "number", "loc": 100, "value": 100n, @@ -16456,9 +15929,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing ] `; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 2`] = `[]`; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 1`] = ` +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 1`] = ` [ { "ast": { @@ -16492,38 +15965,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 7, - "initializer": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const FOO: Int = 100;, - "name": { - "id": 4, - "kind": "id", - "loc": FOO, - "text": "FOO", - }, - "type": { - "id": 5, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 8, + "declarations": [], + "id": 4, "kind": "trait", - "loc": trait BaseTrait { - const FOO: Int = 100; -}, + "loc": trait BaseTrait {}, "name": { "id": 3, "kind": "id", @@ -16532,50 +15977,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "traits": [], }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 7, - "initializer": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const FOO: Int = 100;, - "name": { - "id": 4, - "kind": "id", - "loc": FOO, - "text": "FOO", - }, - "type": { - "id": 5, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const FOO: Int = 100;, - "name": "FOO", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], + "constants": [], "dependsOn": [], "fields": [], "functions": Map {}, @@ -16598,37 +16000,37 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 13, + "id": 9, "initializer": { "base": 10, - "id": 12, + "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { - "id": 10, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 11, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 14, + "id": 10, "kind": "trait", "loc": trait T { - const BAR: Int = 100; + const BAR: Int = 10; }, "name": { - "id": 9, + "id": 5, "kind": "id", "loc": T, "text": "T", @@ -16639,31 +16041,31 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 13, + "id": 9, "initializer": { "base": 10, - "id": 12, + "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": { - "id": 10, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 11, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAR: Int = 100;, + "loc": const BAR: Int = 10;, "name": "BAR", "type": { "kind": "ref", @@ -16672,10 +16074,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 12, + "id": 8, "kind": "number", - "loc": 100, - "value": 100n, + "loc": 10, + "value": 10n, }, }, ], @@ -16695,109 +16097,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "traits": [], "uid": 6769, }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [], - "id": 19, - "initializer": { - "base": 10, - "id": 18, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAZ: Int = 100;, - "name": { - "id": 16, - "kind": "id", - "loc": BAZ, - "text": "BAZ", - }, - "type": { - "id": 17, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - ], - "id": 20, - "kind": "trait", - "loc": trait T2 { - const BAZ: Int = 100; -}, - "name": { - "id": 15, - "kind": "id", - "loc": T2, - "text": "T2", - }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 19, - "initializer": { - "base": 10, - "id": 18, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAZ: Int = 100;, - "name": { - "id": 16, - "kind": "id", - "loc": BAZ, - "text": "BAZ", - }, - "type": { - "id": 17, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 18, - "kind": "number", - "loc": 100, - "value": 100n, - }, - }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T2", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 54378, - }, { "ast": { "attributes": [], @@ -16809,54 +16108,48 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 27, + "id": 16, "initializer": { "base": 10, - "id": 26, + "id": 15, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const FOO: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 24, + "id": 13, "kind": "id", - "loc": FOO, - "text": "FOO", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 25, + "id": 14, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 28, - "kind": "contract", - "loc": contract Test with T, T2 { - override const FOO: Int = 100; + "id": 17, + "kind": "trait", + "loc": trait Test with T { + override const BAR: Int = 100; }, "name": { - "id": 21, + "id": 11, "kind": "id", "loc": Test, "text": "Test", }, "traits": [ { - "id": 22, + "id": 12, "kind": "id", "loc": T, "text": "T", }, - { - "id": 23, - "kind": "id", - "loc": T2, - "text": "T2", - }, ], }, "constants": [ @@ -16868,32 +16161,32 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 27, + "id": 16, "initializer": { "base": 10, - "id": 26, + "id": 15, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const FOO: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 24, + "id": 13, "kind": "id", - "loc": FOO, - "text": "FOO", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 25, + "id": 14, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": true, - "loc": override const FOO: Int = 100;, - "name": "FOO", + "loc": override const BAR: Int = 100;, + "name": "BAR", "type": { "kind": "ref", "name": "Int", @@ -16901,19 +16194,179 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 26, + "id": 15, "kind": "number", "loc": 100, "value": 100n, }, }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ { "ast": { "attributes": [], - "id": 33, + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 10; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", + }, + "traits": [], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 10;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 10;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 10, + "value": 10n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, + }, + ], + "uid": 44104, + }, +] +`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 2`] = `[]`; + +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 1`] = ` +[ + { + "ast": { + "id": 2, + "kind": "primitive_type_decl", + "loc": primitive Int;, + "name": { + "id": 1, + "kind": "id", + "loc": Int, + "text": "Int", + }, + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "primitive_type_decl", + "name": "Int", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 38154, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 7, "initializer": { "base": 10, - "id": 32, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -16921,63 +16374,62 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 10, + "id": 4, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 31, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 32, - "kind": "number", - "loc": 100, - "value": 100n, - }, + ], + "id": 8, + "kind": "trait", + "loc": trait BaseTrait { + const BAR: Int = 100; +}, + "name": { + "id": 3, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", }, + "traits": [], + }, + "constants": [ { "ast": { "attributes": [], - "id": 36, + "id": 7, "initializer": { "base": 10, - "id": 35, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 16, + "id": 4, "kind": "id", - "loc": BAZ, - "text": "BAZ", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 34, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", + "loc": const BAR: Int = 100;, + "name": "BAR", "type": { "kind": "ref", "name": "Int", @@ -16985,7 +16437,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 35, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -16996,273 +16448,176 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "fields": [], "functions": Map {}, "header": null, - "init": { - "ast": { - "id": 30, - "kind": "contract_init", - "loc": contract Test with T, T2 { - override const FOO: Int = 100; -}, - "params": [], - "statements": [], - }, - "params": [], - }, + "init": null, "interfaces": [], - "kind": "contract", - "name": "Test", + "kind": "trait", + "name": "BaseTrait", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [ + "traits": [], + "uid": 1020, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [ { - "attributes": [], - "id": 7, - "initializer": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const FOO: Int = 100;, - "name": { - "id": 4, - "kind": "id", - "loc": FOO, - "text": "FOO", - }, - "type": { - "id": 5, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, + "loc": override, + "type": "override", }, ], - "id": 8, - "kind": "trait", - "loc": trait BaseTrait { - const FOO: Int = 100; -}, + "id": 14, + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, "name": { - "id": 3, + "id": 11, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": BAR, + "text": "BAR", }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 7, - "initializer": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const FOO: Int = 100;, - "name": { - "id": 4, - "kind": "id", - "loc": FOO, - "text": "FOO", - }, - "type": { - "id": 5, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const FOO: Int = 100;, - "name": "FOO", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 6, - "kind": "number", - "loc": 100, - "value": 100n, - }, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, + }, + ], + "id": 15, + "kind": "trait", + "loc": trait Test with BaseTrait { + override const BAR: Int = 100; +}, + "name": { + "id": 9, + "kind": "id", + "loc": Test, + "text": "Test", }, + "traits": [ + { + "id": 10, + "kind": "id", + "loc": BaseTrait, + "text": "BaseTrait", + }, + ], + }, + "constants": [ { "ast": { - "attributes": [], - "declarations": [ + "attributes": [ { - "attributes": [], - "id": 13, - "initializer": { - "base": 10, - "id": 12, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 10, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 11, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, + "loc": override, + "type": "override", }, ], "id": 14, - "kind": "trait", - "loc": trait T { - const BAR: Int = 100; -}, - "name": { - "id": 9, - "kind": "id", - "loc": T, - "text": "T", + "initializer": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, }, - "traits": [], - }, - "constants": [ - { - "ast": { - "attributes": [], - "id": 13, - "initializer": { - "base": 10, - "id": 12, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": const BAR: Int = 100;, - "name": { - "id": 10, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 11, - "kind": "type_id", - "loc": Int, - "text": "Int", - }, - }, - "isOverride": false, - "loc": const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 12, - "kind": "number", - "loc": 100, - "value": 100n, - }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 11, + "kind": "id", + "loc": BAR, + "text": "BAR", }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 6769, + "type": { + "id": 12, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": true, + "loc": override const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 13, + "kind": "number", + "loc": 100, + "value": 100n, + }, }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "Test", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ { "ast": { "attributes": [], "declarations": [ { "attributes": [], - "id": 19, + "id": 7, "initializer": { "base": 10, - "id": 18, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 16, + "id": 4, "kind": "id", - "loc": BAZ, - "text": "BAZ", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 17, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 20, + "id": 8, "kind": "trait", - "loc": trait T2 { - const BAZ: Int = 100; + "loc": trait BaseTrait { + const BAR: Int = 100; }, "name": { - "id": 15, + "id": 3, "kind": "id", - "loc": T2, - "text": "T2", + "loc": BaseTrait, + "text": "BaseTrait", }, "traits": [], }, @@ -17270,32 +16625,32 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 19, + "id": 7, "initializer": { "base": 10, - "id": 18, + "id": 6, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAZ: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 16, + "id": 4, "kind": "id", - "loc": BAZ, - "text": "BAZ", + "loc": BAR, + "text": "BAR", }, "type": { - "id": 17, + "id": 5, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAZ: Int = 100;, - "name": "BAZ", + "loc": const BAR: Int = 100;, + "name": "BAR", "type": { "kind": "ref", "name": "Int", @@ -17303,7 +16658,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 18, + "id": 6, "kind": "number", "loc": 100, "value": 100n, @@ -17317,14 +16672,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T2", + "name": "BaseTrait", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 54378, + "uid": 1020, }, ], "uid": 44104, @@ -17332,9 +16687,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing ] `; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-contract-with-multi-inheritance-from-base-trait 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 2`] = `[]`; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 1`] = ` +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 1`] = ` [ { "ast": { @@ -17397,78 +16752,115 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "traits": [], "uid": 1020, }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, { "ast": { "attributes": [], "declarations": [ { "attributes": [], - "id": 9, + "id": 12, "initializer": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": { - "id": 6, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 7, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 10, + "id": 13, "kind": "trait", - "loc": trait T { - const BAR: Int = 10; -}, + "loc": trait T2 with T1 { const BAR: Int = 100; }, "name": { - "id": 5, + "id": 7, "kind": "id", - "loc": T, - "text": "T", + "loc": T2, + "text": "T2", }, - "traits": [], + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], }, "constants": [ { "ast": { "attributes": [], - "id": 9, + "id": 12, "initializer": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": { - "id": 6, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 7, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -17477,10 +16869,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, }, ], @@ -17491,104 +16883,99 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T", + "name": "T2", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [], - "uid": 6769, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 16, - "initializer": { - "base": 10, - "id": 15, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, "name": { - "id": 13, + "id": 5, "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 14, - "kind": "type_id", - "loc": Int, - "text": "Int", + "loc": T1, + "text": "T1", }, + "traits": [], }, - ], - "id": 17, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 16, "kind": "trait", - "loc": trait Test with T { - override const BAR: Int = 100; -}, + "loc": trait T3 with T2 {}, "name": { - "id": 11, + "id": 14, "kind": "id", - "loc": Test, - "text": "Test", + "loc": T3, + "text": "T3", }, "traits": [ { - "id": 12, + "id": 15, "kind": "id", - "loc": T, - "text": "T", + "loc": T2, + "text": "T2", }, ], }, "constants": [ { "ast": { - "attributes": [ - { - "loc": override, - "type": "override", - }, - ], - "id": 16, + "attributes": [], + "id": 27, "initializer": { "base": 10, - "id": 15, + "id": 26, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": override const BAR: Int = 100;, + "loc": const BAR: Int = 100;, "name": { - "id": 13, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 14, + "id": 25, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": true, - "loc": override const BAR: Int = 100;, + "isOverride": false, + "loc": const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -17597,7 +16984,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 15, + "id": 26, "kind": "number", "loc": 100, "value": 100n, @@ -17611,7 +16998,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "Test", + "name": "T3", "origin": "user", "partialFieldCount": 0, "receivers": [], @@ -17624,72 +17011,77 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 9, + "id": 12, "initializer": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": { - "id": 6, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 7, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 10, + "id": 13, "kind": "trait", - "loc": trait T { - const BAR: Int = 10; -}, + "loc": trait T2 with T1 { const BAR: Int = 100; }, "name": { - "id": 5, + "id": 7, "kind": "id", - "loc": T, - "text": "T", + "loc": T2, + "text": "T2", }, - "traits": [], + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], }, "constants": [ { "ast": { "attributes": [], - "id": 9, + "id": 12, "initializer": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": { - "id": 6, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 7, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", }, }, "isOverride": false, - "loc": const BAR: Int = 10;, + "loc": const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -17698,10 +17090,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 8, + "id": 11, "kind": "number", - "loc": 10, - "value": 10n, + "loc": 100, + "value": 100n, }, }, ], @@ -17712,126 +17104,172 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 6769, + "uid": 58377, }, ], - "uid": 44104, - }, -] -`; - -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait 2`] = `[]`; - -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 1`] = ` -[ - { - "ast": { - "id": 2, - "kind": "primitive_type_decl", - "loc": primitive Int;, - "name": { - "id": 1, - "kind": "id", - "loc": Int, - "text": "Int", - }, - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "primitive_type_decl", - "name": "Int", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 38154, + "uid": 50251, }, { "ast": { "attributes": [], "declarations": [ { - "attributes": [], - "id": 7, + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 22, "initializer": { "base": 10, - "id": 6, + "id": 21, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 4, + "id": 19, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 20, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 8, + "id": 23, "kind": "trait", - "loc": trait BaseTrait { - const BAR: Int = 100; + "loc": trait Test with T3 { + override const BAR: Int = 100; }, "name": { - "id": 3, + "id": 17, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": Test, + "text": "Test", }, - "traits": [], + "traits": [ + { + "id": 18, + "kind": "id", + "loc": T3, + "text": "T3", + }, + ], }, "constants": [ { "ast": { - "attributes": [], - "id": 7, + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 22, "initializer": { "base": 10, - "id": 6, + "id": 21, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 4, + "id": 19, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 20, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": false, - "loc": const BAR: Int = 100;, + "isOverride": true, + "loc": override const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -17840,7 +17278,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 6, + "id": 21, "kind": "number", "loc": 100, "value": 100n, @@ -17854,143 +17292,279 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "BaseTrait", + "name": "Test", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [ - { - "attributes": [ + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 16, + "kind": "trait", + "loc": trait T3 with T2 {}, + "name": { + "id": 14, + "kind": "id", + "loc": T3, + "text": "T3", + }, + "traits": [ { - "loc": override, - "type": "override", + "id": 15, + "kind": "id", + "loc": T2, + "text": "T2", }, ], - "id": 14, - "initializer": { - "base": 10, - "id": 13, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 11, - "kind": "id", - "loc": BAR, - "text": "BAR", + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 27, + "initializer": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 25, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 26, + "kind": "number", + "loc": 100, + "value": 100n, + }, }, - "type": { - "id": 12, - "kind": "type_id", - "loc": Int, - "text": "Int", + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T3", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 13, + "kind": "trait", + "loc": trait T2 with T1 { const BAR: Int = 100; }, + "name": { + "id": 7, + "kind": "id", + "loc": T2, + "text": "T2", + }, + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], + }, + "constants": [ + { + "ast": { + "attributes": [], + "id": 12, + "initializer": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 9, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 10, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 11, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, }, - }, - ], - "id": 15, - "kind": "trait", - "loc": trait Test with BaseTrait { - override const BAR: Int = 100; -}, - "name": { - "id": 9, - "kind": "id", - "loc": Test, - "text": "Test", - }, - "traits": [ - { - "id": 10, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - ], - }, - "constants": [ - { - "ast": { - "attributes": [ - { - "loc": override, - "type": "override", + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], }, - ], - "id": 14, - "initializer": { - "base": 10, - "id": 13, - "kind": "number", - "loc": 100, - "value": 100n, - }, - "kind": "constant_def", - "loc": override const BAR: Int = 100;, - "name": { - "id": 11, - "kind": "id", - "loc": BAR, - "text": "BAR", - }, - "type": { - "id": 12, - "kind": "type_id", - "loc": Int, - "text": "Int", + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, }, - }, - "isOverride": true, - "loc": override const BAR: Int = 100;, - "name": "BAR", - "type": { - "kind": "ref", - "name": "Int", - "optional": false, - }, - "value": { - "base": 10, - "id": 13, - "kind": "number", - "loc": 100, - "value": 100n, - }, + ], + "uid": 50251, }, - ], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "Test", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ { "ast": { "attributes": [], "declarations": [ { "attributes": [], - "id": 7, + "id": 12, "initializer": { "base": 10, - "id": 6, + "id": 11, "kind": "number", "loc": 100, "value": 100n, @@ -17998,40 +17572,45 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 4, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 8, + "id": 13, "kind": "trait", - "loc": trait BaseTrait { - const BAR: Int = 100; -}, + "loc": trait T2 with T1 { const BAR: Int = 100; }, "name": { - "id": 3, + "id": 7, "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", + "loc": T2, + "text": "T2", }, - "traits": [], + "traits": [ + { + "id": 8, + "kind": "id", + "loc": T1, + "text": "T1", + }, + ], }, "constants": [ { "ast": { "attributes": [], - "id": 7, + "id": 12, "initializer": { "base": 10, - "id": 6, + "id": 11, "kind": "number", "loc": 100, "value": 100n, @@ -18039,13 +17618,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 4, + "id": 9, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 5, + "id": 10, "kind": "type_id", "loc": Int, "text": "Int", @@ -18061,7 +17640,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 6, + "id": 11, "kind": "number", "loc": 100, "value": 100n, @@ -18075,14 +17654,79 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "BaseTrait", + "name": "T2", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [ + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 58377, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [], + "id": 6, + "kind": "trait", + "loc": trait T1 {}, + "name": { + "id": 5, + "kind": "id", + "loc": T1, + "text": "T1", + }, + "traits": [], + }, + "constants": [], + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T1", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 1020, + "uid": 58377, }, ], "uid": 44104, @@ -18090,9 +17734,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing ] `; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-from-base-trait 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 2`] = `[]`; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 1`] = ` +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-diamond-inheritance 1`] = ` [ { "ast": { @@ -18158,19 +17802,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 6, + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, "kind": "trait", - "loc": trait T1 {}, + "loc": trait T { + const BAR: Int = 100; +}, "name": { "id": 5, "kind": "id", - "loc": T1, - "text": "T1", + "loc": T, + "text": "T", }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -18178,14 +17893,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T1", + "name": "T", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 58377, + "uid": 6769, }, { "ast": { @@ -18193,45 +17908,47 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 12, + "id": 16, "initializer": { "base": 10, - "id": 11, + "id": 15, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": const BAZ: Int = 100;, "name": { - "id": 9, + "id": 13, "kind": "id", - "loc": BAR, - "text": "BAR", + "loc": BAZ, + "text": "BAZ", }, "type": { - "id": 10, + "id": 14, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 13, + "id": 17, "kind": "trait", - "loc": trait T2 with T1 { const BAR: Int = 100; }, + "loc": trait T2 with T { + const BAZ: Int = 100; +}, "name": { - "id": 7, + "id": 11, "kind": "id", "loc": T2, "text": "T2", }, "traits": [ { - "id": 8, + "id": 12, "kind": "id", - "loc": T1, - "text": "T1", + "loc": T, + "text": "T", }, ], }, @@ -18239,10 +17956,52 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 12, + "id": 16, "initializer": { "base": 10, - "id": 11, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, "kind": "number", "loc": 100, "value": 100n, @@ -18250,13 +18009,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 37, "kind": "type_id", "loc": Int, "text": "Int", @@ -18272,7 +18031,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 11, + "id": 38, "kind": "number", "loc": 100, "value": 100n, @@ -18296,19 +18055,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 6, + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, "kind": "trait", - "loc": trait T1 {}, + "loc": trait T { + const BAR: Int = 100; +}, "name": { "id": 5, "kind": "id", - "loc": T1, - "text": "T1", + "loc": T, + "text": "T", }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -18316,14 +18146,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T1", + "name": "T", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 58377, + "uid": 6769, }, ], "uid": 54378, @@ -18331,54 +18161,92 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 16, + "declarations": [ + { + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, + "initializer": { + "base": 10, + "id": 22, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": override const BAR: Int = 100;, + "name": { + "id": 20, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 21, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 24, "kind": "trait", - "loc": trait T3 with T2 {}, + "loc": trait T3 with T { + override const BAR: Int = 100; +}, "name": { - "id": 14, + "id": 18, "kind": "id", "loc": T3, "text": "T3", }, "traits": [ { - "id": 15, + "id": 19, "kind": "id", - "loc": T2, - "text": "T2", + "loc": T, + "text": "T", }, ], }, "constants": [ { "ast": { - "attributes": [], - "id": 28, + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, "initializer": { "base": 10, - "id": 27, + "id": 22, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 9, + "id": 20, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 26, + "id": 21, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": false, - "loc": const BAR: Int = 100;, + "isOverride": true, + "loc": override const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -18387,7 +18255,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 27, + "id": 22, "kind": "number", "loc": 100, "value": 100n, @@ -18414,10 +18282,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 12, + "id": 9, "initializer": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18425,45 +18293,40 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 13, + "id": 10, "kind": "trait", - "loc": trait T2 with T1 { const BAR: Int = 100; }, + "loc": trait T { + const BAR: Int = 100; +}, "name": { - "id": 7, + "id": 5, "kind": "id", - "loc": T2, - "text": "T2", + "loc": T, + "text": "T", }, - "traits": [ - { - "id": 8, - "kind": "id", - "loc": T1, - "text": "T1", - }, - ], + "traits": [], }, "constants": [ { "ast": { "attributes": [], - "id": 12, + "id": 9, "initializer": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18471,13 +18334,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", @@ -18493,7 +18356,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18507,79 +18370,14 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T2", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 6, - "kind": "trait", - "loc": trait T1 {}, - "name": { - "id": 5, - "kind": "id", - "loc": T1, - "text": "T1", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T1", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 58377, - }, - ], - "uid": 54378, - }, - { - "ast": { - "attributes": [], - "declarations": [], - "id": 6, - "kind": "trait", - "loc": trait T1 {}, - "name": { - "id": 5, - "kind": "id", - "loc": T1, - "text": "T1", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T1", + "name": "T", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 58377, + "uid": 6769, }, ], "uid": 50251, @@ -18595,10 +18393,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 22, + "id": 31, "initializer": { "base": 10, - "id": 21, + "id": 30, "kind": "number", "loc": 100, "value": 100n, @@ -18606,33 +18404,39 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 19, + "id": 28, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 20, + "id": 29, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 23, - "kind": "contract", - "loc": contract Test with T3 { + "id": 32, + "kind": "trait", + "loc": trait Test with T2, T3 { override const BAR: Int = 100; }, "name": { - "id": 17, + "id": 25, "kind": "id", "loc": Test, "text": "Test", }, "traits": [ { - "id": 18, + "id": 26, + "kind": "id", + "loc": T2, + "text": "T2", + }, + { + "id": 27, "kind": "id", "loc": T3, "text": "T3", @@ -18648,10 +18452,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "type": "override", }, ], - "id": 22, + "id": 31, "initializer": { "base": 10, - "id": 21, + "id": 30, "kind": "number", "loc": 100, "value": 100n, @@ -18659,13 +18463,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": override const BAR: Int = 100;, "name": { - "id": 19, + "id": 28, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 20, + "id": 29, "kind": "type_id", "loc": Int, "text": "Int", @@ -18681,7 +18485,49 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 21, + "id": 30, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 36, + "initializer": { + "base": 10, + "id": 35, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 34, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 35, "kind": "number", "loc": 100, "value": 100n, @@ -18692,20 +18538,9 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "fields": [], "functions": Map {}, "header": null, - "init": { - "ast": { - "id": 25, - "kind": "contract_init", - "loc": contract Test with T3 { - override const BAR: Int = 100; -}, - "params": [], - "statements": [], - }, - "params": [], - }, + "init": null, "interfaces": [], - "kind": "contract", + "kind": "trait", "name": "Test", "origin": "user", "partialFieldCount": 0, @@ -18716,54 +18551,50 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 4, - "kind": "trait", - "loc": trait BaseTrait {}, - "name": { - "id": 3, - "kind": "id", - "loc": BaseTrait, - "text": "BaseTrait", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "BaseTrait", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 1020, - }, - { - "ast": { - "attributes": [], - "declarations": [], - "id": 16, + "declarations": [ + { + "attributes": [], + "id": 16, + "initializer": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 17, "kind": "trait", - "loc": trait T3 with T2 {}, + "loc": trait T2 with T { + const BAZ: Int = 100; +}, "name": { - "id": 14, + "id": 11, "kind": "id", - "loc": T3, - "text": "T3", + "loc": T2, + "text": "T2", }, "traits": [ { - "id": 15, + "id": 12, "kind": "id", - "loc": T2, - "text": "T2", + "loc": T, + "text": "T", }, ], }, @@ -18771,10 +18602,52 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "id": 28, + "id": 16, "initializer": { "base": 10, - "id": 27, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAZ: Int = 100;, + "name": { + "id": 13, + "kind": "id", + "loc": BAZ, + "text": "BAZ", + }, + "type": { + "id": 14, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAZ: Int = 100;, + "name": "BAZ", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 15, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + { + "ast": { + "attributes": [], + "id": 39, + "initializer": { + "base": 10, + "id": 38, "kind": "number", "loc": 100, "value": 100n, @@ -18782,13 +18655,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 26, + "id": 37, "kind": "type_id", "loc": Int, "text": "Int", @@ -18804,7 +18677,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 27, + "id": 38, "kind": "number", "loc": 100, "value": 100n, @@ -18818,7 +18691,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T3", + "name": "T2", "origin": "user", "partialFieldCount": 0, "receivers": [], @@ -18831,10 +18704,10 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "declarations": [ { "attributes": [], - "id": 12, + "id": 9, "initializer": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18842,45 +18715,40 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 13, + "id": 10, "kind": "trait", - "loc": trait T2 with T1 { const BAR: Int = 100; }, + "loc": trait T { + const BAR: Int = 100; +}, "name": { - "id": 7, + "id": 5, "kind": "id", - "loc": T2, - "text": "T2", + "loc": T, + "text": "T", }, - "traits": [ - { - "id": 8, - "kind": "id", - "loc": T1, - "text": "T1", - }, - ], + "traits": [], }, "constants": [ { "ast": { "attributes": [], - "id": 12, + "id": 9, "initializer": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18888,13 +18756,13 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "kind": "constant_def", "loc": const BAR: Int = 100;, "name": { - "id": 9, + "id": 6, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 7, "kind": "type_id", "loc": Int, "text": "Int", @@ -18910,7 +18778,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 11, + "id": 8, "kind": "number", "loc": 100, "value": 100n, @@ -18924,160 +18792,210 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T2", + "name": "T", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, - "traits": [ - { - "ast": { - "attributes": [], - "declarations": [], - "id": 6, - "kind": "trait", - "loc": trait T1 {}, - "name": { - "id": 5, - "kind": "id", - "loc": T1, - "text": "T1", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T1", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 58377, + "traits": [], + "uid": 6769, + }, + ], + "uid": 54378, + }, + { + "ast": { + "attributes": [], + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, }, - ], - "uid": 54378, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, + "kind": "trait", + "loc": trait T { + const BAR: Int = 100; +}, + "name": { + "id": 5, + "kind": "id", + "loc": T, + "text": "T", }, + "traits": [], + }, + "constants": [ { "ast": { "attributes": [], - "declarations": [], - "id": 6, - "kind": "trait", - "loc": trait T1 {}, + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, "name": { - "id": 5, + "id": 6, "kind": "id", - "loc": T1, - "text": "T1", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", }, - "traits": [], }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T1", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 58377, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, }, ], - "uid": 50251, + "dependsOn": [], + "fields": [], + "functions": Map {}, + "header": null, + "init": null, + "interfaces": [], + "kind": "trait", + "name": "T", + "origin": "user", + "partialFieldCount": 0, + "receivers": [], + "signature": null, + "tlb": null, + "traits": [], + "uid": 6769, }, { "ast": { "attributes": [], "declarations": [ { - "attributes": [], - "id": 12, + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, "initializer": { "base": 10, - "id": 11, + "id": 22, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 9, + "id": 20, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 21, "kind": "type_id", "loc": Int, "text": "Int", }, }, ], - "id": 13, + "id": 24, "kind": "trait", - "loc": trait T2 with T1 { const BAR: Int = 100; }, + "loc": trait T3 with T { + override const BAR: Int = 100; +}, "name": { - "id": 7, + "id": 18, "kind": "id", - "loc": T2, - "text": "T2", + "loc": T3, + "text": "T3", }, "traits": [ { - "id": 8, + "id": 19, "kind": "id", - "loc": T1, - "text": "T1", + "loc": T, + "text": "T", }, ], }, "constants": [ { "ast": { - "attributes": [], - "id": 12, + "attributes": [ + { + "loc": override, + "type": "override", + }, + ], + "id": 23, "initializer": { "base": 10, - "id": 11, + "id": 22, "kind": "number", "loc": 100, "value": 100n, }, "kind": "constant_def", - "loc": const BAR: Int = 100;, + "loc": override const BAR: Int = 100;, "name": { - "id": 9, + "id": 20, "kind": "id", "loc": BAR, "text": "BAR", }, "type": { - "id": 10, + "id": 21, "kind": "type_id", "loc": Int, "text": "Int", }, }, - "isOverride": false, - "loc": const BAR: Int = 100;, + "isOverride": true, + "loc": override const BAR: Int = 100;, "name": "BAR", "type": { "kind": "ref", @@ -19086,7 +19004,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing }, "value": { "base": 10, - "id": 11, + "id": 22, "kind": "number", "loc": 100, "value": 100n, @@ -19100,7 +19018,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T2", + "name": "T3", "origin": "user", "partialFieldCount": 0, "receivers": [], @@ -19110,19 +19028,90 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing { "ast": { "attributes": [], - "declarations": [], - "id": 6, + "declarations": [ + { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + ], + "id": 10, "kind": "trait", - "loc": trait T1 {}, + "loc": trait T { + const BAR: Int = 100; +}, "name": { "id": 5, "kind": "id", - "loc": T1, - "text": "T1", + "loc": T, + "text": "T", }, "traits": [], }, - "constants": [], + "constants": [ + { + "ast": { + "attributes": [], + "id": 9, + "initializer": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + "kind": "constant_def", + "loc": const BAR: Int = 100;, + "name": { + "id": 6, + "kind": "id", + "loc": BAR, + "text": "BAR", + }, + "type": { + "id": 7, + "kind": "type_id", + "loc": Int, + "text": "Int", + }, + }, + "isOverride": false, + "loc": const BAR: Int = 100;, + "name": "BAR", + "type": { + "kind": "ref", + "name": "Int", + "optional": false, + }, + "value": { + "base": 10, + "id": 8, + "kind": "number", + "loc": 100, + "value": 100n, + }, + }, + ], "dependsOn": [], "fields": [], "functions": Map {}, @@ -19130,49 +19119,17 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "init": null, "interfaces": [], "kind": "trait", - "name": "T1", + "name": "T", "origin": "user", "partialFieldCount": 0, "receivers": [], "signature": null, "tlb": null, "traits": [], - "uid": 58377, + "uid": 6769, }, ], - "uid": 54378, - }, - { - "ast": { - "attributes": [], - "declarations": [], - "id": 6, - "kind": "trait", - "loc": trait T1 {}, - "name": { - "id": 5, - "kind": "id", - "loc": T1, - "text": "T1", - }, - "traits": [], - }, - "constants": [], - "dependsOn": [], - "fields": [], - "functions": Map {}, - "header": null, - "init": null, - "interfaces": [], - "kind": "trait", - "name": "T1", - "origin": "user", - "partialFieldCount": 0, - "receivers": [], - "signature": null, - "tlb": null, - "traits": [], - "uid": 58377, + "uid": 50251, }, ], "uid": 44104, @@ -19180,7 +19137,7 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing ] `; -exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-deep-inheritance-in-middle 2`] = `[]`; +exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-diamond-inheritance 2`] = `[]`; exports[`resolveDescriptors should resolve descriptors for override-for-existing-constant-in-trait-with-multi-inheritance 1`] = ` [ From 37bb315d17858efcc97a13f038a6af63a26bfab3 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:01:58 +0400 Subject: [PATCH 13/13] inline isOverride --- .../resolveDescriptors.spec.ts.snap | 67 ------------------- src/types/resolveDescriptors.ts | 7 +- src/types/types.ts | 1 - 3 files changed, 4 insertions(+), 71 deletions(-) diff --git a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap index 6779634e8..133d6e95a 100644 --- a/src/types/__snapshots__/resolveDescriptors.spec.ts.snap +++ b/src/types/__snapshots__/resolveDescriptors.spec.ts.snap @@ -3532,7 +3532,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": false, "loc": abstract const Foo: Int;, "name": "Foo", "type": { @@ -3646,7 +3645,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": true, "loc": override const Foo: Int = 42;, "name": "Foo", "type": { @@ -3786,7 +3784,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": false, "loc": abstract const Foo: Int;, "name": "Foo", "type": { @@ -3964,7 +3961,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": false, "loc": virtual const Foo: Int = 41;, "name": "Foo", "type": { @@ -4084,7 +4080,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": true, "loc": override const Foo: Int = 42;, "name": "Foo", "type": { @@ -4238,7 +4233,6 @@ exports[`resolveDescriptors should resolve descriptors for contract-const-overri "text": "Int", }, }, - "isOverride": false, "loc": virtual const Foo: Int = 41;, "name": "Foo", "type": { @@ -13868,7 +13862,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 10;, "name": "BAR", "type": { @@ -13988,7 +13981,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -14132,7 +14124,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 10;, "name": "BAR", "type": { @@ -14274,7 +14265,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -14394,7 +14384,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -14506,7 +14495,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -14712,7 +14700,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -14838,7 +14825,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -15014,7 +15000,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -15156,7 +15141,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -15259,7 +15243,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -15362,7 +15345,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -15488,7 +15470,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const FOO: Int = 100;, "name": "FOO", "type": { @@ -15530,7 +15511,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -15572,7 +15552,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -15684,7 +15663,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -15787,7 +15765,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -15890,7 +15867,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -16064,7 +16040,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 10;, "name": "BAR", "type": { @@ -16184,7 +16159,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -16285,7 +16259,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 10;, "name": "BAR", "type": { @@ -16427,7 +16400,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -16547,7 +16519,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -16648,7 +16619,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -16859,7 +16829,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -16974,7 +16943,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17080,7 +17048,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17268,7 +17235,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -17348,7 +17314,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17454,7 +17419,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17630,7 +17594,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17869,7 +17832,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -17979,7 +17941,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -18021,7 +17982,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18122,7 +18082,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18245,7 +18204,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -18346,7 +18304,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18475,7 +18432,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -18517,7 +18473,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -18625,7 +18580,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -18667,7 +18621,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18768,7 +18721,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18874,7 +18826,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -18994,7 +18945,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -19095,7 +19045,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -19304,7 +19253,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -19430,7 +19378,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const BAR: Int = 100;, "name": "BAR", "type": { @@ -19563,7 +19510,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -19705,7 +19651,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -19815,7 +19760,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -19857,7 +19801,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -19958,7 +19901,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -20064,7 +20006,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -20190,7 +20131,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": true, "loc": override const FOO: Int = 100;, "name": "FOO", "type": { @@ -20232,7 +20172,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -20274,7 +20213,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { @@ -20382,7 +20320,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAR: Int = 100;, "name": "BAR", "type": { @@ -20424,7 +20361,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -20525,7 +20461,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -20631,7 +20566,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const FOO: Int = 100;, "name": "FOO", "type": { @@ -20734,7 +20668,6 @@ exports[`resolveDescriptors should resolve descriptors for override-for-existing "text": "Int", }, }, - "isOverride": false, "loc": const BAZ: Int = 100;, "name": "BAZ", "type": { diff --git a/src/types/resolveDescriptors.ts b/src/types/resolveDescriptors.ts index 81cae3e78..f59be7fbd 100644 --- a/src/types/resolveDescriptors.ts +++ b/src/types/resolveDescriptors.ts @@ -428,12 +428,10 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { src: A.AstConstantDef | A.AstConstantDecl, ): ConstantDescription { const constDeclTy = buildTypeRef(src.type, types); - const isOverride = src.attributes.find((a) => a.type === "override"); return { name: idText(src.name), type: constDeclTy, value: undefined, // initializer will be evaluated after typechecking - isOverride: !!isOverride, loc: src.loc, ast: src, }; @@ -1618,7 +1616,10 @@ export function resolveDescriptors(ctx: CompilerContext, Ast: FactoryAst) { // Check that "override" constants have a super constant for (const constantInContractOrTrait of contractOrTrait.constants.values()) { - if (!constantInContractOrTrait.isOverride) { + const isOverride = constantInContractOrTrait.ast.attributes.find( + (a) => a.type === "override", + ); + if (!isOverride) { continue; } diff --git a/src/types/types.ts b/src/types/types.ts index 8648b37a9..48aa1b8a6 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -95,7 +95,6 @@ export type ConstantDescription = { name: string; type: TypeRef; value: A.AstLiteral | undefined; - isOverride: boolean; loc: SrcInfo; ast: A.AstConstantDef | A.AstConstantDecl; };