October 01, 2018 contracts in interfaces: do they work, do I have to do something to enable checking of contracts ? | ||||
---|---|---|---|---|
| ||||
I am trying my hand at contracts and they work fine in plain functions and in methods, but I can't make them work in interfaces. https://dlang.org/spec/interface.html#interface-contracts $ dmd --version DMD64 D Compiler v2.081.1 Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright ///////////////////////// void main() { WillBloop test = new WillBloop(); // also tried // Blooper test = new WillBloop(); // it compiles but the in contract does not seem enforced test.limited(-1); // this does not croak auto no_interface = new NoInterface(); no_interface.limited(-10); // this works as expected } interface Blooper { void limited(int some_other_name) in { assert(some_other_name > 0, "asssert failed in interface"); } } class WillBloop : Blooper { void limited(int a_name) { import std.stdio : writeln; writeln(a_name); } } class NoInterface { void limited(int another_name) in { assert(another_name > 0, "assert failed in NoInterface"); } do { import std.stdio: writeln; writeln(another_name); } } |
October 01, 2018 Re: contracts in interfaces: do they work, do I have to do something to enable checking of contracts ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Emil | On Monday, 1 October 2018 at 13:49:53 UTC, Emil wrote: > I am trying my hand at contracts and they work fine in plain functions and in methods, but I can't make them work in interfaces. > > https://dlang.org/spec/interface.html#interface-contracts > > $ dmd --version > DMD64 D Compiler v2.081.1 > Copyright (C) 1999-2018 by The D Language Foundation, All Rights Reserved written by Walter Bright > > > ///////////////////////// > void main() > { > WillBloop test = new WillBloop(); > // also tried > // Blooper test = new WillBloop(); > // it compiles but the in contract does not seem enforced > test.limited(-1); // this does not croak > > auto no_interface = new NoInterface(); > no_interface.limited(-10); // this works as expected > } > > interface Blooper > { > void limited(int some_other_name) > in > { > assert(some_other_name > 0, "asssert failed in interface"); > } > } > > class WillBloop : Blooper > { > void limited(int a_name) { > import std.stdio : writeln; > writeln(a_name); > } > } > > class NoInterface > { > void limited(int another_name) > in > { > assert(another_name > 0, "assert failed in NoInterface"); > } > do > { > import std.stdio: writeln; > writeln(another_name); > } > } Yeah... had such problems too, a while ago. https://forum.dlang.org/thread/sadsceubvapbeezjytdp@forum.dlang.org Seems, that one of the tickets is closed, but the pull request is not merged. Don't know how matters stand with this, actually. |
Copyright © 1999-2021 by the D Language Foundation