示例#1
0
        public override bool EvalStep(out object answer, ref Control expression, ref Environment environment)
        {
#if DEBUG
            Warm("POrIsSymbolS");
#endif
            object ev0;
            if (environment.StaticValue(out ev0, this.rand0Name, this.rand0Offset))
            {
                throw new NotImplementedException();
            }

            Symbol ev0sym = ev0 as Symbol;
            if (ev0sym != null && ev0sym.IsInterned())
            {
                answer = Constant.sharpT;
                return(false);
            }
            else
            {
#if DEBUG
                NoteCalls(this.alternative);
                alternativeTypeHistogram.Note(this.alternativeType);
#endif
                answer     = null;
                expression = this.alternative;
                return(true);
            }
        }
示例#2
0
        public override bool EvalStep(out object answer, ref Control expression, ref Environment environment)
        {
#if DEBUG
            Warm("POrIsSymbol");
            NoteCalls(this.arg0);
            arg0TypeHistogram.Note(this.arg0Type);
#endif
            Control     unev0 = this.arg0;
            Environment env   = environment;
            object      ev0;
            while (unev0.EvalStep(out ev0, ref unev0, ref env))
            {
            }
            ;
            if (ev0 == Interpreter.UnwindStack)
            {
                throw new NotImplementedException();
                //((UnwinderState) env).AddFrame (new PrimitiveCombination1Frame0 (this, closureEnvironment));
                //answer = Interpreter.Unwind;
                //closureEnvironment = env;
                //return false;
            }

            Symbol ev0sym = ev0 as Symbol;
            if (ev0sym != null && ev0sym.IsInterned())
            {
                answer = Constant.sharpT;
                return(false);
            }
            else
            {
#if DEBUG
                NoteCalls(this.alternative);
                alternativeTypeHistogram.Note(this.alternativeType);
#endif
                answer     = null;
                expression = this.alternative;
                return(true);
            }
        }
示例#3
0
        public override bool EvalStep(out object answer, ref Control expression, ref Environment environment)
        {
#if DEBUG
            Warm("POrIsSymbolA0");
#endif
            Symbol ev0sym = environment.Argument0Value as Symbol;
            if (ev0sym != null && ev0sym.IsInterned())
            {
                answer = Constant.sharpT;
                return(false);
            }
            else
            {
#if DEBUG
                NoteCalls(this.alternative);
                alternativeTypeHistogram.Note(this.alternativeType);
#endif
                answer     = null;
                expression = this.alternative;
                return(true);
            }
        }
示例#4
0
        public static bool IsSameType(out object answer, object arg0, object arg1)
        {
            if (arg0 == null)
            {
                answer = (arg1 == null) ? Constant.sharpT : Constant.sharpF;
            }
            else if (arg1 == null)
            {
                answer = Constant.sharpF;
            }
            else if (arg0 is bool)
            {
                answer = (arg1 is bool) ? Constant.sharpT : Constant.sharpF;
            }
            else if (arg0 is char)
            {
                answer = (arg1 is char) ? Constant.sharpT : Constant.sharpF;
            }
            else if (arg0 is int)
            {
                answer = (arg1 is int) ? Constant.sharpT : Constant.sharpF;
            }
            else if (arg0 is char [])
            {
                answer = (arg1 is char []) ? Constant.sharpT : Constant.sharpF;
            }
            else
            {
                SchemeObject l = arg0 as SchemeObject;
                if (l == null)
                {
                    throw new NotImplementedException();
                }
                SchemeObject r = arg1 as SchemeObject;
                if (r == null)
                {
                    answer = Constant.sharpF;
                }
                else
                {
                    Symbol ls = l as Symbol;

                    if (ls == null)
                    {
                        if (r is Symbol)
                        {
                            answer = Constant.sharpF;
                        }
                        else
                        {
                            answer = (l.TypeCode == r.TypeCode) ? Constant.sharpT : Constant.sharpF;
                        }
                    }
                    else
                    {
                        Symbol rs = r as Symbol;
                        if (rs == null)
                        {
                            answer = Constant.sharpF;
                        }
                        else if (ls.IsInterned())
                        {
                            answer = rs.IsInterned() ? Constant.sharpT : Constant.sharpF;
                        }
                        else
                        {
                            answer = rs.IsInterned() ? Constant.sharpF : Constant.sharpT;
                        }
                    }
                }
            }
            return(false);
        }