private void WriteTokenAttributes(Cci.Node node) { Contract.Requires(node != null); Contract.Requires(wr != null && cce.IsPeerConsistent(wr)); //modifies this.0, wr.*; Contract.Assert(wr != null); if (node.SourceContext.Document != null) { wr.WriteAttributeString("file", node.SourceContext.Document.Name); wr.WriteAttributeString("line", node.SourceContext.StartLine.ToString()); wr.WriteAttributeString("column", node.SourceContext.StartColumn.ToString()); } }
public void WriteError(string message, Cci.Node offendingNode, List <Block> trace) { Contract.Requires(offendingNode != null); Contract.Requires(message != null); Contract.Requires(IsOpen && cce.Owner.Different(this, offendingNode)); Contract.Requires(trace == null || cce.Owner.Different(this, trace)); //modifies this.*, offendingNode.*, trace.*; Contract.Ensures(IsOpen); Contract.Assert(wr != null); cce.BeginExpose(this); { wr.WriteStartElement("error"); wr.WriteAttributeString("message", message); WriteTokenAttributes(offendingNode); if (trace != null) { wr.WriteStartElement("trace"); { foreach (object bo in trace) { cce.LoopInvariant(wr != null); Contract.Assume(bo is Block); Block b = (Block)bo; wr.WriteStartElement("traceNode"); { this.WriteTokenAttributes(b.tok); wr.WriteAttributeString("label", b.Label); } wr.WriteEndElement(); } wr.WriteEndElement(); } } wr.WriteEndElement(); } cce.EndExpose(); }