private void CompileGoalRecordVariable(PrologCodeVariable var)
{
PrologVariableDictionaryEntry entry = _dictionary.GetVariable(var.Name);
if (entry.IsReferenced)
{
/* Compile build value here ... */
if (entry.IsTemporary)
{
if (entry.IsGlobal)
{
_generator.Emit(OpCodes.Set_Value, X(entry.TemporaryIndex));
}
else
{
_generator.Emit(OpCodes.Set_Local_Value, X(entry.TemporaryIndex));
entry.IsGlobal = true;
}
}
else
{
if (entry.IsGlobal)
{
if (entry.TemporaryIndex != -1)
{
_generator.Emit(OpCodes.Set_Value, X(entry.TemporaryIndex));
}
else
{
_generator.Emit(OpCodes.Set_Value, Y(entry.PermanentIndex));
}
}
else
{
if (entry.TemporaryIndex != -1)
{
_generator.Emit(OpCodes.Set_Local_Value, X(entry.TemporaryIndex));
}
else
{
_generator.Emit(OpCodes.Set_Local_Value, Y(entry.PermanentIndex));
}
}
}
}
else
{
if (entry.IsTemporary)
{
if (entry.Occurrences == 1)
{
_generator.Emit(OpCodes.Set_Void, "1");
}
else
{
_generator.Emit(OpCodes.Set_Variable, X(entry.TemporaryIndex));
}
}
else
{
_generator.Emit(OpCodes.Set_Variable, Y(entry.PermanentIndex));
}
entry.IsGlobal = true;
}
}