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);
        }
Exemplo n.º 2
0
        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);
 }
Exemplo n.º 5
0
 public VariantMatchStructureSelectorViewModel(VariantMatchStructureSelector selector, string foregroundUri)
     : base(selector)
 {
     ForegroundUri = new ResourceUri(this, foregroundUri);
 }