MonoDevelop.IronPython.Parser.Dom.PythonCompilationUnit.Build C# (CSharp) Method

Build() public method

public Build ( ) : void
return void
        public void Build()
        {
            if (Module == null)
                return;

            // fake class containing modules funcs
            var module = new PackageDomType () {
                Name       = PythonHelper.PackageFromFilename (FileName),
                ClassType  = ClassType.Unknown,
                Location   = new DomLocation (0, 0),
                BodyRegion = Module.Region,
            };
            m_AllWrapped.Add (module);
            Add (module);

            // module functions
            foreach (IMethod method in BuildFunctions (Module.Functions))
                module.Add (method);

            // module locals
            foreach (IField field in BuildAttributes (Module.Attributes))
                module.Add (field);

            // module classes
            foreach (IType type in BuildClasses (Module.Classes))
                module.Add (type);
        }

Usage Example

        public override ParsedDocument Parse(ProjectDom dom, string fileName, string content)
        {
            var document = new ParsedDocument (fileName);
            var compilationUnit = new PythonCompilationUnit (fileName);
            document.CompilationUnit = compilationUnit;

            if (String.IsNullOrEmpty (content))
                return document;

            var scriptSource = pythonEngine.CreateScriptSourceFromString (content, SourceCodeKind.File);
            var context = new CompilerContext (HostingHelpers.GetSourceUnit (scriptSource),
                compilerOptions, ErrorSink.Default);
            var parser = IronPythonParserEngine.CreateParser (context, langOptions);

            IronPythonAst ast = null;
            try {
                ast = parser.ParseFile (false);
            } catch (SyntaxErrorException exc) {
                // We could likely improve the error message
                document.Errors.Add (new Error (exc.Line, exc.Column, exc.Message));
                return document;
            }

            walker.Reset ();
            ast.Walk (walker);

            compilationUnit.Module = walker.Module;
            compilationUnit.Build ();

            return document;
        }