Class DoStatement

All Implemented Interfaces:
TypeConstants, TypeIds

public class DoStatement extends Statement
  • Field Details

  • Constructor Details

    • DoStatement

      public DoStatement(Expression condition, Statement action, int sourceStart, int sourceEnd)
  • Method Details

    • analyseCode

      public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo)
      Specified by:
      analyseCode in class Statement
    • generateCode

      public void generateCode(BlockScope currentScope, CodeStream codeStream)
      Do statement code generation
      Specified by:
      generateCode in class Statement
    • printStatement

      public StringBuilder printStatement(int indent, StringBuilder output)
      Specified by:
      printStatement in class Statement
    • bindingsWhenComplete

      public LocalVariableBinding[] bindingsWhenComplete()
      Overrides:
      bindingsWhenComplete in class Statement
    • resolve

      public void resolve(BlockScope scope)
      Specified by:
      resolve in class Statement
    • traverse

      public void traverse(ASTVisitor visitor, BlockScope scope)
      Overrides:
      traverse in class ASTNode
    • doesNotCompleteNormally

      public boolean doesNotCompleteNormally()
      Description copied from class: Statement
      Lambda shape analysis: *Assuming* this is reachable, analyze if this completes normally i.e control flow can reach the textually next statement. For blocks, we don't perform intra-reachability analysis. We assume the lambda body is free of intrinsic control flow errors (if such errors exist they will not be flagged by this analysis, but are guaranteed to surface later on.)
      Overrides:
      doesNotCompleteNormally in class Statement
      See Also:
    • completesByContinue

      public boolean completesByContinue()
      Description copied from class: Statement
      Lambda shape analysis: *Assuming* this is reachable, analyze if this completes by continuing i.e control flow cannot reach the textually next statement. This is necessitated by the fact that continue claims to not complete normally. So this is necessary to discriminate between do { continue; } while (false); which completes normally and do { throw new Exception(); } while (false); which does not complete normally.
      Overrides:
      completesByContinue in class Statement