src/jdk/nashorn/internal/ir/BlockLexicalContext.java

Print this page




  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);