+ [Conditional ("FULL_AST")]
+ public void AddStatement (object element, params Location[] locations)
+ {
+ if (locations.Length == 0)
+ throw new ArgumentException ("Statement is missing semicolon location");
+
+ simple_locs.Add (element, locations);
+ }
+
+ [Conditional ("FULL_AST")]
+ public void AddMember (MemberCore member, IList<Tuple<Modifiers, Location>> modLocations, params Location[] locations)
+ {
+ member_locs.Add (member, new MemberLocations (modLocations, locations));
+ }
+
+ [Conditional ("FULL_AST")]
+ public void AppendTo (object existing, params Location[] locations)
+ {
+ Location[] locs;
+ if (simple_locs.TryGetValue (existing, out locs)) {
+ simple_locs [existing] = locs.Concat (locations).ToArray ();
+ return;
+ }
+ }
+
+ [Conditional ("FULL_AST")]
+ public void AppendToMember (MemberCore existing, params Location[] locations)
+ {
+ MemberLocations member;
+ if (member_locs.TryGetValue (existing, out member)) {
+ member.AddLocations (locations);
+ return;
+ }
+ }
+
+ public Location[] GetLocations (object element)
+ {
+ Location[] found;
+ simple_locs.TryGetValue (element, out found);
+ return found;
+ }
+
+ public MemberLocations GetMemberLocation (MemberCore element)