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{ 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver using System.Collections.Generic; 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary> 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Broadcast debug events to multiple listeners. Lets you debug and still 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * use the event mechanism to build parse trees etc... Not thread-safe. 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Don't add events in one thread while parser fires events in another. 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </summary> 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * <seealso cref="DebugEventRepeater"/> 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public class DebugEventHub : IDebugEventListener 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver List<IDebugEventListener> _listeners = new List<IDebugEventListener>(); 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public DebugEventHub( params IDebugEventListener[] listeners ) 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _listeners = new List<IDebugEventListener>( listeners ); 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Initialize() 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** <summary> 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Add another listener to broadcast events too. Not thread-safe. 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Don't add events in one thread while parser fires events in another. 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </summary> 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void AddListener( IDebugEventListener listener ) 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver _listeners.Add( listener ); 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /* To avoid a mess like this: 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void enterRule(final String ruleName) { 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver broadcast(new Code(){ 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public void exec(DebugEventListener listener) {listener.enterRule(ruleName);}} 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver I am dup'ing the for-loop in each. Where are Java closures!? blech! 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterRule( string grammarFileName, string ruleName ) 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterRule( grammarFileName, ruleName ); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitRule( string grammarFileName, string ruleName ) 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitRule( grammarFileName, ruleName ); 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterAlt( int alt ) 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterAlt( alt ); 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterSubRule( int decisionNumber ) 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterSubRule( decisionNumber ); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitSubRule( int decisionNumber ) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitSubRule( decisionNumber ); 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EnterDecision(int decisionNumber, bool couldBacktrack) 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EnterDecision( decisionNumber, couldBacktrack ); 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ExitDecision( int decisionNumber ) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ExitDecision( decisionNumber ); 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Location( int line, int pos ) 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Location( line, pos ); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeToken( IToken token ) 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeToken( token ); 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeHiddenToken( IToken token ) 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeHiddenToken( token ); 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void LT( int index, IToken t ) 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT( index, t ); 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Mark( int index ) 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Mark( index ); 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Rewind( int index ) 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind( index ); 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Rewind() 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Rewind(); 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BeginBacktrack( int level ) 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginBacktrack( level ); 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EndBacktrack( int level, bool successful ) 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndBacktrack( level, successful ); 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void RecognitionException( RecognitionException e ) 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.RecognitionException( e ); 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BeginResync() 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BeginResync(); 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void EndResync() 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.EndResync(); 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void SemanticPredicate( bool result, string predicate ) 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SemanticPredicate( result, predicate ); 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Commence() 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Commence(); 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void Terminate() 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.Terminate(); 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region Tree parsing stuff 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ConsumeNode( object t ) 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ConsumeNode( t ); 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void LT( int index, object t ) 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.LT( index, t ); 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #region AST Stuff 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void NilNode( object t ) 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.NilNode( t ); 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void ErrorNode( object t ) 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.ErrorNode( t ); 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void CreateNode( object t ) 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode( t ); 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void CreateNode( object node, IToken token ) 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.CreateNode( node, token ); 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void BecomeRoot( object newRoot, object oldRoot ) 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.BecomeRoot( newRoot, oldRoot ); 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void AddChild( object root, object child ) 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.AddChild( root, child ); 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver public virtual void SetTokenBoundaries( object t, int tokenStartIndex, int tokenStopIndex ) 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver for ( int i = 0; i < _listeners.Count; i++ ) 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver IDebugEventListener listener = _listeners[i]; 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver listener.SetTokenBoundaries( t, tokenStartIndex, tokenStopIndex ); 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver #endregion 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 367