static Module Parse(string fileName, string fileContent) { BooParsingStep step = new BooParsingStep(); StringBuilder errors = new StringBuilder(); Module module = BooParser.ParseModule(4, new CompileUnit(), fileName, new StringReader(fileContent), delegate(antlr.RecognitionException e) { errors.AppendLine(e.ToString()); }); if (errors.Length > 0) { throw new FormsDesignerLoadException("Syntax errors in " + fileName + ":\r\n" + errors.ToString()); } return(module); }
private void AddNamespaceImports(Import node) { RemoveCurrentNode(); string url = GetFilePath(node); using (TextReader reader = urlResolver(url, baseDirectory)) { BooParsingStep parser = new BooParsingStep(); CompilerContext context = new CompilerContext(); StringInput input = new StringInput(node.AssemblyReference.Name, reader.ReadToEnd()); context.Parameters.Input.Add(input); parser.Initialize(context); parser.Run(); Module current = (Module)node.GetAncestor(NodeType.Module); foreach (Module module in context.CompileUnit.Modules) { foreach (Import import in module.Imports) { current.Imports.Add(import); } } } }
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); }