Exemple #1
0
 private static String GetLeafNodeValue(Semantics.Node n, ISemanticsNodeMaker nm, String ErrorCause)
 {
     if (!n.OnLeaf)
     {
         throw new Syntax.InvalidEvaluationException(ErrorCause, nm.GetFileRange(n), n);
     }
     return(n.Leaf);
 }
Exemple #2
0
        private static TypeRef ParseTypeRef(TFSemantics.Node TypeNode, ISemanticsNodeMaker nm, Dictionary <Object, TextRange> Positions)
        {
            var ts = ParseTypeSpec(TypeNode, nm, Positions);

            if (!ts.OnTypeRef)
            {
                throw new InvalidEvaluationException("ExpectedTypeRef", nm.GetFileRange(ts), ts);
            }
            return(ts.TypeRef);
        }
Exemple #3
0
        private static TypeSpec ParseTypeSpec(TFSemantics.Node TypeNode, ISemanticsNodeMaker nm, Dictionary <Object, TextRange> Positions)
        {
            var TypeSpecString = GetLeafNodeValue(TypeNode, nm, "InvalidTypeSpec");
            var InnerPositions = new Dictionary <Object, TextRange>();
            var ts             = OS.TypeParser.ParseTypeSpec
                                 (
                TypeSpecString,
                (o, Start, End) =>
            {
                var oRange = nm.GetRange(TypeNode);
                if (oRange.OnSome)
                {
                    var Range     = oRange.Value;
                    var TypeRange = new TextRange {
                        Start = nm.Text.Calc(Range.Start, Start), End = nm.Text.Calc(Range.Start, End)
                    };
                    InnerPositions.Add(o, TypeRange);
                }
            },
                Index =>
            {
                var FileRange = TreeFormat.Optional <FileTextRange> .Empty;
                var oRange    = nm.GetRange(TypeNode);
                if (oRange.OnSome)
                {
                    var Range = oRange.Value;
                    FileRange = new FileTextRange {
                        Text = nm.Text, Range = new TextRange {
                            Start = nm.Text.Calc(Range.Start, Index), End = nm.Text.Calc(Range.Start, Index + 1)
                        }
                    };
                }
                return(new InvalidTokenException("InvalidChar", FileRange, TypeSpecString.Substring(Index, 1)));
            }
                                 );

            return(TranslateTypeSpec(ts, nm.Text, InnerPositions, Positions));
        }