defaultNamedFormalParameter method

Parser<ParameterNode> defaultNamedFormalParameter()
inherited

Implementation

Parser<ParameterNode> defaultNamedFormalParameter() =>
    seq4(
      ref0(metadataList),
      ref0(requiredToken).optional(),
      ref0(normalFormalParameter),
      ([ref1(token, '='), ref1(token, ':')].toChoiceParser() &
              ref0(expression))
          .map((l) => l[1] as ExpressionNode)
          .optional(),
    ).map4((meta, req, param, defaultVal) {
      final allMeta = [...meta, ...param.metadata];
      if (param is SimpleParameterNode) {
        return SimpleParameterNode(
          name: param.name,
          type: param.type,
          defaultValue: defaultVal ?? param.defaultValue,
          metadata: allMeta,
          isNamed: true,
          isRequired: req != null,
          isFinal: param.isFinal,
          isVar: param.isVar,
          isThis: param.isThis,
          isSuper: param.isSuper,
        );
      }
      if (param is FunctionTypedParameterNode) {
        return FunctionTypedParameterNode(
          name: param.name,
          type: param.type,
          parameters: param.parameters,
          defaultValue: defaultVal ?? param.defaultValue,
          metadata: allMeta,
          isNamed: true,
          isRequired: req != null,
        );
      }
      return param;
    });