Axiom.Compiler.Framework.PrologCodeParser.GetForeignMethodArguments C# (CSharp) Метод

GetForeignMethodArguments() приватный Метод

private GetForeignMethodArguments ( PrologCodePredicate f ) : ArrayList
f Axiom.Compiler.CodeObjectModel.PrologCodePredicate
Результат System.Collections.ArrayList
        private ArrayList GetForeignMethodArguments(PrologCodePredicate f)
        {
            ArrayList args = new ArrayList();
            if (f.Arguments[0] is PrologCodeConstantAtom)
            {
                PrologCodeConstantAtom fc = (PrologCodeConstantAtom)f.Arguments[0];
                if (fc.Value == "none")
                {
                    return args;
                }
                else
                {
                    _errors.Add(new PrologCompilerError("P0012", "Invalid predicate-method definition", "", false, _scanner.Current.Line, _scanner.Current.Column));
                    return args;
                }
            }
            PrologCodePredicate functor = (PrologCodePredicate)f;
            foreach (PrologCodePredicate a in functor.Arguments)
            {
                int passing = 0;
                int datatype = 0;

                switch (a.Name)
                {
                    case "+":
                        passing = PrologCodeMethodArgument.PASS_IN;
                        break;
                    case "-":
                        passing = PrologCodeMethodArgument.PASS_OUT;
                        break;
                    case "?":
                        passing = PrologCodeMethodArgument.PASS_INOUT;
                        break;
                    default:
                        break;
                }
                switch (((PrologCodeConstantAtom)a.Arguments[0]).Value)
                {
                    case "string":
                        datatype = PrologCodeMethodArgument.STRING;
                        break;
                    case "char":
                        datatype = PrologCodeMethodArgument.CHAR;
                        break;
                    case "int":
                        datatype = PrologCodeMethodArgument.INT;
                        break;
                    case "float":
                        datatype = PrologCodeMethodArgument.FLOAT;
                        break;
                    case "term":
                        datatype = PrologCodeMethodArgument.TERM;
                        break;
                    case "bool":
                        datatype = PrologCodeMethodArgument.BOOL;
                        break;
                    default:
                        break;
                }
                args.Add(new PrologCodeMethodArgument(datatype, passing));
            }
            return args;
        }