public bool VisitVariantMatchStructureSelector(VariantMatchStructureSelector variantMatchStructureSelector) { Terminal inputTerminal = variantMatchStructureSelector.InputTerminals[0]; ValidateRequiredInputTerminal(inputTerminal); if (inputTerminal.IsConnected) { NIType inputType = inputTerminal.GetTrueVariable().Type; if (!(inputType.IsUnion() && inputType.GetFields().Any())) { inputTerminal.SetDfirMessage(Messages.TypeIsNotVariantType); } } return(true); }
bool IDfirNodeVisitor <bool> .VisitVariantMatchStructureSelector(VariantMatchStructureSelector variantMatchStructureSelector) { var fieldTypes = new Dictionary <string, TypeVariableReference>(); int fieldIndex = 0; foreach (var outputTerminal in variantMatchStructureSelector.OutputTerminals) { string fieldName = $"_{fieldIndex}"; TypeVariableReference fieldType = _typeVariableSet.CreateReferenceToNewTypeVariable(); fieldTypes[fieldName] = fieldType; _nodeFacade[outputTerminal] = new SimpleTerminalFacade(outputTerminal, fieldType); ++fieldIndex; } TypeVariableReference fieldedType = _typeVariableSet.CreateReferenceToIndefiniteFieldedType(fieldTypes); Terminal inputTerminal = variantMatchStructureSelector.InputTerminals[0]; _nodeFacade[inputTerminal] = new SimpleTerminalFacade(inputTerminal, fieldedType); return(true); }
bool IDfirNodeVisitor <bool> .VisitVariantMatchStructureSelector(VariantMatchStructureSelector variantMatchStructureSelector) { MarkTrueVariableOfTerminalConsumed(variantMatchStructureSelector.InputTerminals[0]); variantMatchStructureSelector.OutputTerminals.ForEach(MarkFacadeVariableOfTerminalLive); return(true); }
bool IDfirNodeVisitor <bool> .VisitVariantMatchStructureSelector(VariantMatchStructureSelector variantMatchStructureSelector) { variantMatchStructureSelector.UnifyNodeInputTerminalTypes(_typeUnificationResults); return(true); }
public VariantMatchStructureSelectorViewModel(VariantMatchStructureSelector selector, string foregroundUri) : base(selector) { ForegroundUri = new ResourceUri(this, foregroundUri); }