private void CompileGoalArguments(ArrayList arguments)
{
for (int i = 0; i < arguments.Count; i++)
{
PrologCodeTerm term = (PrologCodeTerm)arguments[i];
// TODO: check it's a nil atom then handle put conflicts
if (term is PrologCodeEmptyList)
{
ResolveConflicts(term, i);
_generator.Emit(OpCodes.Put_Constant, "[]", X(i));
}
else if (term is PrologCodeAtom)
{
// Handle put conflicts here...
ResolveConflicts(term, i);
if (term is PrologCodeConstantAtom)
{
_generator.Emit(OpCodes.Put_Constant, ((PrologCodeConstantAtom)term).Value, X(i));
}
else if (term is PrologCodeStringAtom)
{
_generator.Emit(OpCodes.Put_Constant, ((PrologCodeStringAtom)term).Value, X(i));
}
else if (term is PrologCodeIntegerAtom)
{
_generator.Emit(OpCodes.Put_Constant, ((PrologCodeIntegerAtom)term).Value.ToString(), X(i));
}
else if (term is PrologCodeFloatAtom)
{
_generator.Emit(OpCodes.Put_Constant, ((PrologCodeFloatAtom)term).Value.ToString(), X(i));
}
}
else if (term is PrologCodeVariable)
{
CompileGoalVariable((PrologCodeVariable)term, i);
}
else if (term is PrologCodePredicate || term is PrologCodeNonEmptyList)
{
ResolveConflicts(term, i);
CompileGoalRecord(term, i);
}
}
}