private bool DoesTreeCall(IApplyBlock function, IApplyBlock currentCheck, List <IApplyBlock> check = null) { if (check == null) { check = new List <IApplyBlock>(); } if (currentCheck.CallInfo == null) { return(false); } if (function is DefinedMethod dm && currentCheck is IMethod asMethod && (dm == asMethod || asMethod.Attributes.AllOverrideOptions().Contains(dm))) { return(!asMethod.Attributes.Recursive); } if (check.Contains(currentCheck)) { return(false); } check.Add(currentCheck); foreach (var call in currentCheck.CallInfo.Calls) { if (DoesTreeCall(function, call.Key, check)) { return(true); } } return(false); }
private bool DoesTreeCall(IApplyBlock function, IApplyBlock currentCheck, List <IApplyBlock> check = null) { if (check == null) { check = new List <IApplyBlock>(); } if (function == currentCheck) { if (function is DefinedMethod && ((DefinedMethod)function).IsRecursive) { return(false); } else { return(true); } } if (check.Contains(currentCheck)) { return(false); } check.Add(currentCheck); foreach (var call in currentCheck.CallInfo.Calls) { if (DoesTreeCall(function, call.Key, check)) { return(true); } } return(false); }
public void Call(IApplyBlock callBlock, DocRange range) { if (!Calls.ContainsKey(callBlock)) { Calls.Add(callBlock, new List <DocRange>()); } Calls[callBlock].Add(range); }
public void ApplyBlock(IApplyBlock apply) { _applyBlocks.Add(apply); if (apply.CallInfo != null) { _recursionCheck.Add(apply.CallInfo); } }
public MethodStack(IApplyBlock function) { Function = function; }
public RecursiveCallHandler(IApplyBlock applyBlock, bool recursionAllowed, string typeName = "function") { _applyBlock = applyBlock; _recursionAllowed = recursionAllowed; _typeName = typeName; }
public void ApplyBlock(IApplyBlock apply) { applyBlocks.Add(apply); }
public CallInfo(IApplyBlock function, ScriptFile script) { Function = function; Script = script; }
public bool WasCalled(IApplyBlock callable) => MethodStack.Any(ms => ms.Function == this);
public RecursiveCallHandler(IApplyBlock applyBlock, string typeName = "function") { _applyBlock = applyBlock; _typeName = typeName; }