private bool PropagateSignatureIfRequired(FunctionNameAndArity name, FunctionType?type, List <IRConstant> parameters, ref bool updated) { var signature = Context.LookupSignature(name); if (signature == null || !signature.FullyTyped) { updated = true; return(PropagateSignature(name, type, parameters)); } else { return(true); } }
private bool TryPropagateSignature(FunctionNameAndArity name, FunctionType? type, List<IRConstant> parameters) { // Build a signature with all parameters to make sure that all types can be resolved var sig = new List<ValueType>(parameters.Count); foreach (var param in parameters) { var paramSignature = DetermineSignature(param); sig.Add(paramSignature); } // Apply signature to symbol ApplySignature(name, type, sig); return true; }
private bool PropagateSignatureIfRequired(IRRule rule, FunctionNameAndArity name, FunctionType? type, List<IRValue> parameters, bool allowPartial) { var signature = Context.LookupSignature(name); bool signatureOk = (signature != null && signature.FullyTyped); if (!signatureOk && TryPropagateSignature(rule, name, type, parameters, allowPartial)) { signature = Context.LookupSignature(name); signatureOk = signature.FullyTyped; } if (signatureOk) { PropagateRuleTypesFromParamList(rule, parameters, signature); } return signatureOk; }