protected override InstructionFlags ComputeFlags() { var sectionFlags = InstructionFlags.EndPointUnreachable; // neutral element for CombineBranches() foreach (var section in Sections) { sectionFlags = SemanticHelper.CombineBranches(sectionFlags, section.Flags); } return(value.Flags | InstructionFlags.ControlFlow | sectionFlags); }
protected override InstructionFlags ComputeFlags() { var flags = TryBlock.Flags; foreach (var handler in Handlers) { flags = SemanticHelper.CombineBranches(flags, handler.Flags); } return(flags | InstructionFlags.ControlFlow); }
protected override InstructionFlags ComputeFlags() { // left is always executed; right only sometimes return(DirectFlags | left.Flags | SemanticHelper.CombineBranches(InstructionFlags.None, right.Flags)); }
protected override InstructionFlags ComputeFlags() { // valueInst is always executed; fallbackInst only sometimes return(InstructionFlags.ControlFlow | valueInst.Flags | SemanticHelper.CombineBranches(InstructionFlags.None, fallbackInst.Flags)); }
protected override InstructionFlags ComputeFlags() { return(InstructionFlags.ControlFlow | condition.Flags | SemanticHelper.CombineBranches(trueInst.Flags, falseInst.Flags)); }