46 /** Last non debug statement emitted in this context */
47 protected Statement lastStatement;
48
49 @Override
50 public <T extends LexicalContextNode> T push(final T node) {
51 T pushed = super.push(node);
52 if (node instanceof Block) {
53 sstack.push(new ArrayList<Statement>());
54 }
55 return pushed;
56 }
57
58 /**
59 * Get the statement list from the stack, possibly filtered
60 * @return statement list
61 */
62 protected List<Statement> popStatements() {
63 return sstack.pop();
64 }
65
66 @Override
67 public <T extends LexicalContextNode> T pop(final T node) {
68 T expected = node;
69 if (node instanceof Block) {
70 final List<Statement> newStatements = popStatements();
71 expected = (T)((Block)node).setStatements(this, newStatements);
72 if (!sstack.isEmpty()) {
73 lastStatement = lastStatement(sstack.peek());
74 }
75 }
76 return super.pop(expected);
77 }
78
79 /**
80 * Append a statement to the block being generated
81 * @param statement statement to add
82 */
83 public void appendStatement(final Statement statement) {
84 assert statement != null;
85 sstack.peek().add(statement);
|
46 /** Last non debug statement emitted in this context */
47 protected Statement lastStatement;
48
49 @Override
50 public <T extends LexicalContextNode> T push(final T node) {
51 T pushed = super.push(node);
52 if (node instanceof Block) {
53 sstack.push(new ArrayList<Statement>());
54 }
55 return pushed;
56 }
57
58 /**
59 * Get the statement list from the stack, possibly filtered
60 * @return statement list
61 */
62 protected List<Statement> popStatements() {
63 return sstack.pop();
64 }
65
66 @SuppressWarnings("unchecked")
67 @Override
68 public <T extends LexicalContextNode> T pop(final T node) {
69 T expected = node;
70 if (node instanceof Block) {
71 final List<Statement> newStatements = popStatements();
72 expected = (T)((Block)node).setStatements(this, newStatements);
73 if (!sstack.isEmpty()) {
74 lastStatement = lastStatement(sstack.peek());
75 }
76 }
77 return super.pop(expected);
78 }
79
80 /**
81 * Append a statement to the block being generated
82 * @param statement statement to add
83 */
84 public void appendStatement(final Statement statement) {
85 assert statement != null;
86 sstack.peek().add(statement);
|