aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/python
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2019-05-14 18:26:39 +0200
committerTristan Gingold <tgingold@free.fr>2019-05-14 21:20:04 +0200
commitf38a46391774535b60befc707b088b8dab43adcd (patch)
treeecdb45198ae54181082cb58d0f0379e7ee7ad970 /testsuite/python
parent5ec4adc52ffacb8407d17dc728e45f7ac8f66261 (diff)
downloadghdl-f38a46391774535b60befc707b088b8dab43adcd.tar.gz
ghdl-f38a46391774535b60befc707b088b8dab43adcd.tar.bz2
ghdl-f38a46391774535b60befc707b088b8dab43adcd.zip
testsuite: add a test for python
Diffstat (limited to 'testsuite/python')
-rw-r--r--testsuite/python/001units/demo.vhdl7
-rwxr-xr-xtestsuite/python/001units/show_units.py46
2 files changed, 53 insertions, 0 deletions
diff --git a/testsuite/python/001units/demo.vhdl b/testsuite/python/001units/demo.vhdl
new file mode 100644
index 000000000..4e40f7e94
--- /dev/null
+++ b/testsuite/python/001units/demo.vhdl
@@ -0,0 +1,7 @@
+entity e1 is
+end e1;
+
+architecture behav of e1 is
+begin
+ assert false report "arch" severity note;
+end behav;
diff --git a/testsuite/python/001units/show_units.py b/testsuite/python/001units/show_units.py
new file mode 100755
index 000000000..ad002312f
--- /dev/null
+++ b/testsuite/python/001units/show_units.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+import libghdl
+import libghdl.thin.name_table as name_table
+import libghdl.thin.files_map as files_map
+import libghdl.thin.vhdl.nodes as nodes
+import libghdl.thin.vhdl.sem_lib as sem_lib
+
+def init():
+ """Initialization: set options and then load libaries"""
+ libghdl.set_option(b'--std=08')
+ libghdl.analyze_init()
+
+def get_identifier_ptr(n):
+ """Return the python string from node :param n: identifier"""
+ return name_table.Get_Name_Ptr(nodes.Get_Identifier(n)).decode('utf-8')
+
+def list_units(filename):
+ # Load the file
+ file_id = name_table.Get_Identifier(filename.encode('utf_8'))
+ sfe = files_map.Read_Source_File(name_table.Null_Identifier, file_id)
+ if sfe == files_map.No_Source_File_Entry:
+ print("cannot open file '{}'".format(filename))
+ return
+
+ # Parse and analyze
+ file = sem_lib.Load_File(sfe)
+
+ # Display all design units
+ unit = nodes.Get_First_Design_Unit(file)
+ while unit != nodes.Null_Iir:
+ lib_unit = nodes.Get_Library_Unit(unit)
+ if nodes.Get_Kind(lib_unit) == nodes.Iir_Kind.Entity_Declaration:
+ print('entity {}'.format(get_identifier_ptr(lib_unit)))
+ elif nodes.Get_Kind(lib_unit) == nodes.Iir_Kind.Architecture_Body:
+ print('architecture {}'.format(get_identifier_ptr(lib_unit)))
+ else:
+ print('unknown unit!')
+ unit = nodes.Get_Chain(unit)
+
+
+def main():
+ init()
+ list_units('demo.vhdl')
+
+if __name__ == '__main__':
+ main()