protected void RunCompilationUpToAutomaticNodeInsertion(DfirRoot dfirRoot, CompileCancellationToken cancellationToken = null) { cancellationToken = cancellationToken ?? new CompileCancellationToken(); var lifetimeVariableAssociation = new LifetimeVariableAssociation(); RunSemanticAnalysisUpToValidation(dfirRoot, cancellationToken, lifetimeVariableAssociation); if (DfirMessageHelper.CalculateIsBroken(dfirRoot)) { var messageBuilder = new StringBuilder("Compilation failed because DfirRoot has semantic errors:\n"); foreach (DfirNodeMessagePair messagePair in DfirMessageHelper.ListAllNodeUserMessages(dfirRoot, false)) { messageBuilder.AppendLine($"{messagePair.Node}: {messagePair.Message.Descriptor}"); } Assert.Fail(messageBuilder.ToString()); } new AutoBorrowTransform(lifetimeVariableAssociation).Execute(dfirRoot, cancellationToken); var nodeInsertionTypeUnificationResultFactory = new NodeInsertionTypeUnificationResultFactory(); new InsertTerminateLifetimeTransform(lifetimeVariableAssociation, nodeInsertionTypeUnificationResultFactory) .Execute(dfirRoot, cancellationToken); new InsertDropTransform(lifetimeVariableAssociation, nodeInsertionTypeUnificationResultFactory) .Execute(dfirRoot, cancellationToken); }
protected void RunCompilationUpToAsyncNodeDecomposition(DfirRoot dfirRoot, CompileCancellationToken cancellationToken = null) { cancellationToken = cancellationToken ?? new CompileCancellationToken(); RunCompilationUpToAutomaticNodeInsertion(dfirRoot, cancellationToken); var nodeInsertionTypeUnificationResultFactory = new NodeInsertionTypeUnificationResultFactory(); var emptyDictionary = new Dictionary <CompilableDefinitionName, bool>(); new AsyncNodeDecompositionTransform(emptyDictionary, emptyDictionary, nodeInsertionTypeUnificationResultFactory) .Execute(dfirRoot, cancellationToken); }