570 } 571 } 572 assert false : label + " was expected in lexical context " + LexicalContext.this + " but wasn't"; 573 return false; 574 } 575 576 @Override 577 public String toString() { 578 final StringBuffer sb = new StringBuffer(); 579 sb.append("[ "); 580 for (int i = 0; i < sp; i++) { 581 final Object node = stack[i]; 582 sb.append(node.getClass().getSimpleName()); 583 sb.append('@'); 584 sb.append(Debug.id(node)); 585 sb.append(':'); 586 if (node instanceof FunctionNode) { 587 final FunctionNode fn = (FunctionNode)node; 588 final Source source = fn.getSource(); 589 String src = source.toString(); 590 if (src.indexOf(File.pathSeparator) != -1) { 591 src = src.substring(src.lastIndexOf(File.pathSeparator)); 592 } 593 src += ' '; 594 src += source.getLine(fn.getStart()); 595 sb.append(src); 596 } 597 sb.append(' '); 598 } 599 sb.append(" ==> ]"); 600 return sb.toString(); 601 } 602 603 private class NodeIterator <T extends LexicalContextNode> implements Iterator<T> { 604 private int index; 605 private T next; 606 private final Class<T> clazz; 607 private LexicalContextNode until; 608 609 NodeIterator(final Class<T> clazz) { 610 this(clazz, null); 611 } 612 613 NodeIterator(final Class<T> clazz, final LexicalContextNode until) { 614 this.index = sp - 1; | 570 } 571 } 572 assert false : label + " was expected in lexical context " + LexicalContext.this + " but wasn't"; 573 return false; 574 } 575 576 @Override 577 public String toString() { 578 final StringBuffer sb = new StringBuffer(); 579 sb.append("[ "); 580 for (int i = 0; i < sp; i++) { 581 final Object node = stack[i]; 582 sb.append(node.getClass().getSimpleName()); 583 sb.append('@'); 584 sb.append(Debug.id(node)); 585 sb.append(':'); 586 if (node instanceof FunctionNode) { 587 final FunctionNode fn = (FunctionNode)node; 588 final Source source = fn.getSource(); 589 String src = source.toString(); 590 if (src.contains(File.pathSeparator)) { 591 src = src.substring(src.lastIndexOf(File.pathSeparator)); 592 } 593 src += ' '; 594 src += fn.getLineNumber(); 595 sb.append(src); 596 } 597 sb.append(' '); 598 } 599 sb.append(" ==> ]"); 600 return sb.toString(); 601 } 602 603 private class NodeIterator <T extends LexicalContextNode> implements Iterator<T> { 604 private int index; 605 private T next; 606 private final Class<T> clazz; 607 private LexicalContextNode until; 608 609 NodeIterator(final Class<T> clazz) { 610 this(clazz, null); 611 } 612 613 NodeIterator(final Class<T> clazz, final LexicalContextNode until) { 614 this.index = sp - 1; |