diff options
Diffstat (limited to 'pyGHDL/dom/Misc.py')
-rw-r--r-- | pyGHDL/dom/Misc.py | 86 |
1 files changed, 43 insertions, 43 deletions
diff --git a/pyGHDL/dom/Misc.py b/pyGHDL/dom/Misc.py index 43c201c46..0f26119a2 100644 --- a/pyGHDL/dom/Misc.py +++ b/pyGHDL/dom/Misc.py @@ -1,19 +1,19 @@ # ============================================================================= -# ____ _ _ ____ _ _ -# _ __ _ _ / ___| | | | _ \| | __| | ___ _ __ ___ -# | '_ \| | | | | _| |_| | | | | | / _` |/ _ \| '_ ` _ \ -# | |_) | |_| | |_| | _ | |_| | |___ | (_| | (_) | | | | | | -# | .__/ \__, |\____|_| |_|____/|_____(_)__,_|\___/|_| |_| |_| -# |_| |___/ +# ____ _ _ ____ _ _ +# _ __ _ _ / ___| | | | _ \| | __| | ___ _ __ ___ +# | '_ \| | | | | _| |_| | | | | | / _` |/ _ \| '_ ` _ \ +# | |_) | |_| | |_| | _ | |_| | |___ | (_| | (_) | | | | | | +# | .__/ \__, |\____|_| |_|____/|_____(_)__,_|\___/|_| |_| |_| +# |_| |___/ # ============================================================================= -# Authors: -# Patrick Lehmann +# Authors: +# Patrick Lehmann # # Package module: DOM: Elements not covered by the VHDL standard. # # License: # ============================================================================ -# Copyright (C) 2019-2020 Tristan Gingold +# Copyright (C) 2019-2021 Tristan Gingold # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,27 +36,22 @@ Add a module documentation. """ from pathlib import Path -from typing import Any +from typing import Any +import pyGHDL.libghdl.utils from pydecor import export -from pyVHDLModel.VHDLModel import Design as VHDLModel_Design -from pyVHDLModel.VHDLModel import Library as VHDLModel_Library -from pyVHDLModel.VHDLModel import Document as VHDLModel_Document +from pyGHDL.dom._Utils import GetIirKindOfNode +from pyVHDLModel.VHDLModel import Design as VHDLModel_Design +from pyVHDLModel.VHDLModel import Library as VHDLModel_Library +from pyVHDLModel.VHDLModel import Document as VHDLModel_Document -import pyGHDL.libghdl as libghdl -from pyGHDL.libghdl import name_table, files_map, errorout_memory -from pyGHDL.libghdl.vhdl import nodes, sem_lib +import pyGHDL.libghdl as libghdl +from pyGHDL.libghdl import name_table, files_map, errorout_memory, LibGHDLException, utils +from pyGHDL.libghdl.vhdl import nodes, sem_lib -from pyGHDL.dom.Common import LibGHDLException, GHDLException -from pyGHDL.dom.DesignUnit import ( - Entity, - Architecture, - Package, - PackageBody, - Context, - Configuration, -) +from pyGHDL.dom.Common import DOMException, GHDLMixin +from pyGHDL.dom.DesignUnit import Entity, Architecture, Package, PackageBody, Context, Configuration __all__ = [] @@ -90,61 +85,66 @@ class Library(VHDLModel_Library): @export -class Document(VHDLModel_Document): +class Document(VHDLModel_Document, GHDLMixin): __ghdlFileID: Any __ghdlSourceFileEntry: Any __ghdlFile: Any def __init__(self, path: Path = None, dontParse: bool = False): super().__init__(path) + GHDLMixin.__init__(self) self.__ghdl_init() - if dontParse == False: + if (dontParse == False): self.parse() def __ghdl_init(self): # Read input file self.__ghdlFileID = name_table.Get_Identifier(str(self.Path)) - self.__ghdlSourceFileEntry = files_map.Read_Source_File( - name_table.Null_Identifier, self.__ghdlFileID - ) + self.__ghdlSourceFileEntry = files_map.Read_Source_File(name_table.Null_Identifier, self.__ghdlFileID) if self.__ghdlSourceFileEntry == files_map.No_Source_File_Entry: raise LibGHDLException("Cannot load file '{!s}'".format(self.Path)) - # parse + self.CheckForErrors() + + # Parse input file self.__ghdlFile = sem_lib.Load_File(self.__ghdlSourceFileEntry) + self.CheckForErrors() + def parse(self): - unit = nodes.Get_First_Design_Unit(self.__ghdlFile) - while unit != nodes.Null_Iir: + firstUnit = nodes.Get_First_Design_Unit(self.__ghdlFile) + + for unit in utils.chain_iter(firstUnit): libraryUnit = nodes.Get_Library_Unit(unit) - nodeKind = nodes.Get_Kind(libraryUnit) + nodeKind = GetIirKindOfNode(libraryUnit) - if nodeKind == nodes.Iir_Kind.Entity_Declaration: + if (nodeKind == nodes.Iir_Kind.Entity_Declaration): entity = Entity.parse(libraryUnit) self.Entities.append(entity) - elif nodeKind == nodes.Iir_Kind.Architecture_Body: + elif (nodeKind == nodes.Iir_Kind.Architecture_Body): architecture = Architecture.parse(libraryUnit) self.Architectures.append(architecture) - elif nodeKind == nodes.Iir_Kind.Package_Declaration: + elif (nodeKind == nodes.Iir_Kind.Package_Declaration): package = Package.parse(libraryUnit) self.Packages.append(package) - elif nodeKind == nodes.Iir_Kind.Package_Body: + elif (nodeKind == nodes.Iir_Kind.Package_Body): packageBody = PackageBody.parse(libraryUnit) self.PackageBodies.append(packageBody) - elif nodeKind == nodes.Iir_Kind.Context_Declaration: + elif (nodeKind == nodes.Iir_Kind.Context_Declaration): context = Context.parse(libraryUnit) self.Contexts.append(context) - elif nodeKind == nodes.Iir_Kind.Configuration_Declaration: + elif (nodeKind == nodes.Iir_Kind.Configuration_Declaration): configuration = Configuration.parse(libraryUnit) self.Configurations.append(configuration) else: - raise GHDLException("Unknown design unit kind.") - - unit = nodes.Get_Chain(unit) + raise DOMException( + "Unknown design unit kind '{kindName}'({kind}).".format( + kindName=nodeKind.name, kind=nodeKind) + ) |