protected override CodeTerm GetCodeTermBase(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { switch (dereferenceType) { case WamDeferenceTypes.AllVariables: { return Target == null ? new CodeValueObject(null) : Target.GetCodeTerm(dereferenceType, mapping); } case WamDeferenceTypes.BoundVariables: { return Target == null ? mapping.Lookup(this) : Target.GetCodeTerm(dereferenceType, mapping); } case WamDeferenceTypes.None: { return mapping.Lookup(this); } default: throw new InvalidOperationException(string.Format("Unknown dereferenceType {0}.", dereferenceType)); } }
protected abstract CodeTerm GetCodeTermBase(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping);
public CodeTerm GetCodeTerm(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { return GetCodeTermBase(dereferenceType, mapping); }
protected override CodeTerm GetCodeTermBase(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { return new CodeValueType(Value); }
protected override CodeTerm GetCodeTermBase(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { if (Functor == Functor.ListFunctor) { var head = new List<CodeTerm>(); CodeTerm tail = null; var codeTermHead = Children[0].GetCodeTerm(dereferenceType, mapping); var codeTermTail = Children[1].GetCodeTerm(dereferenceType, mapping); head.Add(codeTermHead); if (codeTermTail.IsCodeList) { head.AddRange(codeTermTail.AsCodeList.Head); tail = codeTermTail.AsCodeList.Tail; } else { tail = codeTermTail; } return new CodeList(head, tail); } if (Functor.Arity == 0) { return new CodeCompoundTerm(new CodeFunctor(Functor.Name)); } var children = new List<CodeTerm>(); foreach (var child in Children) { children.Add(child.GetCodeTerm(dereferenceType, mapping)); } return new CodeCompoundTerm(new CodeFunctor(Functor.Name, Functor.Arity), children); }
protected override CodeTerm GetCodeTermBase(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { return(new CodeValueException(Value)); }
public CodeTerm GetCodeTerm(WamDeferenceTypes dereferenceType, WamReferenceTargetMapping mapping) { return(GetCodeTermBase(dereferenceType, mapping)); }