aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/dom/Misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyGHDL/dom/Misc.py')
-rw-r--r--pyGHDL/dom/Misc.py86
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)
+ )