public CompilerContext Compile(string name, string code, CompilerPipeline pipeline = null, Action<CompilerParameters> prepare = null) { if(null==pipeline) pipeline = new Parse(); var compiler = new BooCompiler(); compiler.Parameters.Pipeline = pipeline; compiler.Parameters.Input.Add(new ReaderInput(name, new StringReader(code))); if(prepare!=null) { prepare(compiler.Parameters); } return compiler.Run(); }
public static void Prepare(Parse result) { #if LIB2 if(-1!=result.Find(typeof(Parsing))){ result.InsertAfter(typeof (Parsing), new IncludeAstMacroExpandStep()); }else if (-1!=result.Find(typeof(WSABooParsingStep))){ result.InsertAfter(typeof(WSABooParsingStep), new IncludeAstMacroExpandStep()); } #else if (-1 != result.Find(typeof(BooParsingStep))) { result.InsertAfter(typeof(BooParsingStep), new IncludeAstMacroExpandStep()); } else if (-1 != result.Find(typeof(WSABooParsingStep))) { result.InsertAfter(typeof(WSABooParsingStep), new IncludeAstMacroExpandStep()); } #endif }
private ICompilationUnit Parse(IProjectContent projectContent, string fileName, int[] lineLength, BooCompiler compiler) { compiler.Parameters.OutputWriter = new StringWriter(); compiler.Parameters.TraceLevel = System.Diagnostics.TraceLevel.Off; // Compile pipeline as of Boo 0.9.2: // Boo.Lang.Compiler.Pipelines.Parse: // Boo.Lang.Parser.BooParsingStep // Boo.Lang.Compiler.Pipelines.ExpandMacros: // Boo.Lang.Compiler.Steps.InitializeTypeSystemServices // Boo.Lang.Compiler.Steps.PreErrorChecking // Boo.Lang.Compiler.Steps.MergePartialClasses // Boo.Lang.Compiler.Steps.InitializeNameResolutionService // Boo.Lang.Compiler.Steps.IntroduceGlobalNamespaces // Boo.Lang.Compiler.Steps.TransformCallableDefinitions // Boo.Lang.Compiler.Steps.BindTypeDefinitions // Boo.Lang.Compiler.Steps.BindGenericParameters // Boo.Lang.Compiler.Steps.BindNamespaces // Boo.Lang.Compiler.Steps.BindBaseTypes // Boo.Lang.Compiler.Steps.MacroAndAttributeExpansion // Boo.Lang.Compiler.Pipelines.ResolveExpressions: // Boo.Lang.Compiler.Steps.ExpandAstLiterals // Boo.Lang.Compiler.Steps.IntroduceModuleClasses // Boo.Lang.Compiler.Steps.NormalizeStatementModifiers // Boo.Lang.Compiler.Steps.NormalizeTypeAndMemberDefinitions // Boo.Lang.Compiler.Steps.NormalizeOmittedExpressions // Boo.Lang.Compiler.Steps.BindTypeDefinitions // Boo.Lang.Compiler.Steps.BindGenericParameters // Boo.Lang.Compiler.Steps.BindEnumMembers // Boo.Lang.Compiler.Steps.BindBaseTypes // Boo.Lang.Compiler.Steps.CheckMemberTypes // Boo.Lang.Compiler.Steps.BindMethods // Boo.Lang.Compiler.Steps.ResolveTypeReferences // Boo.Lang.Compiler.Steps.BindTypeMembers // Boo.Lang.Compiler.Steps.CheckGenericConstraints // Boo.Lang.Compiler.Steps.ProcessInheritedAbstractMembers // Boo.Lang.Compiler.Steps.CheckMemberNames // Boo.Lang.Compiler.Steps.ProcessMethodBodiesWithDuckTyping // Boo.Lang.Compiler.Steps.PreProcessExtensionMethods // Boo.Lang.Compiler.Pipelines.Compile: // Boo.Lang.Compiler.Steps.ConstantFolding // Boo.Lang.Compiler.Steps.NormalizeLiterals // Boo.Lang.Compiler.Steps.OptimizeIterationStatements // Boo.Lang.Compiler.Steps.BranchChecking // Boo.Lang.Compiler.Steps.CheckIdentifiers // Boo.Lang.Compiler.Steps.StricterErrorChecking // Boo.Lang.Compiler.Steps.CheckAttributesUsage // Boo.Lang.Compiler.Steps.ExpandDuckTypedExpressions // Boo.Lang.Compiler.Steps.ProcessAssignmentsToValueTypeMembers // Boo.Lang.Compiler.Steps.ExpandProperties // Boo.Lang.Compiler.Steps.RemoveDeadCode // Boo.Lang.Compiler.Steps.CheckMembersProtectionLevel // Boo.Lang.Compiler.Steps.NormalizeIterationStatements // Boo.Lang.Compiler.Steps.ProcessSharedLocals // Boo.Lang.Compiler.Steps.ProcessClosures // Boo.Lang.Compiler.Steps.ProcessGenerators // Boo.Lang.Compiler.Steps.ExpandVarArgsMethodInvocations // Boo.Lang.Compiler.Steps.InjectCallableConversions // Boo.Lang.Compiler.Steps.ImplementICallableOnCallableDefinitions // Boo.Lang.Compiler.Steps.CheckNeverUsedMembers // Boo.Lang.Compiler.Pipelines.CompileToMemory: // Boo.Lang.Compiler.Steps.EmitAssembly // Boo.Lang.Compiler.Pipelines.CompileToFile: // Boo.Lang.Compiler.Steps.SaveAssembly CompilerPipeline compilePipe = new Parse(); compilePipe.Add(new InitializeTypeSystemServices()); compilePipe.Add(new PreErrorChecking()); compilePipe.Add(new MergePartialClasses()); compilePipe.Add(new InitializeNameResolutionService()); compilePipe.Add(new IntroduceGlobalNamespaces()); // TransformCallableDefinitions: not used for CC compilePipe.Add(new BindTypeDefinitions()); compilePipe.Add(new BindGenericParameters()); compilePipe.Add(new BindNamespacesWithoutRemovingErrors()); compilePipe.Add(new BindBaseTypes()); compilePipe.Add(new MacroAndAttributeExpansion()); compilePipe.Add(new IntroduceModuleClasses()); BooParsingStep parsingStep = (BooParsingStep)compilePipe[0]; parsingStep.TabSize = 1; ConvertVisitor visitor = new ConvertVisitor(lineLength, projectContent); visitor.Cu.FileName = fileName; compilePipe.Add(visitor); compilePipe.BreakOnErrors = false; compiler.Parameters.Pipeline = compilePipe; compiler.Parameters.References.Add(typeof(Boo.Lang.Useful.Attributes.SingletonAttribute).Assembly); int errorCount = 0; compilePipe.AfterStep += delegate(object sender, CompilerStepEventArgs args) { if (args.Step == parsingStep) errorCount = args.Context.Errors.Count; }; try { compiler.Run(); visitor.Cu.ErrorsDuringCompile = errorCount > 0; } catch (Exception ex) { MessageService.ShowError(ex); } return visitor.Cu; }
public void strict_mode() { var pipe = new Parse(); //pipe.InsertAfter(typeof(Boo.Lang.Parser.BooParsingStep), new ExpandBmlStep()); //pipe.Add(new Boo.Lang.Compiler.Steps.PrintAst()); TextWriter target = new StringWriter(); checkMacro(@" #pragma boo bml ex=(div,span): div x,1,cust=test: style: """""" .x {weight:12;} """""" span y: 'body' ", @"bml ex = (div, span): bmlelement div, ___start, ___end, x, 1, cust = test: style : __write('\r\n .x {weight:12;}\r\n ') bmlelement span, ___start, ___end, y: __write('body')", pipe, Console.Out ); }