Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 public void Accept(TryExceptStatement tryExcept)
 {
     tryExcept.Visit (functionCompiler);
 }
Ejemplo n.º 3
0
		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);
		}
Ejemplo n.º 4
0
		public override void Accept (TryExceptStatement tryExcept)
		{
			errorLog.AddError (ErrorType.ParserError, tryExcept.Location,
				"statement can not exist inside pattern!");
		}
Ejemplo n.º 5
0
 public virtual void Accept(TryExceptStatement tryCatch)
 {
 }
Ejemplo n.º 6
0
 public void Accept(TryExceptStatement tryExcept)
 {
     tryExcept.TryBody.Visit (this);
     if (tryExcept.ExceptionIdentifier != null) {
         symbolTable.AddSymbol (tryExcept.ExceptionIdentifier);
     }
     tryExcept.ExceptBody.Visit (this);
 }
Ejemplo n.º 7
0
 public void Accept(TryExceptStatement tryExcept)
 {
     errorLog.AddError (ErrorType.ParserError, tryExcept.Location,
         "Statement not allowed outside function body!");
 }
Ejemplo n.º 8
0
 public void Accept(TryExceptStatement tryExcept)
 {
 }