public CodeTryCatchFinallyStatement(CodeStatement [] tryStatements, CodeCatchClause [] catchClauses, CodeStatement [] finallyStatements) { TryStatements.AddRange(tryStatements); CatchClauses.AddRange(catchClauses); FinallyStatements.AddRange(finallyStatements); }
protected override void GenerateInner(CodeGenerator generator, CodeStatementEmitOptions emitOptions) { generator.WriteBlankLineBeforeEnteringBlock(); generator.Write(TokenType.Keyword, "try"); generator.WriteOpeningBrace(); generator.Indent++; generator.EnterLocalScope(); TryStatements.ReserveLocals(generator, default(CodeStatementEmitOptions)); TryStatements.Generate(generator, default(CodeStatementEmitOptions)); generator.ExitLocalScope(); generator.Indent--; foreach (var catchClause in CatchClauses) { generator.WriteMiddleClosingBrace(); generator.Write(TokenType.Keyword, "catch"); generator.Write(TokenType.Space, ' '); generator.Write(TokenType.Punctuation, '('); catchClause.CatchExceptionType.Generate(generator); generator.Write(TokenType.Space, ' '); generator.OutputIdentifier(TokenType.Identifier, catchClause.LocalName); generator.Write(TokenType.Punctuation, ')'); generator.WriteOpeningBrace(); generator.Indent++; generator.EnterLocalScope(); generator.ReserveLocal(catchClause.LocalName); catchClause.Statements.ReserveLocals(generator, default(CodeStatementEmitOptions)); catchClause.Statements.Generate(generator, default(CodeStatementEmitOptions)); generator.ExitLocalScope(); generator.Indent--; } if (FinallyStatements.Count > 0) { generator.WriteMiddleClosingBrace(); generator.Write(TokenType.Keyword, "finally"); generator.WriteOpeningBrace(); generator.Indent++; generator.EnterLocalScope(); FinallyStatements.ReserveLocals(generator, default(CodeStatementEmitOptions)); FinallyStatements.Generate(generator, default(CodeStatementEmitOptions)); generator.ExitLocalScope(); generator.Indent--; } generator.WriteClosingBrace(); }
public FunctionBody(FunctionExpression parent, CallDepthProtection protection, bool hasCatch) { parent.Require(GlobalVariable.CSUM); if (hasCatch) { CatchStatement = new CodeStatement($"return {CaughtErrorIdentifier};"); } TryBody = new Block(parent); if (protection != null) { TryBody.Statements.Add(protection.Check); TryBody.Statements.Add(new ReturnStatement(parent.DefaultReturnValue)); FinallyStatements.Add(_incrementCallSumDepth); //FinallyStatements.Add(protection.Cleanup); } else { FinallyStatements.Add(_incrementCallSum); } }
public CodeTryStatement(IEnumerable <CodeStatement> tryStatements, IEnumerable <CodeCatchClause> catchClauses, IEnumerable <CodeStatement> finallyStatements) { TryStatements.AddRange(tryStatements); CatchClauses.AddRange(catchClauses); FinallyStatements.AddRange(finallyStatements); }
public CodeTryCatchFinallyStatement(ILInstruction inline, CodeStatement[] tryStatements, CodeCatchClause[] catchClauses, CodeStatement[] finallyStatements) : base(inline) { TryStatements.AddRange(tryStatements); CatchClauses.AddRange(catchClauses); FinallyStatements.AddRange(finallyStatements); }