private static GraceObject objectFromElement(XElement root) { GraceObject obj = GraceObject.Done; var stringEl = root.XPathSelectElement("//string"); if (stringEl != null) { obj = GraceString.Create(stringEl.Value); } var numberEl = root.XPathSelectElement("//number"); if (numberEl != null) { double d; if (double.TryParse(numberEl.Value, out d)) { obj = GraceNumber.Create(d); } } var objectEl = root.XPathSelectElement("//object"); if (objectEl != null) { int objKey; if (int.TryParse(objectEl.Value, out objKey)) { obj = new GraceForeignObject(objKey); } } return(obj); }
/// <summary> /// Load extensions to builtins from traits in an /// existing object. /// </summary> /// <param name="ext">Object containing extension traits.</param> public void LoadExtensionsFromObject(GraceObject ext) { var req = MethodRequest.Nullary("ObjectExtension"); req.IsInherits = true; if (ext.RespondsTo(req)) { var uo = new UserObject(); req.InheritingObject = uo; ext.Request(this, req); GraceObject.ExtendDefaultMethods(req.InheritedMethods); } req = MethodRequest.Nullary("NumberExtension"); req.IsInherits = true; if (ext.RespondsTo(req)) { var uo = new UserObject(); req.InheritingObject = uo; ext.Request(this, req); GraceNumber.ExtendWith(req.InheritedMethods); } req = MethodRequest.Nullary("StringExtension"); req.IsInherits = true; if (ext.RespondsTo(req)) { var uo = new UserObject(); req.InheritingObject = uo; ext.Request(this, req); GraceString.ExtendWith(req.InheritedMethods); } }
private GraceObject mSize() { return(GraceNumber.Create(data.Length)); }