コード例 #1
0
ファイル: ElaListLiteral.cs プロジェクト: ngoffee/ela
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
            {
                return(false);
            }

            if (pat.Type == ElaNodeType.ListLiteral)
            {
                var xs = (ElaListLiteral)pat;

                if (xs.Values.Count != Values.Count)
                {
                    return(true);
                }

                for (var i = 0; i < Values.Count; i++)
                {
                    if (Values[i].CanFollow(xs.Values[i]))
                    {
                        return(true);
                    }
                }

                return(false);
            }

            return(true);
        }
コード例 #2
0
ファイル: ElaRecordLiteral.cs プロジェクト: ngoffee/ela
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
            {
                return(false);
            }

            if (pat.Type == ElaNodeType.RecordLiteral)
            {
                var rec = (ElaRecordLiteral)pat;

                if (rec.Fields.Count != Fields.Count)
                {
                    return(true);
                }

                for (var i = 0; i < rec.Fields.Count; i++)
                {
                    if (Fields[i].CanFollow(rec.Fields[i]))
                    {
                        return(true);
                    }
                }

                return(false);
            }

            return(true);
        }
コード例 #3
0
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
            {
                return(false);
            }

            if (exp.Type == ElaNodeType.Juxtaposition)
            {
                var jx = (ElaJuxtaposition)exp;

                if (jx.Parameters.Count != Parameters.Count || jx.Target.GetName() != Target.GetName())
                {
                    return(true);
                }

                for (var i = 0; i < Parameters.Count; i++)
                {
                    if (Parameters[i].CanFollow(jx.Parameters[i]))
                    {
                        return(true);
                    }
                }

                return(false);
            }

            return(true);
        }
コード例 #4
0
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
            {
                return(false);
            }

            if (pat.Type == ElaNodeType.TupleLiteral)
            {
                var tuple = (ElaTupleLiteral)pat;

                if (tuple.Parameters.Count != Parameters.Count)
                {
                    return(true);
                }

                for (var i = 0; i < Parameters.Count; i++)
                {
                    if (Parameters[i].CanFollow(tuple.Parameters[i]))
                    {
                        return(true);
                    }
                }

                return(false);
            }

            return(true);
        }
コード例 #5
0
ファイル: ElaNameReference.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
                return false;

            if (exp.Type == ElaNodeType.NameReference)
                return Name != exp.GetName();

            return true;
        }
コード例 #6
0
ファイル: ElaPrimitive.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
                return false;

            if (exp.Type == ElaNodeType.Primitive)
            {
                var lit = (ElaPrimitive)exp;
                return !Value.Equals(lit.Value);
            }

            return true;
        }
コード例 #7
0
ファイル: ElaNameReference.cs プロジェクト: ngoffee/ela
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
            {
                return(false);
            }

            if (exp.Type == ElaNodeType.NameReference)
            {
                return(Name != exp.GetName());
            }

            return(true);
        }
コード例 #8
0
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
            {
                return(false);
            }

            if (exp.Type == ElaNodeType.Primitive)
            {
                var lit = (ElaPrimitive)exp;
                return(!Value.Equals(lit.Value));
            }

            return(true);
        }
コード例 #9
0
ファイル: ElaJuxtaposition.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression exp)
        {
            if (exp.IsIrrefutable())
                return false;

            if (exp.Type == ElaNodeType.Juxtaposition)
            {
                var jx = (ElaJuxtaposition)exp;

                if (jx.Parameters.Count != Parameters.Count || jx.Target.GetName() != Target.GetName())
                    return true;

                for (var i = 0; i < Parameters.Count; i++)
                    if (Parameters[i].CanFollow(jx.Parameters[i]))
                        return true;

                return false;
            }

            return true;
        }
コード例 #10
0
ファイル: ElaRecordLiteral.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
                return false;

            if (pat.Type == ElaNodeType.RecordLiteral)
            {
                var rec = (ElaRecordLiteral)pat;

                if (rec.Fields.Count != Fields.Count)
                    return true;

                for (var i = 0; i < rec.Fields.Count; i++)
                    if (Fields[i].CanFollow(rec.Fields[i]))
                        return true;

                return false;
            }

            return true;
        }
コード例 #11
0
ファイル: ElaTupleLiteral.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
                return false;

            if (pat.Type == ElaNodeType.TupleLiteral)
            {
                var tuple = (ElaTupleLiteral)pat;

                if (tuple.Parameters.Count != Parameters.Count)
                    return true;

                for (var i = 0; i < Parameters.Count; i++)
                    if (Parameters[i].CanFollow(tuple.Parameters[i]))
                        return true;

                return false;
            }

            return true;
        }
コード例 #12
0
ファイル: ElaListLiteral.cs プロジェクト: rizwan3d/elalang
        internal override bool CanFollow(ElaExpression pat)
        {
            if (pat.IsIrrefutable())
                return false;

            if (pat.Type == ElaNodeType.ListLiteral)
            {
                var xs = (ElaListLiteral)pat;

                if (xs.Values.Count != Values.Count)
                    return true;

                for (var i = 0; i < Values.Count; i++)
                    if (Values[i].CanFollow(xs.Values[i]))
                        return true;

                return false;
            }

            return true;
        }
コード例 #13
0
ファイル: ElaExpression.cs プロジェクト: ngoffee/ela
 internal virtual bool CanFollow(ElaExpression exp)
 {
     return(!exp.IsIrrefutable());
 }
コード例 #14
0
ファイル: ElaExpression.cs プロジェクト: rizwan3d/elalang
 internal virtual bool CanFollow(ElaExpression exp)
 {
     return !exp.IsIrrefutable();
 }