Axiom.Runtime.Instructions.FCallInstruction.InvokeForeignPredicate C# (CSharp) Method

InvokeForeignPredicate() private method

private InvokeForeignPredicate ( Type type, MethodInfo methodInfo, AMForeignPredicate fp, Assembly loadedAssembly, AbstractMachineState state ) : bool
type System.Type
methodInfo System.Reflection.MethodInfo
fp AMForeignPredicate
loadedAssembly System.Reflection.Assembly
state AbstractMachineState
return bool
        private bool InvokeForeignPredicate(Type type, MethodInfo methodInfo, AMForeignPredicate fp, Assembly loadedAssembly, AbstractMachineState state)
        {
            int registerIndex = 0;
            ArrayList methodArguments = new ArrayList();

            foreach (AMForeignPredicateArgument arg in fp.Arguments)
            {
                AbstractTerm term = ((AbstractTerm)state["X" + registerIndex.ToString()]).Dereference();
                switch (arg.Type)
                {
                    case AMForeignPredicateArgument.T_BOOL:
                        bool bResult = false;
                        if (!Boolean.TryParse(term.Data().ToString(), out bResult))
                        {
                            return false;
                        }
                        methodArguments.Add(System.Boolean.Parse(term.Data().ToString()));
                        break;
                    case AMForeignPredicateArgument.T_CHAR:
                        if (term.Data() == null)
                        {
                            return false;
                        }
                        methodArguments.Add(Convert.ToChar(term.Data()));
                        break;
                    case AMForeignPredicateArgument.T_DOUBLE:
                    case AMForeignPredicateArgument.T_FLOAT:
                    case AMForeignPredicateArgument.T_INTEGER:
                        int iResult = 0;
                        if (!Int32.TryParse(term.Data().ToString(), out iResult))
                        {
                            return false;
                        }
                        methodArguments.Add(Int32.Parse(term.Data().ToString()));
                        break;

                    case AMForeignPredicateArgument.T_STRING:
                        methodArguments.Add(term.Data().ToString());
                        break;
                    case AMForeignPredicateArgument.T_TERM:
                        methodArguments.Add(term);
                        break;
                }
                registerIndex++;
            }
            return InvokePredicate(type, methodInfo, fp, state, loadedAssembly, methodArguments);
        }