Пример #1
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);
        }
Пример #2
0
 public override bool Visit(TryExceptStatement node)
 {
     Visit((Statement)node);
     TraversePrint(node.body);
     TraversePrint(node.final);
     return(true);
 }
Пример #3
0
 public override void Accept(TryExceptStatement tryExcept)
 {
     tryExcept.TryBody.Visit(this);
     if (tryExcept.ExceptionIdentifier != null)
     {
         symbolTable.AddSymbol(tryExcept.ExceptionIdentifier);
     }
     tryExcept.ExceptBody.Visit(this);
 }
Пример #4
0
 public override void Accept(TryExceptStatement tryCatch)
 {
     tryCatch.VisitChildren(this);
 }
Пример #5
0
 public virtual T Visit(TryExceptStatement node)
 {
     Visit((Statement)node);
     traverse(node.body);
     return(traverse(node.final));
 }
Пример #6
0
 public override void Accept(TryExceptStatement tryExcept)
 {
     tryExcept.Visit(functionCompiler);
 }
Пример #7
0
 public virtual void Accept(TryExceptStatement tryCatch)
 {
 }
Пример #8
0
 public override void Accept(TryExceptStatement tryExcept)
 {
     errorLog.AddError(ErrorType.ParserError, tryExcept.Location,
                       "statement can not exist inside pattern!");
 }
Пример #9
0
 public override void Accept(TryExceptStatement tryExcept)
 {
     errorLog.AddError(ErrorType.ParserError, tryExcept.Location,
                       "Statement not allowed outside function body!");
 }