Skip to content

Commit 369de96

Browse files
committed
Support unnamed stringifier operations
Change-Id: I1d9e2debebe1a8dc253b4ff452352aa79927f391
1 parent 92141b0 commit 369de96

File tree

6 files changed

+43
-11
lines changed

6 files changed

+43
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# IDLeDOM x.x.x (not yet released)
22
* Add interfaces for HTML IDL, in particular the HTML*Element classes.
3-
* Support "unnamed" getter/setters/deleters.
3+
* Support "unnamed" getter/setters/deleters/stringifiers.
44

55
# IDLeDOM 0.3.0 (2021-04-12)
66
* Use interface (instead of class) for enumerations. This allows

WebIDL.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,10 @@ reserved. (These are used to implement [`IteratorAggregate`] and
8383
[`Countable`].)
8484

8585
If the WebIDL defines an "unnamed" indexed getter, named getter,
86-
indexed setter, named setter, indexed deleter or named deleter,
87-
the names `item`, `namedItem`, `setItem`, `setNamedItem`, `removeItem`,
88-
or `removeNamedItem` (respectively) are reserved.
86+
indexed setter, named setter, indexed deleter, named deleter, or
87+
stringifier operation, then the names `item`, `namedItem`, `setItem`,
88+
`setNamedItem`, `removeItem`, `removeNamedItem`, or `toString`
89+
(respectively) are reserved.
8990

9091
### Resolution order
9192

src/Helper/Range.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,13 @@ public function __isset( string $name ) : bool {
6565
return false;
6666
}
6767

68+
/**
69+
* @return string
70+
*/
71+
public function __toString() : string {
72+
'@phan-var \Wikimedia\IDLeDOM\Range $this';
73+
// @var \Wikimedia\IDLeDOM\Range $this
74+
return $this->toString();
75+
}
76+
6877
}

src/Range.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,9 @@ public function comparePoint( /* Node */ $node, int $offset ) : int;
157157
*/
158158
public function intersectsNode( /* Node */ $node ) : bool;
159159

160+
/**
161+
* @return string
162+
*/
163+
public function toString() : string;
164+
160165
}

src/Stub/Range.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,11 @@ public function intersectsNode( /* Node */ $node ) : bool {
190190
throw self::_unimplemented();
191191
}
192192

193+
/**
194+
* @return string
195+
*/
196+
public function toString() : string {
197+
throw self::_unimplemented();
198+
}
199+
193200
}

tools/Generator.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -260,22 +260,32 @@ private function resolveNames( array &$def, array &$done ): array {
260260
( $m['name'] ?? '' ) === '' &&
261261
( $m['special'] ?? '' ) !== '' ) {
262262
if ( $m['special'] === 'stringifier' ) {
263-
// XXX unnamed stringifier
264-
continue;
265-
}
266-
if ( count( $m['arguments'] ?? [] ) === 0 ) {
263+
// unnamed stringifier operation
264+
$which = "stringifier";
265+
$m['idlType'] = [
266+
'idlType' => 'DOMString',
267+
'type' => null,
268+
'extAttrs' => [],
269+
'generic' => '',
270+
'nullable' => false,
271+
'union' => false,
272+
];
273+
} elseif ( count( $m['arguments'] ?? [] ) === 0 ) {
267274
continue;
275+
} else {
276+
$firstArgType = $m['arguments'][0]['idlType']['idlType'];
277+
$which = ( (
278+
$firstArgType === "unsigned long"
279+
) ? "indexed " : "named " ) . ( $m['special'] ?? '' );
268280
}
269-
$which = ( (
270-
$m['arguments'][0]['idlType']['idlType'] === "unsigned long"
271-
) ? "indexed " : "named " ) . ( $m['special'] ?? '' );
272281
$names = [
273282
"indexed getter" => "item",
274283
"named getter" => "namedItem",
275284
"indexed setter" => "setItem",
276285
"named setter" => "setNamedItem",
277286
"indexed deleter" => "removeItem",
278287
"named deleter" => "removeNamedItem",
288+
"stringifier" => "toString",
279289
];
280290
$m['name'] = $names[$which] ?? '';
281291
}

0 commit comments

Comments
 (0)