Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }