m2isar.metamodel.utils.ExprMutator ================================== .. py:module:: m2isar.metamodel.utils.ExprMutator .. autoapi-nested-parse:: A helper module for applying all expression visitor functions in this package to functions and instructions to get rid of monkey patching and use instead polymorphism. Classes ------- .. autoapisummary:: m2isar.metamodel.utils.ExprMutator.ExprMutator Module Contents --------------- .. py:class:: ExprMutator Bases: :py:obj:`abc.ABC` .. autoapi-inheritance-diagram:: m2isar.metamodel.utils.ExprMutator.ExprMutator :parts: 1 :private-bases: Base class for recursive metamodel traversal with 2 modes: - Generating text by appending context while traversing AST. - Analyzing/Mutating the AST (sometimes with the help of a context) and returning a modified AST. To implement a new mutator, overload the 'generate' method of nodes that need altered visitation behavior. Use self for additonal global state information Use context for stack-based information that is only relevant for the current branch of the AST. .. py:method:: generate(expr: m2isar.metamodel.behav.BaseNode, context=None) :abstractmethod: .. py:method:: default_visit(expr: m2isar.metamodel.behav.BaseNode, context) :abstractmethod: .. py:method:: visit_codeliteral(expr: m2isar.metamodel.behav.CodeLiteral, context) .. py:method:: visit_operator(expr: m2isar.metamodel.behav.Operator, context) .. py:method:: visit_operation(expr: m2isar.metamodel.behav.Operation, context) .. py:method:: visit_block(expr: m2isar.metamodel.behav.Block, context) .. py:method:: visit_binary_operation(expr: m2isar.metamodel.behav.BinaryOperation, context) .. py:method:: visit_slice_operation(expr: m2isar.metamodel.behav.SliceOperation, context) .. py:method:: visit_concat_operation(expr: m2isar.metamodel.behav.ConcatOperation, context) .. py:method:: visit_number_literal(expr: m2isar.metamodel.behav.NumberLiteral, context) .. py:method:: visit_int_literal(expr: m2isar.metamodel.behav.IntLiteral, context) .. py:method:: visit_string_literal(expr: m2isar.metamodel.behav.StringLiteral, context) .. py:method:: visit_assignment(expr: m2isar.metamodel.behav.Assignment, context) .. py:method:: visit_conditional(expr: m2isar.metamodel.behav.Conditional, context) .. py:method:: visit_loop(expr: m2isar.metamodel.behav.Loop, context) .. py:method:: visit_ternary_operation(expr: m2isar.metamodel.behav.Ternary, context) .. py:method:: visit_return_operation(expr: m2isar.metamodel.behav.Return, context) .. py:method:: visit_unary_operation(expr: m2isar.metamodel.behav.UnaryOperation, context) .. py:method:: visit_scalar_definition(expr: m2isar.metamodel.behav.ScalarDefinition, context) .. py:method:: visit_break(expr: m2isar.metamodel.behav.Break, context) .. py:method:: visit_named_reference(expr: m2isar.metamodel.behav.NamedReference, context) .. py:method:: visit_indexed_reference(expr: m2isar.metamodel.behav.IndexedReference, context) .. py:method:: visit_type_conv(expr: m2isar.metamodel.behav.TypeConv, context) .. py:method:: visit_callable(expr: m2isar.metamodel.behav.Callable, context) .. py:method:: visit_procedure_call(expr: m2isar.metamodel.behav.Callable, context) .. py:method:: visit_group(expr: m2isar.metamodel.behav.Group, context)