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;
}