00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 package org.antlr.runtime.debug;
00029
00030 import org.antlr.runtime.tree.TreeAdaptor;
00031 import org.antlr.runtime.tree.TreeNodeStream;
00032 import org.antlr.runtime.TokenStream;
00033
00038 public class DebugTreeNodeStream implements TreeNodeStream {
00039 protected DebugEventListener dbg;
00040 protected TreeAdaptor adaptor;
00041 protected TreeNodeStream input;
00042 protected boolean initialStreamState = true;
00043
00045 protected int lastMarker;
00046
00047 public DebugTreeNodeStream(TreeNodeStream input,
00048 DebugEventListener dbg)
00049 {
00050 this.input = input;
00051 this.adaptor = input.getTreeAdaptor();
00052 this.input.setUniqueNavigationNodes(true);
00053 setDebugListener(dbg);
00054 }
00055
00056 public void setDebugListener(DebugEventListener dbg) {
00057 this.dbg = dbg;
00058 }
00059
00060 public TreeAdaptor getTreeAdaptor() {
00061 return adaptor;
00062 }
00063
00064 public void consume() {
00065 Object node = input.LT(1);
00066 input.consume();
00067 dbg.consumeNode(node);
00068 }
00069
00070 public Object get(int i) {
00071 return input.get(i);
00072 }
00073
00074 public Object LT(int i) {
00075 Object node = input.LT(i);
00076 int ID = adaptor.getUniqueID(node);
00077 String text = adaptor.getText(node);
00078 int type = adaptor.getType(node);
00079 dbg.LT(i, node);
00080 return node;
00081 }
00082
00083 public int LA(int i) {
00084 Object node = input.LT(i);
00085 int ID = adaptor.getUniqueID(node);
00086 String text = adaptor.getText(node);
00087 int type = adaptor.getType(node);
00088 dbg.LT(i, node);
00089 return type;
00090 }
00091
00092 public int mark() {
00093 lastMarker = input.mark();
00094 dbg.mark(lastMarker);
00095 return lastMarker;
00096 }
00097
00098 public int index() {
00099 return input.index();
00100 }
00101
00102 public void rewind(int marker) {
00103 dbg.rewind(marker);
00104 input.rewind(marker);
00105 }
00106
00107 public void rewind() {
00108 dbg.rewind();
00109 input.rewind(lastMarker);
00110 }
00111
00112 public void release(int marker) {
00113 }
00114
00115 public void seek(int index) {
00116
00117
00118 input.seek(index);
00119 }
00120
00121 public int size() {
00122 return input.size();
00123 }
00124
00125 public Object getTreeSource() {
00126 return input;
00127 }
00128
00129 public String getSourceName() {
00130 return getTokenStream().getSourceName();
00131 }
00132
00133 public TokenStream getTokenStream() {
00134 return input.getTokenStream();
00135 }
00136
00142 public void setUniqueNavigationNodes(boolean uniqueNavigationNodes) {
00143 input.setUniqueNavigationNodes(uniqueNavigationNodes);
00144 }
00145
00146 public void replaceChildren(Object parent, int startChildIndex, int stopChildIndex, Object t) {
00147 input.replaceChildren(parent, startChildIndex, stopChildIndex, t);
00148 }
00149
00150 public String toString(Object start, Object stop) {
00151 return input.toString(start,stop);
00152 }
00153 }