1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD licence"] 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2005-2008 Terence Parr 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Conversion to C#: 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc. 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved. 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Redistribution and use in source and binary forms, with or without 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * modification, are permitted provided that the following conditions 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * are met: 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. Redistributions of source code must retain the above copyright 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer. 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. Redistributions in binary form must reproduce the above copyright 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * notice, this list of conditions and the following disclaimer in the 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * documentation and/or other materials provided with the distribution. 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. The name of the author may not be used to endorse or promote products 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * derived from this software without specific prior written permission. 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Debug { 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using System.Collections.Generic; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary> 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Broadcast debug events to multiple listeners. Lets you debug and still 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * use the event mechanism to build parse trees etc... Not thread-safe. 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Don't add events in one thread while parser fires events in another. 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </summary> 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * <seealso cref="DebugEventRepeater"/> 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class DebugEventHub : IDebugEventListener { 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver List<IDebugEventListener> _listeners = new List<IDebugEventListener>(); 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public DebugEventHub(params IDebugEventListener[] listeners) { 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _listeners = new List<IDebugEventListener>(listeners); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Initialize() { 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary> 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Add another listener to broadcast events too. Not thread-safe. 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Don't add events in one thread while parser fires events in another. 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </summary> 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void AddListener(IDebugEventListener listener) { 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _listeners.Add(listener); 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /* To avoid a mess like this: 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void enterRule(final String ruleName) { 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver broadcast(new Code(){ 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void exec(DebugEventListener listener) {listener.enterRule(ruleName);}} 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ); 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver I am dup'ing the for-loop in each. Where are Java closures!? blech! 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterRule(string grammarFileName, string ruleName) { 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterRule(grammarFileName, ruleName); 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitRule(string grammarFileName, string ruleName) { 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitRule(grammarFileName, ruleName); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterAlt(int alt) { 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterAlt(alt); 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterSubRule(int decisionNumber) { 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterSubRule(decisionNumber); 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitSubRule(int decisionNumber) { 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitSubRule(decisionNumber); 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterDecision(int decisionNumber, bool couldBacktrack) { 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterDecision(decisionNumber, couldBacktrack); 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitDecision(int decisionNumber) { 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitDecision(decisionNumber); 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Location(int line, int pos) { 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Location(line, pos); 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeToken(IToken token) { 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeToken(token); 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeHiddenToken(IToken token) { 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeHiddenToken(token); 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void LT(int index, IToken t) { 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT(index, t); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Mark(int index) { 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Mark(index); 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Rewind(int index) { 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind(index); 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Rewind() { 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind(); 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BeginBacktrack(int level) { 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginBacktrack(level); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EndBacktrack(int level, bool successful) { 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndBacktrack(level, successful); 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void RecognitionException(RecognitionException e) { 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.RecognitionException(e); 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BeginResync() { 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginResync(); 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EndResync() { 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndResync(); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void SemanticPredicate(bool result, string predicate) { 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SemanticPredicate(result, predicate); 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Commence() { 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Commence(); 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Terminate() { 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Terminate(); 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region Tree parsing stuff 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeNode(object t) { 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeNode(t); 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void LT(int index, object t) { 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT(index, t); 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region AST Stuff 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void NilNode(object t) { 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.NilNode(t); 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ErrorNode(object t) { 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ErrorNode(t); 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void CreateNode(object t) { 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode(t); 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void CreateNode(object node, IToken token) { 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode(node, token); 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BecomeRoot(object newRoot, object oldRoot) { 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BecomeRoot(newRoot, oldRoot); 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void AddChild(object root, object child) { 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.AddChild(root, child); 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void SetTokenBoundaries(object t, int tokenStartIndex, int tokenStopIndex) { 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for (int i = 0; i < _listeners.Count; i++) { 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SetTokenBoundaries(t, tokenStartIndex, tokenStopIndex); 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 300