extensionTypeDeclaration method
Implementation
Parser<ExtensionTypeDeclarationNode> extensionTypeDeclaration() =>
seq8(
seq3(
ref0(extensionToken),
ref0(typeToken),
ref0(constToken).optional(),
),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
(ref1(token, '.') &
[
ref0(identifier),
ref0(newToken).map((t) => t.value),
].toChoiceParser())
.map((l) => l[1] as String)
.optional(),
seq4(
ref1(token, '('),
ref0(metadataList),
seq2(ref0(type), ref0(identifier)),
ref1(token, ')'),
).map4((_, _, rep, _) => rep),
(ref0(implementsToken) & ref0(typeList))
.map((l) => l[1] as List<TypeNode>)
.optionalWith(const <TypeNode>[]),
[
seq3(
ref1(token, '{'),
ref0(classMemberDefinition).star(),
ref1(token, '}'),
).map3((_, members, _) => members),
ref1(token, ';').map((_) => const <DeclarationNode>[]),
].toChoiceParser(),
epsilon(),
).map8(
(header, name, typeParams, ctorName, rep, interfaces, members, _) =>
ExtensionTypeDeclarationNode(
name: name,
constructorName: ctorName,
isConst: header.$3 != null,
typeParameters: typeParams,
representationType: rep.$1,
representationName: rep.$2,
interfaces: interfaces,
members: members,
),
);