/// <summary> /// Add a branch from a location to a target label /// </summary> /// <param name="ilg"></param> /// <param name="target"></param> /// <remarks></remarks> public void AddBranch(YaleIlGenerator ilg, Label target) { var startLoc = new ILLocation(ilg.Length); var branchInfo = new BranchInfo(startLoc, target); branchInfos.Add(branchInfo); }
/// <summary> /// Find all the branches between the start and end locations of a target branch /// </summary> /// <param name="target"></param> /// <param name="dest"></param> /// <remarks></remarks> private void FindBetweenBranches(BranchInfo target, ICollection <BranchInfo> dest) { foreach (var branchInfo in branchInfos) { if (branchInfo.IsBetween(target)) { dest.Add(branchInfo); } } }
/// <summary> /// Determine if a branch from a point to a label will be long /// </summary> /// <param name="ilg"></param> /// <param name="target"></param> /// <returns></returns> /// <remarks></remarks> public bool IsLongBranch(YaleIlGenerator ilg, Label target) { var startLoc = new ILLocation(ilg.Length); var branchInfo = new BranchInfo(startLoc, target); var index = branchInfos.IndexOf(branchInfo); branchInfo = branchInfos[index]; return(branchInfo.IsLongBranch); }