public static void ReplaceOptional(this CompilerPipeline pipeline, Type optionalPipelineStepType, ICompilerStep step)
        {
            int index = pipeline.Find(optionalPipelineStepType);

            if (index >= 0)
            {
                pipeline.RemoveAt(index);
                pipeline.Insert(index - 1, step);
            }
        }
Esempio n. 2
0
        public CompileUnit SetUpTypeInferenceSource()
        {
            CompilerPipeline compilerPipeline = UnityScriptCompiler.Pipelines.AdjustBooPipeline(new ResolveExpressions());

            compilerPipeline.RemoveAt(compilerPipeline.Find(typeof(ApplySemantics)));
            compilerPipeline.BreakOnErrors = false;
            var unityScriptCompiler = new UnityScriptCompiler(new UnityScriptCompilerParameters(My <IReflectionTypeSystemProvider> .Instance, false));

            CopyUnityScriptCompilerParametersTo(unityScriptCompiler);
            unityScriptCompiler.Parameters.Pipeline = compilerPipeline;

            unityScriptCompiler.Parameters.AddToEnvironment(
                typeof(TypeInferenceRuleProvider),
                GetCustomTypeInferenceRuleProvider);

            var compilerContext = unityScriptCompiler.Run(CompileUnit.CloneNode());

            if (((ICollection)compilerContext.Errors).Count != 0)
            {
                throw new CompilationErrorsException(compilerContext.Errors);
            }
            return(compilerContext.CompileUnit);
        }