extensionTypeDeclaration method

Parser<ExtensionTypeDeclarationNode> extensionTypeDeclaration()
inherited

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,
          ),
    );