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); }
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)); } }