/// <summary> /// Looks for a finally-statement, and if it is found, parses and returns it. /// </summary> /// <param name="tryStatement"> /// The parent try statement. /// </param> /// <param name="parentReference"> /// The parent code unit. /// </param> /// <param name="unsafeCode"> /// Indicates whether the code being parsed resides in an unsafe code block. /// </param> /// <returns> /// Returns the statement. /// </returns> private FinallyStatement GetAttachedFinallyStatement(TryStatement tryStatement, Reference<ICodePart> parentReference, bool unsafeCode) { Param.AssertNotNull(tryStatement, "tryStatement"); Param.AssertNotNull(parentReference, "parentReference"); Param.Ignore(unsafeCode); FinallyStatement finallyStatement = null; // Look for a finally keyword. Symbol symbol = this.GetNextSymbol(parentReference); if (symbol.SymbolType == SymbolType.Finally) { Reference<ICodePart> statementReference = new Reference<ICodePart>(); // Move up to the finally keyword and add it. CsToken firstToken = this.GetToken(CsTokenType.Finally, SymbolType.Finally, statementReference); Node<CsToken> firstTokenNode = this.tokens.InsertLast(firstToken); // Get the embedded statement. This must be a block statement. BlockStatement childStatement = this.GetNextStatement(statementReference, unsafeCode) as BlockStatement; if (childStatement == null) { throw new SyntaxException(this.document.SourceCode, firstToken.LineNumber); } // Create the token list for the statement. CsTokenList partialTokens = new CsTokenList(this.tokens, firstTokenNode, this.tokens.Last); // Create and return the finally statement. finallyStatement = new FinallyStatement(partialTokens, tryStatement, childStatement); ((IWriteableCodeUnit)finallyStatement).SetParent(tryStatement); statementReference.Target = finallyStatement; } return finallyStatement; }
/// <summary> /// The save. /// </summary> /// <param name="finallyStatement"> /// The finally statement. /// </param> private void Save(FinallyStatement finallyStatement) { this.cppWriter.Write("finally"); this.Save((Statement)finallyStatement.EmbeddedStatement); }