diff options
author | Lancer11211 <109360848+Lancer11211@users.noreply.github.com> | 2022-07-26 07:40:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-26 07:40:49 +0200 |
commit | efd5c571bf3de5c3b496be92fcf9a403898084f1 (patch) | |
tree | 96783d605424787dd811f5372152a4101800a395 /tests/effects/teffects15.nim | |
parent | 62b81d7f109b2ec4b249a0abea121d7e0bc14d86 (diff) | |
download | Nim-efd5c571bf3de5c3b496be92fcf9a403898084f1.tar.gz |
.forbids pragma: defining forbidden tags (#20050)
* .forbids pragma: defining illegal effects for proc types This patch intends to define the opposite of the .tags pragma: a way to define effects which are not allowed in a proc. * updated documentation and changelogs for the forbids pragma * renamed notTagEffects to forbiddenEffects * corrected issues of forbids pragma the forbids pragma didn't handle simple restrictions properly and it also had issues with subtyping * removed incorrect character from changelog * added test to cover the interaction of methods and the forbids pragma * covering the interaction of the tags and forbids pragmas * updated manual about the forbids pragma * removed useless statement * corrected the subtyping of proc types using the forbids pragma * updated manual for the forbids pragma * updated documentations for forbids pragma * updated nim docs * updated docs with rsttester.nim * regenerated documentation * updated rst docs * Update changelog.md Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com> * updated changelog * corrected typo Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Diffstat (limited to 'tests/effects/teffects15.nim')
-rw-r--r-- | tests/effects/teffects15.nim | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/effects/teffects15.nim b/tests/effects/teffects15.nim new file mode 100644 index 000000000..c3079cdbc --- /dev/null +++ b/tests/effects/teffects15.nim @@ -0,0 +1,18 @@ +discard """ +action: compile +errormsg: "method1(c) has an illegal effect: IO" +line: 18 +""" + +type + IO = object ## input/output effect + CustomObject* = object of RootObj + text: string + +method method1(obj: var CustomObject): string {.tags: [IO].} = obj.text & "." +method method2(obj: var CustomObject): string = obj.text & ":" + +proc noIO() {.forbids: [IO].} = + var c = CustomObject(text: "a") + echo c.method2() + echo c.method1() |