Ejemplo n.º 1
0
    ///

    public static NeuNode?GetBinding(
        this NeuPatternBinding patternBinding)
    {
        var patternReached = false;

        ///

        foreach (var c in patternBinding.Children)
        {
            switch (c)
            {
            case NeuPattern _ when !patternReached:     // only toggle on a single pattern

                patternReached = true;

                break;

            ///

            case NeuTypeAnnotation _:

                break;

            ///

            case NeuNode n when patternReached:

                return(n);

            ///

            default:

                break;
            }
        }

        ///

        return(null);
    }
    ///

    public static NeuOperation Execute(
        this NeuInterpreter interpreter,
        bool inGlobalScope,
        NeuKeyword kindKeyword,
        NeuPatternBinding patternBinding)
    {
        var pattern = patternBinding.GetPattern();

        if (pattern == null)
        {
            throw new Exception();
        }

        ///

        var binding = patternBinding.GetBinding();

        if (binding == null)
        {
            throw new Exception();
        }

        ///

        switch (true)
        {
        case var _
            when
            pattern is NeuIdentifierPattern idPattern &&
            binding is NeuInitClause initClause:

            return(interpreter.Execute(inGlobalScope, kindKeyword, idPattern, initClause));

        ///

        default:

            throw new Exception();
        }
    }
Ejemplo n.º 3
0
    public static bool EndsWithNewline(
        this NeuPatternBinding patternBinding)
    {
        var s = patternBinding.Children.FirstOrDefault()?.Start;

        if (s == null)
        {
            throw new Exception();
        }

        ///

        var e = patternBinding.Children.LastOrDefault()?.End;

        if (e == null)
        {
            throw new Exception();
        }

        ///

        return(e.LineNumber > s.LineNumber);
    }
Ejemplo n.º 4
0
    ///

    public static NeuPattern?GetPattern(
        this NeuPatternBinding patternBinding)
    {
        return(patternBinding.GetFirstOrDefault <NeuPattern>());
    }