예제 #1
0
        private void ApplyRuleForMoveTupleLiteral(ref bool appliedRule, Core.InstructionMoveLiteralTuple inst)
        {
            var destType = TypeResolver.GetDataAccessType(session, funct, inst.destination);

            var tupleElements = new Core.Type[inst.sourceElements.Length];

            for (var i = 0; i < inst.sourceElements.Length; i++)
            {
                tupleElements[i] = TypeResolver.GetDataAccessType(session, funct, inst.sourceElements[i]);
            }

            var srcTuple = Core.TypeTuple.Of(tupleElements);
            var srcType  = (Core.Type)srcTuple;

            var inferredDest = TypeInferencer.Try(session, srcType, ref destType);
            var inferredSrc  = TypeInferencer.Try(session, destType, ref srcType);

            if (inferredDest)
            {
                appliedRule = ApplyToDataAccess(inst.destination, destType);
            }

            if (inferredSrc)
            {
                for (var i = 0; i < inst.sourceElements.Length; i++)
                {
                    appliedRule = ApplyToDataAccess(inst.sourceElements[i], srcTuple.elementTypes[i]);
                }
            }
        }
예제 #2
0
        private void CheckMoveTupleLiteral(List <InitStatus> statusList, Core.InstructionMoveLiteralTuple inst)
        {
            for (var i = 0; i < inst.sourceElements.Length; i++)
            {
                ValidateSource(statusList, inst.sourceElements[i]);
            }

            CheckAndInitDestination(statusList, inst.destination);
        }
예제 #3
0
        private void CheckMoveTupleLiteral(Core.InstructionMoveLiteralTuple inst)
        {
            var destType = TypeResolver.GetDataAccessType(this.session, this.funct, inst.destination);

            var tupleElements = new Core.Type[inst.sourceElements.Length];

            for (var i = 0; i < inst.sourceElements.Length; i++)
            {
                if (!TypeResolver.ValidateDataAccess(this.session, this.funct, inst.sourceElements[i]))
                {
                    this.foundErrors = true;
                    return;
                }

                tupleElements[i] = TypeResolver.GetDataAccessType(this.session, this.funct, inst.sourceElements[i]);
            }

            var srcTuple = Core.TypeTuple.Of(tupleElements);

            CheckMove(inst.destination, srcTuple, inst.span);
        }