Example #1
0
        public void Visit(Dot t, IEnvironment env, object value)
        {
            string member = t.Name;

            if (value is ClassInfo)
            {
                if (member == "new")
                {
                    ClassInfo ci = value as ClassInfo;
                    NestedEnv e  = new NestedEnv(ci.Environment);
                    RavObject ro = new RavObject(e);
                    e.PutNew("this", ro);
                    InitObject(ci, e);
                    result = ro;
                    return;
                }
            }
            else if (value is RavObject)
            {
                try {
                    result = (value as RavObject).Read(member);
                    return;
                }
                catch (RavObject.AccessException) { }
            }
            result = new ErrorValue("bad member access in Dot: " + member, t);
        }
Example #2
0
        private object SetField(BinaryExpr t, RavObject obj, Dot expr, object rvalue)
        {
            string name = expr.Name;

            try {
                obj.Write(name, rvalue);
                return(rvalue);
            }
            catch (Exception) {
                return(new ErrorValue("bad member access " + t.Location() + " in Assgin: " + name));
            }
        }