Skip to content

Commit 963068b

Browse files
jensjohaCommit Queue
authored and
Commit Queue
committed
[CFE] Add offset tests for spreads
Change-Id: Ie0e39ce66820539fe4ae72fdde20b3ccbe46f1b6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338561 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent f67b219 commit 963068b

18 files changed

+710
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
void main(List<String> args) {
2+
Set<String> fooSet = {
3+
...args,
4+
"hello",
5+
...{"x": "y"}.keys,
6+
for (String s in args) ...{
7+
"$s",
8+
"${s}_2",
9+
},
10+
if (args.length == 42) ...{
11+
"length",
12+
"is",
13+
"42",
14+
},
15+
};
16+
print(fooSet);
17+
18+
List<String> fooList = [
19+
...args,
20+
"hello",
21+
...{"x": "y"}.keys,
22+
for (String s in args) ...[
23+
"$s",
24+
"${s}_2",
25+
],
26+
if (args.length == 42) ...[
27+
"length",
28+
"is",
29+
"42",
30+
],
31+
];
32+
print(fooList);
33+
34+
Map<String, String> fooMap = {
35+
"hello": "world",
36+
for (String s in args) ...{
37+
"$s": "${s}_2",
38+
},
39+
if (args.length == 42) ...{
40+
"length": "42",
41+
"is": "42",
42+
"42": "!",
43+
},
44+
};
45+
print(fooMap);
46+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
import "dart:collection" as col;
5+
6+
[5]static method main([23] core::List<core::String> args) → void {
7+
[45] [45] core::Set<core::String> fooSet = [54] [54] block {
8+
[54] [54] final core::Set<core::String> #t1 = [54] [54] col::LinkedHashSet::of [54]<core::String>([63] args);
9+
[73] [73] [73] [54] [54] #t1.{core::Set::add}{Invariant}[-1]([73] "hello"){(core::String) → core::bool};
10+
[100] [100] [100] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([100] [89] [89]<core::String, core::String>{[93] [90] [90] "x": [95] [95] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
11+
[110] for ([122] core::String s in [127] [127] args)
12+
[136] [136] [136] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([136]<core::String>{[148] "${[146] [146] s}", [164] "${[159] [159] s}_2"}){(core::Iterable<core::String>) → void};
13+
[177] if([193] [193] [186] [186] [181] [181] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [196] [196] 42)
14+
[203] [203] [203] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([203]<core::String>{[211] "length", [227] "is", [239] "42"}){(core::Iterable<core::String>) → void};
15+
} =>[54] [54] #t1;
16+
[259] [259] [259] core::print [264]([265] fooSet);
17+
[290] [290] core::List<core::String> fooList = [300] [300] block {
18+
[300] [300] final core::List<core::String> #t2 = [300] [300] core::List::of [300]<core::String>([309] args);
19+
[319] [319] [319] [300] [300] #t2.{core::List::add}{Invariant}[-1]([319] "hello"){(core::String) → void};
20+
[346] [346] [346] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([346] [335] [335]<core::String, core::String>{[339] [336] [336] "x": [341] [341] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
21+
[356] for ([368] core::String s in [373] [373] args)
22+
[382] [382] [382] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([382]<core::String>[[394] "${[392] [392] s}", [410] "${[405] [405] s}_2"]){(core::Iterable<core::String>) → void};
23+
[423] if([439] [439] [432] [432] [427] [427] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [442] [442] 42)
24+
[449] [449] [449] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([449]<core::String>[[457] "length", [473] "is", [485] "42"]){(core::Iterable<core::String>) → void};
25+
} =>[300] [300] #t2;
26+
[505] [505] [505] core::print [510]([511] fooList);
27+
[544] [544] core::Map<core::String, core::String> fooMap = [553] [553] block {
28+
[553] [553] final core::Map<core::String, core::String> #t3 = [553] [553]<core::String, core::String>{};
29+
[566] [566] [566] [553] [553] #t3.{core::Map::[]=}{Invariant}[-1]([559] "hello", [568] "world"){(core::String, core::String) → void};
30+
[581] for ([593] core::String s in [598] [598] args)
31+
[607] [607] [607] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([607]<core::String, core::String>{[619] [619] [619] "${[617] [617] s}": [629] [629] "${[624] [624] s}_2"}){(core::Map<core::String, core::String>) → void};
32+
[642] if([658] [658] [651] [651] [646] [646] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [661] [661] 42)
33+
[668] [668] [668] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([668]<core::String, core::String>{[684] [676] [676] "length": [686] [686] "42", [702] [698] [698] "is": [704] [704] "42", [720] [716] [716] "42": [722] [722] "!"}){(core::Map<core::String, core::String>) → void};
34+
} =>[553] [553] #t3;
35+
[741] [741] [741] core::print [746]([747] fooMap);
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
import "dart:collection" as col;
5+
6+
[5]static method main([23] core::List<core::String> args) → void {
7+
[45] [45] core::Set<core::String> fooSet = [54] [54] block {
8+
[54] [54] final core::Set<core::String> #t1 = [54] [54] col::LinkedHashSet::of [54]<core::String>([63] args);
9+
[73] [73] [73] [54] [54] #t1.{core::Set::add}{Invariant}[-1]([73] "hello"){(core::String) → core::bool};
10+
[100] [100] [100] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([100] [89] [89]<core::String, core::String>{[93] [90] [90] "x": [95] [95] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
11+
[110] for ([122] core::String s in [127] [127] args)
12+
[136] [136] [136] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([136]<core::String>{[148] "${[146] [146] s}", [164] "${[159] [159] s}_2"}){(core::Iterable<core::String>) → void};
13+
[177] if([193] [193] [186] [186] [181] [181] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [196] [196] 42)
14+
[203] [203] [203] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([203]<core::String>{[211] "length", [227] "is", [239] "42"}){(core::Iterable<core::String>) → void};
15+
} =>[54] [54] #t1;
16+
[259] [259] [259] core::print [264]([265] fooSet);
17+
[290] [290] core::List<core::String> fooList = [300] [300] block {
18+
[300] [300] final core::List<core::String> #t2 = [300] [300] core::List::of [300]<core::String>([309] args);
19+
[319] [319] [319] [300] [300] #t2.{core::List::add}{Invariant}[-1]([319] "hello"){(core::String) → void};
20+
[346] [346] [346] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([346] [335] [335]<core::String, core::String>{[339] [336] [336] "x": [341] [341] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
21+
[356] for ([368] core::String s in [373] [373] args)
22+
[382] [382] [382] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([382]<core::String>[[394] "${[392] [392] s}", [410] "${[405] [405] s}_2"]){(core::Iterable<core::String>) → void};
23+
[423] if([439] [439] [432] [432] [427] [427] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [442] [442] 42)
24+
[449] [449] [449] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([449]<core::String>[[457] "length", [473] "is", [485] "42"]){(core::Iterable<core::String>) → void};
25+
} =>[300] [300] #t2;
26+
[505] [505] [505] core::print [510]([511] fooList);
27+
[544] [544] core::Map<core::String, core::String> fooMap = [553] [553] block {
28+
[553] [553] final core::Map<core::String, core::String> #t3 = [553] [553]<core::String, core::String>{};
29+
[566] [566] [566] [553] [553] #t3.{core::Map::[]=}{Invariant}[-1]([559] "hello", [568] "world"){(core::String, core::String) → void};
30+
[581] for ([593] core::String s in [598] [598] args)
31+
[607] [607] [607] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([607]<core::String, core::String>{[619] [619] [619] "${[617] [617] s}": [629] [629] "${[624] [624] s}_2"}){(core::Map<core::String, core::String>) → void};
32+
[642] if([658] [658] [651] [651] [646] [646] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [661] [661] 42)
33+
[668] [668] [668] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([668]<core::String, core::String>{[684] [676] [676] "length": [686] [686] "42", [702] [698] [698] "is": [704] [704] "42", [720] [716] [716] "42": [722] [722] "!"}){(core::Map<core::String, core::String>) → void};
34+
} =>[553] [553] #t3;
35+
[741] [741] [741] core::print [746]([747] fooMap);
36+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
void main(List<String> args) {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
void main(List<String> args) {}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
import "dart:collection" as col;
5+
6+
[5]static method main([23] core::List<core::String> args) → void {
7+
[45] [45] core::Set<core::String> fooSet = [54] [54] block {
8+
[54] [54] final core::Set<core::String> #t1 = [54] [54] col::LinkedHashSet::of [54]<core::String>([63] args);
9+
[73] [73] [73] [54] [54] #t1.{core::Set::add}{Invariant}[-1]([73] "hello"){(core::String) → core::bool};
10+
[100] [100] [100] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([100] [89] [89]<core::String, core::String>{[93] [90] [90] "x": [95] [95] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
11+
[110] for ([122] core::String s in [127] [127] args)
12+
[136] [136] [136] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([136]<core::String>{[148] "${[146] [146] s}", [164] "${[159] [159] s}_2"}){(core::Iterable<core::String>) → void};
13+
[177] if([193] [193] [186] [186] [181] [181] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [196] [196] 42)
14+
[203] [203] [203] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([203]<core::String>{[211] "length", [227] "is", [239] "42"}){(core::Iterable<core::String>) → void};
15+
} =>[54] [54] #t1;
16+
[259] [259] [259] core::print [264]([265] fooSet);
17+
[290] [290] core::List<core::String> fooList = [300] [300] block {
18+
[300] [300] final core::List<core::String> #t2 = [300] [300] core::List::of [300]<core::String>([309] args);
19+
[319] [319] [319] [300] [300] #t2.{core::List::add}{Invariant}[-1]([319] "hello"){(core::String) → void};
20+
[346] [346] [346] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([346] [335] [335]<core::String, core::String>{[339] [336] [336] "x": [341] [341] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
21+
[356] for ([368] core::String s in [373] [373] args)
22+
[382] [382] [382] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([382]<core::String>[[394] "${[392] [392] s}", [410] "${[405] [405] s}_2"]){(core::Iterable<core::String>) → void};
23+
[423] if([439] [439] [432] [432] [427] [427] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [442] [442] 42)
24+
[449] [449] [449] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([449]<core::String>[[457] "length", [473] "is", [485] "42"]){(core::Iterable<core::String>) → void};
25+
} =>[300] [300] #t2;
26+
[505] [505] [505] core::print [510]([511] fooList);
27+
[544] [544] core::Map<core::String, core::String> fooMap = [553] [553] block {
28+
[553] [553] final core::Map<core::String, core::String> #t3 = [553] [553]<core::String, core::String>{};
29+
[566] [566] [566] [553] [553] #t3.{core::Map::[]=}{Invariant}[-1]([559] "hello", [568] "world"){(core::String, core::String) → void};
30+
[581] for ([593] core::String s in [598] [598] args)
31+
[607] [607] [607] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([607]<core::String, core::String>{[619] [619] [619] "${[617] [617] s}": [629] [629] "${[624] [624] s}_2"}){(core::Map<core::String, core::String>) → void};
32+
[642] if([658] [658] [651] [651] [646] [646] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [661] [661] 42)
33+
[668] [668] [668] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([668]<core::String, core::String>{[684] [676] [676] "length": [686] [686] "42", [702] [698] [698] "is": [704] [704] "42", [720] [716] [716] "42": [722] [722] "!"}){(core::Map<core::String, core::String>) → void};
34+
} =>[553] [553] #t3;
35+
[741] [741] [741] core::print [746]([747] fooMap);
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
import "dart:collection" as col;
5+
6+
[5]static method main([23] core::List<core::String> args) → void {
7+
[45] [45] core::Set<core::String> fooSet = [54] [54] block {
8+
[54] [54] final core::Set<core::String> #t1 = [54] [54] col::LinkedHashSet::of [54]<core::String>([63] args);
9+
[73] [73] [73] [54] [54] #t1.{core::Set::add}{Invariant}[-1]([73] "hello"){(core::String) → core::bool};
10+
[100] [100] [100] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([100] [89] [89]<core::String, core::String>{[93] [90] [90] "x": [95] [95] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
11+
[110] for ([122] core::String s in [127] [127] args)
12+
[136] [136] [136] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([136]<core::String>{[148] "${[146] [146] s}", [164] "${[159] [159] s}_2"}){(core::Iterable<core::String>) → void};
13+
[177] if([193] [193] [186] [186] [181] [181] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [196] [196] 42)
14+
[203] [203] [203] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([203]<core::String>{[211] "length", [227] "is", [239] "42"}){(core::Iterable<core::String>) → void};
15+
} =>[54] [54] #t1;
16+
[259] [259] [259] core::print [264]([265] fooSet);
17+
[290] [290] core::List<core::String> fooList = [300] [300] block {
18+
[300] [300] final core::List<core::String> #t2 = [300] [300] core::List::of [300]<core::String>([309] args);
19+
[319] [319] [319] [300] [300] #t2.{core::List::add}{Invariant}[-1]([319] "hello"){(core::String) → void};
20+
[346] [346] [346] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([346] [335] [335]<core::String, core::String>{[339] [336] [336] "x": [341] [341] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
21+
[356] for ([368] core::String s in [373] [373] args)
22+
[382] [382] [382] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([382]<core::String>[[394] "${[392] [392] s}", [410] "${[405] [405] s}_2"]){(core::Iterable<core::String>) → void};
23+
[423] if([439] [439] [432] [432] [427] [427] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [442] [442] 42)
24+
[449] [449] [449] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([449]<core::String>[[457] "length", [473] "is", [485] "42"]){(core::Iterable<core::String>) → void};
25+
} =>[300] [300] #t2;
26+
[505] [505] [505] core::print [510]([511] fooList);
27+
[544] [544] core::Map<core::String, core::String> fooMap = [553] [553] block {
28+
[553] [553] final core::Map<core::String, core::String> #t3 = [553] [553]<core::String, core::String>{};
29+
[566] [566] [566] [553] [553] #t3.{core::Map::[]=}{Invariant}[-1]([559] "hello", [568] "world"){(core::String, core::String) → void};
30+
[581] for ([593] core::String s in [598] [598] args)
31+
[607] [607] [607] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([607]<core::String, core::String>{[619] [619] [619] "${[617] [617] s}": [629] [629] "${[624] [624] s}_2"}){(core::Map<core::String, core::String>) → void};
32+
[642] if([658] [658] [651] [651] [646] [646] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [661] [661] 42)
33+
[668] [668] [668] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([668]<core::String, core::String>{[684] [676] [676] "length": [686] [686] "42", [702] [698] [698] "is": [704] [704] "42", [720] [716] [716] "42": [722] [722] "!"}){(core::Map<core::String, core::String>) → void};
34+
} =>[553] [553] #t3;
35+
[741] [741] [741] core::print [746]([747] fooMap);
36+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
5+
[5]static method main([23] core::List<core::String> args) → void
6+
[-1] ;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
library;
2+
import self as self;
3+
import "dart:core" as core;
4+
import "dart:collection" as col;
5+
6+
[5]static method main([23] core::List<core::String> args) → void {
7+
[45] [45] core::Set<core::String> fooSet = [54] [54] block {
8+
[54] [54] final core::Set<core::String> #t1 = [54] [54] col::LinkedHashSet::of [54]<core::String>([63] args);
9+
[73] [73] [73] [54] [54] #t1.{core::Set::add}{Invariant}[-1]([73] "hello"){(core::String) → core::bool};
10+
[100] [100] [100] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([100] [89] [89]<core::String, core::String>{[93] [90] [90] "x": [95] [95] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
11+
[110] for ([122] core::String s in [127] [127] args)
12+
[136] [136] [136] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([136]<core::String>{[148] "${[146] [146] s}", [164] "${[159] [159] s}_2"}){(core::Iterable<core::String>) → void};
13+
[177] if([193] [193] [186] [186] [181] [181] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [196] [196] 42)
14+
[203] [203] [203] [54] [54] #t1.{core::Set::addAll}{Invariant}[-1]([203]<core::String>{[211] "length", [227] "is", [239] "42"}){(core::Iterable<core::String>) → void};
15+
} =>[54] [54] #t1;
16+
[259] [259] [259] core::print [264]([265] fooSet);
17+
[290] [290] core::List<core::String> fooList = [300] [300] block {
18+
[300] [300] final core::List<core::String> #t2 = [300] [300] core::List::of [300]<core::String>([309] args);
19+
[319] [319] [319] [300] [300] #t2.{core::List::add}{Invariant}[-1]([319] "hello"){(core::String) → void};
20+
[346] [346] [346] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([346] [335] [335]<core::String, core::String>{[339] [336] [336] "x": [341] [341] "y"}.{core::Map::keys}{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
21+
[356] for ([368] core::String s in [373] [373] args)
22+
[382] [382] [382] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([382]<core::String>[[394] "${[392] [392] s}", [410] "${[405] [405] s}_2"]){(core::Iterable<core::String>) → void};
23+
[423] if([439] [439] [432] [432] [427] [427] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [442] [442] 42)
24+
[449] [449] [449] [300] [300] #t2.{core::List::addAll}{Invariant}[-1]([449]<core::String>[[457] "length", [473] "is", [485] "42"]){(core::Iterable<core::String>) → void};
25+
} =>[300] [300] #t2;
26+
[505] [505] [505] core::print [510]([511] fooList);
27+
[544] [544] core::Map<core::String, core::String> fooMap = [553] [553] block {
28+
[553] [553] final core::Map<core::String, core::String> #t3 = [553] [553]<core::String, core::String>{};
29+
[566] [566] [566] [553] [553] #t3.{core::Map::[]=}{Invariant}[-1]([559] "hello", [568] "world"){(core::String, core::String) → void};
30+
[581] for ([593] core::String s in [598] [598] args)
31+
[607] [607] [607] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([607]<core::String, core::String>{[619] [619] [619] "${[617] [617] s}": [629] [629] "${[624] [624] s}_2"}){(core::Map<core::String, core::String>) → void};
32+
[642] if([658] [658] [651] [651] [646] [646] args.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} [661] [661] 42)
33+
[668] [668] [668] [553] [553] #t3.{core::Map::addAll}{Invariant}[-1]([668]<core::String, core::String>{[684] [676] [676] "length": [686] [686] "42", [702] [698] [698] "is": [704] [704] "42", [720] [716] [716] "42": [722] [722] "!"}){(core::Map<core::String, core::String>) → void};
34+
} =>[553] [553] #t3;
35+
[741] [741] [741] core::print [746]([747] fooMap);
36+
}

0 commit comments

Comments
 (0)