private static AstNode ParseTryExcept(TokenStream stream) { TryExceptStatement retVal = null; stream.Expect (TokenClass.Keyword, "try"); AstNode tryBody = ParseStatement (stream); AstNode typeList = new ArgumentList (stream.Location); stream.Expect (TokenClass.Keyword, "except"); if (stream.Accept (TokenClass.OpenParan)) { Token ident = stream.Expect (TokenClass.Identifier); if (stream.Accept (TokenClass.Operator, "as")) { typeList = ParseTypeList (stream); } stream.Expect (TokenClass.CloseParan); retVal = new TryExceptStatement (stream.Location, ident.Value); } else { retVal = new TryExceptStatement (stream.Location, null); } retVal.Add (tryBody); retVal.Add (ParseStatement (stream)); retVal.Add (typeList); return retVal; }
public void Accept(TryExceptStatement tryExcept) { tryExcept.Visit (functionCompiler); }
public override void Accept (TryExceptStatement tryExcept) { IodineLabel exceptLabel = methodBuilder.CreateLabel (); IodineLabel endLabel = methodBuilder.CreateLabel (); methodBuilder.EmitInstruction (tryExcept.Location, Opcode.PushExceptionHandler, exceptLabel); tryExcept.TryBody.Visit (this); methodBuilder.EmitInstruction (tryExcept.TryBody.Location, Opcode.PopExceptionHandler); methodBuilder.EmitInstruction (tryExcept.TryBody.Location, Opcode.Jump, endLabel); methodBuilder.MarkLabelPosition (exceptLabel); tryExcept.TypeList.Visit (this); if (tryExcept.TypeList.Children.Count > 0) { methodBuilder.EmitInstruction (tryExcept.ExceptBody.Location, Opcode.BeginExcept, tryExcept.TypeList.Children.Count); } if (tryExcept.ExceptionIdentifier != null) { methodBuilder.EmitInstruction (tryExcept.ExceptBody.Location, Opcode.LoadException); methodBuilder.EmitInstruction (tryExcept.ExceptBody.Location, Opcode.StoreLocal, symbolTable.GetSymbol (tryExcept.ExceptionIdentifier).Index); } tryExcept.ExceptBody.Visit (this); methodBuilder.MarkLabelPosition (endLabel); }
public override void Accept (TryExceptStatement tryExcept) { errorLog.AddError (ErrorType.ParserError, tryExcept.Location, "statement can not exist inside pattern!"); }
public virtual void Accept(TryExceptStatement tryCatch) { }
public void Accept(TryExceptStatement tryExcept) { tryExcept.TryBody.Visit (this); if (tryExcept.ExceptionIdentifier != null) { symbolTable.AddSymbol (tryExcept.ExceptionIdentifier); } tryExcept.ExceptBody.Visit (this); }
public void Accept(TryExceptStatement tryExcept) { errorLog.AddError (ErrorType.ParserError, tryExcept.Location, "Statement not allowed outside function body!"); }
public void Accept(TryExceptStatement tryExcept) { }