private void CreateFacadesForInoutReferenceParameter( NIType parameterDataType, Terminal inputTerminal, Terminal outputTerminal, Dictionary <NIType, TypeVariableReference> genericTypeParameters, Dictionary <NIType, ReferenceInputTerminalLifetimeGroup> lifetimeFacadeGroups, Dictionary <NIType, LifetimeTypeVariableGroup> lifetimeVariableGroups) { NIType lifetimeType = parameterDataType.GetReferenceLifetimeType(); bool isMutable = parameterDataType.IsMutableReferenceType(); InputReferenceMutability mutability = parameterDataType.GetInputReferenceMutabilityFromType(); var lifetimeGroup = lifetimeVariableGroups[lifetimeType]; ReferenceInputTerminalLifetimeGroup facadeGroup; if (!lifetimeFacadeGroups.TryGetValue(lifetimeType, out facadeGroup)) { facadeGroup = _nodeFacade.CreateInputLifetimeGroup(mutability, lifetimeGroup.LazyNewLifetime, lifetimeGroup.LifetimeType); } // TODO: should not add outputTerminal here if borrow cannot be auto-terminated // i.e., if there are in-only or out-only parameters that share lifetimeType TypeVariableReference referentTypeVariableReference = _typeVariableSet.CreateTypeVariableReferenceFromNIType(parameterDataType.GetReferentType(), genericTypeParameters); TypeVariableReference mutabilityTypeVariableReference = mutability == InputReferenceMutability.Polymorphic ? genericTypeParameters[parameterDataType.GetReferenceMutabilityType()] : default(TypeVariableReference); facadeGroup.AddTerminalFacade(inputTerminal, referentTypeVariableReference, mutabilityTypeVariableReference, outputTerminal); }
private ReferenceInputTerminalLifetimeGroup CreateTerminalLifetimeGroup( InputReferenceMutability mutability, LifetimeTypeVariableGroup variableGroup) { return(_nodeFacade.CreateInputLifetimeGroup( mutability, variableGroup.LazyNewLifetime, variableGroup.LifetimeType)); }