Axiom.Compiler.Framework.PrologCodeGenerator.CompileGoalVariable C# (CSharp) Метод

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

private CompileGoalVariable ( PrologCodeVariable var, int i ) : void
var Axiom.Compiler.CodeObjectModel.PrologCodeVariable
i int
Результат void
        private void CompileGoalVariable(PrologCodeVariable var, int i)
        {
            PrologVariableDictionaryEntry entry = _dictionary.GetVariable(var.Name);
            if (entry.IsTemporary)
            {
                if (entry.TemporaryIndex != i)
                {
                    ResolveConflicts(var, i);
                }
                if (entry.IsReferenced)
                {
                    if (entry.TemporaryIndex != i)
                    {
                        _generator.Emit(OpCodes.Put_Value, X(entry.TemporaryIndex), X(i));

                    }
                }
                else
                {
                    if (entry.TemporaryIndex != i)
                    {
                        _generator.Emit(OpCodes.Put_Variable, X(entry.TemporaryIndex), X(i));

                    }
                    else
                    {
                        _generator.Emit(OpCodes.Put_Variable, X(i), X(i));

                    }
                    entry.IsGlobal = true;
                }
            }
            else
            {
                ResolveConflicts(var, i);
                if (entry.IsReferenced)
                {
                    if (entry.IsUnsafe && !entry.IsGlobal &&
                        _dictionary.InLastGoal)
                    {
                        _generator.Emit(OpCodes.Put_Unsafe_Value, Y(entry.PermanentIndex), X(i));
                        entry.IsUnsafe = false;
                    }
                    else
                    {
                        if (entry.TemporaryIndex != -1)
                        {
                            _generator.Emit(OpCodes.Put_Value, X(entry.TemporaryIndex), X(i));
                        }
                        else
                        {
                            _generator.Emit(OpCodes.Put_Value, Y(entry.PermanentIndex), X(i));
                        }
                    }
                }
                else
                {
                    _generator.Emit(OpCodes.Put_Variable, Y(entry.PermanentIndex), X(i));
                }

                if (entry.TemporaryIndex == -1)
                {
                    entry.TemporaryIndex = i;
                }
                else
                {
                    // No
                }
            }
        }