Source code for m2isar.backends.viewer.treegen

# SPDX-License-Identifier: Apache-2.0
#
# This file is part of the M2-ISA-R project: https://github.com/tum-ei-eda/M2-ISA-R
#
# Copyright (C) 2022
# Chair of Electrical Design Automation
# Technical University of Munich

"""Generate a ttk.Treeview representation of a M2-ISA-R model structure."""

import tkinter as tk

from ...metamodel import behav
from .utils import TreeGenContext

# pylint: disable=unused-argument

[docs] def operation(self: behav.Operation, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Operation")) for stmt in self.statements: stmt.generate(context) context.pop()
[docs] def block(self: behav.Block, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Block")) for stmt in self.statements: stmt.generate(context) context.pop()
[docs] def binary_operation(self: behav.BinaryOperation, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Binary Operation")) context.push(context.tree.insert(context.parent, tk.END, text="Left")) self.left.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Right")) self.right.generate(context) context.pop() context.tree.insert(context.parent, tk.END, text="Op", values=(self.op.value,)) context.pop()
[docs] def slice_operation(self: behav.SliceOperation, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Slice Operation")) context.push(context.tree.insert(context.parent, tk.END, text="Expr")) self.expr.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Left")) self.left.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Right")) self.right.generate(context) context.pop() context.pop()
[docs] def concat_operation(self: behav.ConcatOperation, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Concat Operation")) context.push(context.tree.insert(context.parent, tk.END, text="Left")) self.left.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Right")) self.right.generate(context) context.pop() context.pop()
[docs] def number_literal(self: behav.IntLiteral, context: "TreeGenContext"): context.tree.insert(context.parent, tk.END, text="Number Literal", values=(self.value,))
[docs] def int_literal(self: behav.IntLiteral, context: "TreeGenContext"): context.tree.insert(context.parent, tk.END, text="Int Literal", values=(self.value,))
[docs] def scalar_definition(self: behav.ScalarDefinition, context: "TreeGenContext"): context.tree.insert(context.parent, tk.END, text="Scalar Definition", values=(self.scalar.name,))
[docs] def break_(self: behav.Break, context: "TreeGenContext"): context.tree.insert(context.parent, tk.END, text="Break")
[docs] def assignment(self: behav.Assignment, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Assignment")) context.push(context.tree.insert(context.parent, tk.END, text="Target")) self.target.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Expr")) self.expr.generate(context) context.pop() context.pop()
[docs] def conditional(self: behav.Conditional, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Conditional")) context.push(context.tree.insert(context.parent, tk.END, text="Conditions")) for cond in self.conds: cond.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Statements")) for stmt in self.stmts: stmt.generate(context) context.pop() context.pop()
[docs] def loop(self: behav.Loop, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Loop")) context.tree.insert(context.parent, tk.END, text="Post Test", values=(self.post_test,)) context.push(context.tree.insert(context.parent, tk.END, text="Condition")) self.cond.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Statements")) for stmt in self.stmts: stmt.generate(context) context.pop() context.pop()
[docs] def ternary(self: behav.Ternary, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Ternary")) context.push(context.tree.insert(context.parent, tk.END, text="Cond")) self.cond.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Then Expression")) self.then_expr.generate(context) context.pop() context.push(context.tree.insert(context.parent, tk.END, text="Else Expression")) self.else_expr.generate(context) context.pop() context.pop()
[docs] def return_(self: behav.Return, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Return")) if self.expr is not None: context.push(context.tree.insert(context.parent, tk.END, text="Expression")) self.expr.generate(context) context.pop() context.pop()
[docs] def unary_operation(self: behav.UnaryOperation, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Unary Operation")) context.push(context.tree.insert(context.parent, tk.END, text="Right")) self.right.generate(context) context.pop() context.tree.insert(context.parent, tk.END, text="Op", values=(self.op.value,)) context.pop()
[docs] def named_reference(self: behav.NamedReference, context: "TreeGenContext"): context.tree.insert(context.parent, tk.END, text="Named Reference", values=(f"{self.reference}",))
[docs] def indexed_reference(self: behav.IndexedReference, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Indexed Reference")) context.tree.insert(context.parent, tk.END, text="Reference", values=(f"{self.reference}",)) context.push(context.tree.insert(context.parent, tk.END, text="Index")) self.index.generate(context) context.pop() context.pop()
[docs] def type_conv(self: behav.TypeConv, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Type Conv")) context.tree.insert(context.parent, tk.END, text="Type", values=(self.data_type,)) context.tree.insert(context.parent, tk.END, text="Size", values=(self.size,)) context.push(context.tree.insert(context.parent, tk.END, text="Expr")) self.expr.generate(context) context.pop() context.pop()
[docs] def callable_(self: behav.Callable, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Callable", values=(self.ref_or_name.name,))) for arg, arg_descr in zip(self.args, self.ref_or_name.args): context.push(context.tree.insert(context.parent, tk.END, text="Arg", values=(arg_descr,))) arg.generate(context) context.pop() context.pop()
[docs] def group(self: behav.Group, context: "TreeGenContext"): context.push(context.tree.insert(context.parent, tk.END, text="Group")) context.push(context.tree.insert(context.parent, tk.END, text="Expr")) self.expr.generate(context) context.pop() context.pop()