private void generateCodeSnippet(Statement statement, CodeStream codeStream, BranchLabel postCloseLabel, boolean record, int... values) { int i = -1; int invokeCloseStartPc = -1; if (record) { i = values[0]; invokeCloseStartPc = values[1]; } if (statement instanceof LocalDeclaration) generateCodeSnippet((LocalDeclaration)statement, codeStream, postCloseLabel, record, i, invokeCloseStartPc); else if (statement instanceof Reference) generateCodeSnippet((Reference)statement, codeStream, postCloseLabel, record, i, invokeCloseStartPc); // else abort }
private void generateCodeSnippet(Statement statement, CodeStream codeStream, BranchLabel postCloseLabel, boolean record, int... values) { int i = -1; int invokeCloseStartPc = -1; if (record) { i = values[0]; invokeCloseStartPc = values[1]; } if (statement instanceof LocalDeclaration) generateCodeSnippet((LocalDeclaration)statement, codeStream, postCloseLabel, record, i, invokeCloseStartPc); else if (statement instanceof Reference) generateCodeSnippet((Reference)statement, codeStream, postCloseLabel, record, i, invokeCloseStartPc); // else abort }
BranchLabel exitLabel = new BranchLabel(codeStream); int invokeCloseStartPc = codeStream.position; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=343785 generateCodeSnippet(this.resources[i - 1], codeStream, exitLabel, false); codeStream.recordPositionsFrom(invokeCloseStartPc, this.tryBlock.sourceEnd); exitLabel.place();
BranchLabel exitLabel = new BranchLabel(codeStream); int invokeCloseStartPc = codeStream.position; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=343785 generateCodeSnippet(this.resources[i - 1], codeStream, exitLabel, false); codeStream.recordPositionsFrom(invokeCloseStartPc, this.tryBlock.sourceEnd); exitLabel.place();
codeStream.addDefinitelyAssignedVariables(currentScope, this.postTryInitStateIndex); generateCodeSnippet(stmt, codeStream, exitLabel, false /* record */); codeStream.recordPositionsFrom(invokeCloseStartPc, this.tryBlock.sourceEnd); generateCodeSnippet(stmt, codeStream, postCloseLabel, true /* record */, i, codeStream.position); postCloseLabel.place();
codeStream.addDefinitelyAssignedVariables(currentScope, this.postTryInitStateIndex); generateCodeSnippet(stmt, codeStream, exitLabel, false /* record */); codeStream.recordPositionsFrom(invokeCloseStartPc, this.tryBlock.sourceEnd); generateCodeSnippet(stmt, codeStream, postCloseLabel, true /* record */, i, codeStream.position); postCloseLabel.place();