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]); } } }
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); }
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); }