public override void CheckSemantics(TigerScope scope, Report report) { ContainingScope = scope; IsOK = true; //Check if break is in correct position var nodes = GetNodesToRoot().TakeWhile(x => !(x is MethodDeclarationNode)).ToList(); Owner = (nodes.FirstOrDefault(x => x is IBreakableNode)) as IBreakableNode; if (Owner == null) { report.AddError(SemanticErrors.BreakInIncorrectPostion(this)); return; } //Set containing InstructionSequenceNodes' types to void nodes.TakeWhile(x => !(x is IBreakableNode)).Where(n => n is InstructionSequenceNode).ToList() .ForEach(n => ((InstructionSequenceNode)n).TigerType = TigerType.Void); }