Esempio n. 1
0
 void ValueBindingPattern(out PatternConstruct pattern)
 {
     VariableInitializer init; var modifier = ExpressoModifiers.None;
     if (la.kind == 27) {
     Get();
     modifier = ExpressoModifiers.Immutable;
     } else if (la.kind == 28) {
     Get();
     } else SynErr(132);
     var inits = new List<VariableInitializer>();
     PatternVarDef(out init);
     inits.Add(init);
     while (la.kind == 12) {
     Get();
     PatternVarDef(out init);
     inits.Add(init);
     }
     pattern = PatternConstruct.MakeValueBindingPattern(inits, modifier);
 }
Esempio n. 2
0
 void WildcardPattern(out PatternConstruct pattern)
 {
     Expect(77);
     pattern = PatternConstruct.MakeWildcardPattern();
 }
Esempio n. 3
0
 void PatternItem(out PatternConstruct pattern)
 {
     pattern = PatternConstruct.Null;
     if (StartOf(15)) {
     ExpressionPattern(out pattern);
     } else if (la.kind == 14) {
     IdentifierPattern(out pattern);
     } else SynErr(137);
 }
Esempio n. 4
0
 void TuplePattern(out PatternConstruct pattern)
 {
     var inners = new List<PatternConstruct>();
     Expect(8);
     while (StartOf(18)) {
     if (StartOf(16)) {
         LhsPattern(out pattern);
     } else {
         ExpressionPattern(out pattern);
     }
     inners.Add(pattern);
     Expect(12);
     }
     Expect(10);
     pattern = PatternConstruct.MakeTuplePattern(inners);
 }
Esempio n. 5
0
 void Pattern(out PatternConstruct pattern)
 {
     pattern = null;
     if (la.kind == 77) {
     WildcardPattern(out pattern);
     } else if (la.kind == 8) {
     TuplePattern(out pattern);
     } else if (IsDestructuringPattern()) {
     DestructuringPattern(out pattern);
     } else if (StartOf(15)) {
     ExpressionPattern(out pattern);
     } else SynErr(135);
 }
Esempio n. 6
0
 void LhsPattern(out PatternConstruct pattern)
 {
     pattern = PatternConstruct.Null;
     if (la.kind == 77) {
     WildcardPattern(out pattern);
     } else if (la.kind == 27 || la.kind == 28) {
     ValueBindingPattern(out pattern);
     } else if (IsIdentifierPattern()) {
     IdentifierPattern(out pattern);
     } else if (la.kind == 8) {
     TuplePattern(out pattern);
     } else if (la.kind == 9 || la.kind == 14) {
     DestructuringPattern(out pattern);
     } else SynErr(133);
 }
Esempio n. 7
0
        void IdentifierPattern(out PatternConstruct pattern)
        {
            PatternConstruct inner = null; string name; AstType type = new PlaceholderType(TextLocation.Empty);
            Expect(14);
            name = t.val;
            var ident = AstNode.MakeIdentifier(name, type, CurrentLocation);
            Symbols.AddSymbol(name, ident);

            if (la.kind == 78) {
            Get();
            LhsPattern(out inner);
            }
            pattern = PatternConstruct.MakeIdentifierPattern(ident, inner);
        }
Esempio n. 8
0
 void ExpressionPattern(out PatternConstruct pattern)
 {
     Expression expr;
     PatternOrTest(out expr);
     pattern = PatternConstruct.MakeExpressionPattern(expr);
 }
Esempio n. 9
0
        void DestructuringPattern(out PatternConstruct pattern)
        {
            pattern = PatternConstruct.Null; AstType type_path;
            var patterns = new List<PatternConstruct>(); bool is_vector = false;

            if (la.kind == 14) {
            TypePathExpression(out type_path);
            Expect(7);
            if (StartOf(15)) {
                PatternItem(out pattern);
                patterns.Add(pattern);
            }
            while (la.kind == 12) {
                Get();
                PatternItem(out pattern);
                patterns.Add(pattern);
            }
            Expect(11);
            pattern = PatternConstruct.MakeDestructuringPattern(type_path, patterns);
            } else if (la.kind == 9) {
            Get();
            if (StartOf(15)) {
                PatternItem(out pattern);
                patterns.Add(pattern);
            }
            while (NotFinalComma()) {
                ExpectWeak(12, 19);
                PatternItem(out pattern);
                patterns.Add(pattern);
            }
            if (la.kind == 12) {
                Get();
                Expect(2);
                is_vector = true;
            }
            Expect(3);
            pattern = PatternConstruct.MakeCollectionPattern(patterns, is_vector);
            } else SynErr(136);
        }