From a288c7eb0c93c3efc653806dcf4402e1959c2301 Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 12:27:08 -0500 Subject: [PATCH 1/7] Job: 12009 Add more path data for INFO logs during action processing. --- .gitignore | 4 + bridgepoint/prebuild.py | 992 +++++++++++++++++++++------------------- setup.py | 2 +- xtuml/version.py | 2 +- 4 files changed, 527 insertions(+), 473 deletions(-) diff --git a/.gitignore b/.gitignore index 3032d6d..6aec546 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,7 @@ __xtuml_lextab.py __xtuml_parsetab.py __oal_lextab.py __oal_parsetab.py +build +dist +pyxtuml.egg-info +.history diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index baf8eac..c55fab5 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -49,17 +49,17 @@ def get_defining_component(pe_pe): ''' if pe_pe is None: return None - + if pe_pe.__class__.__name__ != 'PE_PE': pe_pe = xtuml.navigate_one(pe_pe).PE_PE[8001]() - - + + ep_pkg = xtuml.navigate_one(pe_pe).EP_PKG[8000]() if ep_pkg: return get_defining_component(ep_pkg) - + return xtuml.navigate_one(pe_pe).C_C[8003]() - + class Scope(object): @@ -69,60 +69,60 @@ def __init__(self, handle=None): class SymbolTable(object): - + def __init__(self): self.stack = list() - + def enter_scope(self, handle=None): s = Scope(handle) self.stack.append(s) - + return handle - + def leave_scope(self): s = self.stack.pop() return s.handle - - @property + + @property def scope(self): return self.stack[-1].handle - + def find_symbol(self, name=None, kind=None): ''' Find a symbol in the symbol table by name, kind, or both. ''' for s in reversed(self.stack): - + for symbol_name, handle in s.symbols.items(): symbol_kind = handle.__class__.__name__ - + if name == symbol_name and kind == symbol_kind: return handle - + elif name is None and kind == handle.__class__.__name__: return handle - + elif name == symbol_name and kind is None: return handle - + if name is None and kind == s.handle.__class__.__name__: return s.handle - + def install_symbol(self, name, handle): self.stack[-1].symbols[name] = handle - + class ConstantEvalutation(xtuml.tools.Walker): ''' Simple walker for evaluating constant expressions expressed on ooaofooa. ''' - + def accept_V_VAL(self, inst): return self.accept(subtype(inst, 801)) - + def accept_V_LIN(self, inst): return int(inst.Value) - + def accept_V_BIN(self, inst): ops = { '+': lambda lhs, rhs: (lhs + rhs), @@ -133,9 +133,9 @@ def accept_V_BIN(self, inst): lhs = self.accept(one(inst).V_VAL[802]()) rhs = self.accept(one(inst).V_VAL[803]()) - + return ops[inst.Operator](lhs, rhs) - + def accept_V_UNY(self, inst): ops = { '+': lambda val: val, @@ -143,9 +143,9 @@ def accept_V_UNY(self, inst): } value = self.accept(one(inst).V_VAL[804]()) - + return ops[inst.Operator](value) - + def default_accept(self, node): logger.error('Unable to evaluate constant expression (%s)', node.__class__.__name__) @@ -154,7 +154,7 @@ def default_accept(self, node): def eval_constant_expression(v_val): ''' - Evaluate a constant expression, e.g. for constant folding or for + Evaluate a constant expression, e.g. for constant folding or for calculating array sizes at compile-time. ''' w = ConstantEvalutation() @@ -166,54 +166,54 @@ class ActionPrebuilder(xtuml.tools.Walker): m = None c_c = None symtab = None - + def __init__(self, metamodel, c_c=None): self.m = metamodel self.c_c = c_c self.symtab = SymbolTable() self.is_lvalue = False self.pe_pe_cache = xtuml.QuerySet() - + scope_filt = lambda sel: (ooaofooa.is_contained_in(sel, self.c_c) or - ooaofooa.is_global(sel)) - + ooaofooa.is_global(sel)) + self.pe_pe_cache |= self.m.select_many('PE_PE', scope_filt) - - xtuml.tools.Walker.__init__(self) + + xtuml.tools.Walker.__init__(self) def any(self, key_letter, where_clause=None): return self.m.select_any(key_letter, where_clause) - + def one(self, key_letter, where_clause=None): return self.m.select_one(key_letter, where_clause) - + def many(self, key_letter, where_clause=None): return self.m.select_many(key_letter, where_clause) - + def new(self, *args, **kwargs): return self.m.new(*args, **kwargs) - - def o_obj(self, key_letter): + + def o_obj(self, key_letter): return one(self.pe_pe_cache).O_OBJ[8001](where(Key_Lett=key_letter)) - + def s_sync(self, action_name): return one(self.pe_pe_cache).S_SYNC[8001](where(Name=action_name)) - + def s_ee(self, key_letter): return one(self.pe_pe_cache).S_EE[8001](where(Key_Lett=key_letter)) - + def r_rel(self, rel_id): where_clause = lambda sel: 'r%d' % sel.Numb == rel_id.lower() return self.any('R_REL', where_clause) - + def cnst_syc(self, name): where_clause = lambda sel:(ooaofooa.is_contained_in(sel, self.c_c) or - ooaofooa.is_global(sel)) - + ooaofooa.is_global(sel)) + cnst_csp = self.many('CNST_CSP', where_clause) return one(cnst_csp).CNST_SYC[1504](where(Name=name)) - + def v_val(self, node, **kwargs): act_blk = self.symtab.find_symbol(kind='ACT_BLK') v_val = self.new('V_VAL', @@ -221,11 +221,11 @@ def v_val(self, node, **kwargs): StartPosition=node.position.start_column, EndPosition=node.position.end_column, **kwargs) - + relate(v_val, act_blk, 826) - + return v_val - + def v_var(self, node, **kwargs): act_blk = self.symtab.find_symbol(kind='ACT_BLK') v_var = self.new('V_VAR', **kwargs) @@ -233,108 +233,108 @@ def v_var(self, node, **kwargs): LineNumber=node.position.start_line, StartPosition=node.position.start_column, EndPosition=node.position.end_column) - + relate(v_var, act_blk, 823) relate(v_var, v_loc, 835) - + return v_var - + def v_int(self, node, name, o_obj): s_irdt = one(o_obj).S_IRDT[123](lambda sel: not sel.isSet) s_dt = one(s_irdt).S_DT[17]() or self.s_dt('inst_ref') v_var = self.v_var(node, Name=name) v_int = self.new('V_INT') # TODO: V_INT.IsImplicitInFor - + relate(v_var, s_dt, 848) relate(v_var, v_int, 814) relate(o_obj, v_int, 818) - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_int - + def v_ins(self, node, name, o_obj): s_irdt = one(o_obj).S_IRDT[123](lambda sel: sel.isSet) s_dt = one(s_irdt).S_DT[17]() or self.s_dt('inst_ref_set') v_var = self.v_var(node, Name=name) v_ins = self.new('V_INS') - + relate(v_var, s_dt, 848) relate(v_var, v_ins, 814) relate(o_obj, v_ins, 819) - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_ins - + def v_trn(self, node, name): v_var = self.v_var(node, Name=name) v_trn = self.new('V_TRN') - + relate(v_var, v_trn, 814) # NOTE: V_TRN data type is related when assigned a value - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_trn - + def v_isr(self, node, name): v_var = self.find_symbol(node, name) s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_isr = self.new('V_ISR') - + relate(v_isr, v_val, 801) relate(v_isr, v_var, 809) relate(v_val, s_dt, 820) - + return v_isr - + def v_irf(self, node, name): v_var = self.find_symbol(node, name) s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_irf = self.new('V_IRF') - + relate(v_irf, v_val, 801) relate(v_irf, v_var, 808) relate(v_val, s_dt, 820) - + return v_irf def v_avl(self, node, o_attr, root_v_val): s_dt = (one(o_attr).O_RATTR[106].O_BATTR[113].O_ATTR[106].S_DT[114]() or one(o_attr).S_DT[114]()) - + v_val = self.v_val(node) v_avl = self.new('V_AVL') - + relate(v_val, s_dt, 820) relate(v_avl, v_val, 801) relate(v_avl, root_v_val, 807) relate(v_avl, o_attr, 806) - + return v_avl - + def v_mvl(self, node, s_mbr, root_v_val): v_val = self.v_val(node) s_dt = one(s_mbr).S_DT[45]() - + v_mvl = self.new('V_MVL') - + relate(v_val, s_dt, 820) relate(v_mvl, v_val, 801) relate(v_mvl, root_v_val, 837) relate(v_mvl, s_mbr, 836) - + return v_mvl - + def e_gsme(self, node, sm_evt): act_smt = self.act_smt(node) - + e_ess = self.new('E_ESS') e_ges = self.new('E_GES') e_gsme = self.new('E_GSME') @@ -346,16 +346,16 @@ def e_gsme(self, node, sm_evt): for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return e_gsme - + def e_csme(self, node, sm_evt, v_var, implicit): act_smt = self.act_smt(node) - + e_ess = self.new('E_ESS') e_ces = self.new('E_CES', is_implicit=implicit) e_csme = self.new('E_CSME') - + relate(act_smt, e_ess, 603) relate(e_ess, e_ces, 701) relate(e_ces, e_csme, 702) @@ -364,32 +364,32 @@ def e_csme(self, node, sm_evt, v_var, implicit): for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return e_csme - + def act_smt(self, node): act_blk = self.symtab.find_symbol(kind='ACT_BLK') act_smt = self.new('ACT_SMT') - + act_smt.LineNumber = node.position.start_line act_smt.StartPosition = node.position.start_column act_smt.EndPosition = node.position.end_column act_smt.Label = node.character_stream - + relate(act_blk, act_smt, 602) - + return act_smt - + def act_sel(self, node): act_smt = self.act_smt(node) act_lnk = act_lnk_start = act_lnk_end = self.accept(node.navigation_chain) - + while act_lnk: act_lnk_end = act_lnk act_lnk = one(act_lnk).ACT_LNK[604, 'precedes']() - + v_val = self.accept(node.handle) - + # resulting variable v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -401,21 +401,21 @@ def act_sel(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_sel = self.new('ACT_SEL', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_sel, act_smt, 603) relate(act_sel, act_lnk_start, 637) relate(act_sel, v_val, 613) relate(act_sel, v_var, 638) - + return act_sel - + def s_dt(self, name): return self.any('S_DT', where(Name=name)) - + def find_symbol(self, node, name): # TODO: introduce a new keyword SENDER, and SenderAccessNode? v_var = self.symtab.find_symbol(name) @@ -424,115 +424,115 @@ def find_symbol(self, node, name): v_var = one(v_trn).V_VAR[814]() s_dt = self.s_dt('component_ref') relate(v_var, s_dt, 848) - + return v_var - + def default_accept(self, node, **kwargs): sys.stderr.write(node.__class__.__name__ + '\n') - + def accept_BodyNode(self, node): act_blk = self.new('ACT_BLK') relate(act_blk, self.act_act, 666) relate(act_blk, self.act_act, 601) - + self.symtab.enter_scope(act_blk) self.accept(node.block.statement_list) self.symtab.leave_scope() - + return self.act_act - + def accept_BlockNode(self, node): act_blk = self.new('ACT_BLK') - + relate(act_blk, self.act_act, 601) - + self.symtab.enter_scope(act_blk) self.accept(node.statement_list) self.symtab.leave_scope() - + return act_blk - + def accept_StatementListNode(self, node): prev = None for child in node.children: act_smt = self.accept(child) xtuml.relate(prev, act_smt, 661, 'succeeds') prev = act_smt - + def accept_ReturnNode(self, node): act_smt = self.act_smt(node) act_ret = self.new('ACT_RET') v_val = self.accept(node.expression) - + relate(act_ret, act_smt, 603) xtuml.relate(act_ret, v_val, 668) - + return act_smt def accept_BreakNode(self, node): act_smt = self.act_smt(node) act_brk = self.new('ACT_BRK') - + relate(act_brk, act_smt, 603) - + return act_smt - + def accept_ContinueNode(self, node): act_smt = self.act_smt(node) act_con = self.new('ACT_CON') - + relate(act_con, act_smt, 603) - + return act_smt - + def accept_ControlNode(self, node): act_smt = self.act_smt(node) act_ctl = self.new('ACT_CTL') - + relate(act_ctl, act_smt, 603) - + return act_smt - + def accept_CreateObjectNode(self, node): act_smt = self.act_smt(node) o_obj = self.o_obj(node.key_letter) v_var = self.find_symbol(node, node.variable_name) - + implicit = v_var is None if implicit: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_cr = self.new('ACT_CR', is_implicit=implicit) - + relate(act_cr, act_smt, 603) relate(act_cr, v_var, 633) relate(act_cr, o_obj, 671) - + return act_smt - + def accept_CreateObjectNoVariableNode(self, node): act_smt = self.act_smt(node) o_obj = self.o_obj(node.key_letter) act_cnv = self.new('ACT_CNV') - + relate(act_cnv, act_smt, 603) relate(act_cnv, o_obj, 672) - + return act_smt - + def accept_DeleteNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) - + act_del = self.new('ACT_DEL') - + relate(act_del, act_smt, 603) relate(act_del, v_var, 634) - + return act_smt - + def accept_RelateNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) @@ -540,14 +540,14 @@ def accept_RelateNode(self, node): r_rel = self.r_rel(node.rel_id) act_rel = self.new('ACT_REL', relationship_phrase=node.phrase) - + relate(act_rel, act_smt, 603) relate(act_rel, v_var_from, 615) relate(act_rel, v_var_to, 616) relate(act_rel, r_rel, 653) - + return act_smt - + def accept_RelateUsingNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) @@ -556,47 +556,47 @@ def accept_RelateUsingNode(self, node): r_rel = self.r_rel(node.rel_id) act_ru = self.new('ACT_RU', relationship_phrase=node.phrase) - + relate(act_ru, act_smt, 603) relate(act_ru, v_var_from, 617) relate(act_ru, v_var_to, 618) relate(act_ru, v_var_using, 619) relate(act_ru, r_rel, 654) - + return act_smt - + def accept_UnrelateNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) v_var_to = self.find_symbol(node, node.to_variable_name) r_rel = self.r_rel(node.rel_id) - + act_unr = self.new('ACT_UNR', relationship_phrase=node.phrase) - + relate(act_unr, act_smt, 603) relate(act_unr, v_var_from, 620) relate(act_unr, v_var_to, 621) relate(act_unr, r_rel, 655) - + return act_smt - + def accept_UnrelateUsingNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) v_var_to = self.find_symbol(node, node.to_variable_name) v_var_using = self.find_symbol(node, node.using_variable_name) r_rel = self.r_rel(node.rel_id) - + act_uru = self.new('ACT_URU', relationship_phrase=node.phrase) - + relate(act_uru, act_smt, 603) relate(act_uru, v_var_from, 622) relate(act_uru, v_var_to, 623) relate(act_uru, v_var_using, 624) relate(act_uru, r_rel, 656) - + return act_smt - + def accept_SelectFromNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) @@ -610,26 +610,26 @@ def accept_SelectFromNode(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_fio = self.new('ACT_FIO', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_fio, act_smt, 603) relate(act_fio, v_var, 639) relate(act_fio, o_obj, 677) - + return act_smt - + def accept_SelectFromWhereNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) o_obj = self.o_obj(node.key_letter) - + self.symtab.enter_scope(o_obj) v_val = self.accept(node.where_clause) self.symtab.leave_scope() - + implicit = v_var is None if implicit: if node.many: @@ -638,26 +638,26 @@ def accept_SelectFromWhereNode(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_fiw = self.new('ACT_FIW', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_fiw, act_smt, 603) relate(act_fiw, v_var, 665) relate(act_fiw, o_obj, 676) relate(act_fiw, v_val, 610) - + return act_smt - + def accept_SelectRelatedNode(self, node): act_sel = self.act_sel(node) act_sr = self.new('ACT_SR') - + relate(act_sr, act_sel, 664) - + return one(act_sel).ACT_SMT[603]() - + def accept_SelectRelatedWhereNode(self, node): act_sel = self.act_sel(node) o_obj = (one(act_sel).V_VAR[638].V_INT[814].O_OBJ[818]() or @@ -665,33 +665,33 @@ def accept_SelectRelatedWhereNode(self, node): act_srw = self.new('ACT_SRW') self.symtab.enter_scope(o_obj) - v_val = self.accept(node.where_clause) + v_val = self.accept(node.where_clause) self.symtab.leave_scope() - + relate(act_srw, act_sel, 664) relate(act_srw, v_val, 611) - + return one(act_sel).ACT_SMT[603]() - + def accept_NavigationListNode(self, node): prev = None for child in reversed(node.children): act_lnk = self.accept(child) xtuml.relate(prev, act_lnk, 604, 'succeeds') prev = act_lnk - + return prev - + def accept_NavigationStepNode(self, node): r_rel = self.r_rel(node.rel_id) o_obj = self.o_obj(node.key_letter) - + # TODO: set the Multiplicity correctly act_lnk = self.new('ACT_LNK', Mult=2, Rel_Phrase=node.phrase) - + relate(act_lnk, r_rel, 681) relate(act_lnk, o_obj, 678) - + return act_lnk def accept_ForEachNode(self, node): @@ -705,77 +705,77 @@ def accept_ForEachNode(self, node): if implicit: v_int = self.v_int(node, node.instance_variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_blk = self.accept(node.block) act_for = self.new('ACT_FOR', is_implicit=implicit) - + relate(act_for, act_smt, 603) relate(act_for, act_blk, 605) relate(act_for, v_var, 614) relate(act_for, v_var_set, 652) relate(act_for, o_obj, 670) - + return act_smt - + def accept_IfNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_if = self.new('ACT_IF') - + relate(act_if, act_smt, 603) relate(act_if, act_blk, 607) relate(act_if, v_val, 625) - + self.accept(node.elif_list, act_if=act_if) self.accept(node.else_clause, act_if=act_if) return act_smt - + def accept_ElIfListNode(self, node, act_if=None): for child in node.children: self.accept(child, act_if=act_if) - + def accept_ElIfNode(self, node, act_if): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_el = self.new('ACT_EL') - + relate(act_el, act_smt, 603) relate(act_el, act_blk, 658) relate(act_el, v_val, 659) relate(act_el, act_if, 682) - + return act_smt - + def accept_ElseNode(self, node, act_if): act_smt = self.act_smt(node) act_blk = self.accept(node.block) - + act_e = self.new('ACT_E') - + relate(act_e, act_smt, 603) relate(act_e, act_blk, 606) relate(act_e, act_if, 683) - + return act_smt - + def accept_WhileNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_whl = self.new('ACT_WHL') - + relate(act_whl, act_smt, 603) relate(act_whl, act_blk, 608) relate(act_whl, v_val, 626) - + return act_smt - + def accept_AssignmentNode(self, node): act_smt = self.act_smt(node) v_val_r = self.accept(node.expression) @@ -783,7 +783,7 @@ def accept_AssignmentNode(self, node): v_val_l = self.accept(node.variable_access) v_val_l.isLValue = True self.is_lvalue = False - + # Set the type of implicitly defined variables v_tvl = one(v_val_l).V_TVL[801]() v_aer = one(v_val_l).V_AER[801]() @@ -805,78 +805,78 @@ def accept_AssignmentNode(self, node): s_dt = one(v_val_r).S_DT[820]() relate(v_var, s_dt, 848) relate(v_val_l, s_dt, 820) - + for idx, v_aer in enumerate(reversed(v_aer_list)): v_val_index = one(v_aer).V_VAL[839]() element_count = eval_constant_expression(v_val_index) + 1 s_dim = self.new('S_DIM', elementCount=element_count, dimensionCount=idx) relate(v_var, s_dim, 849) - + v_trn = one(v_var).V_TRN[814]() v_irf = one(v_val_r).V_IRF[801]() v_isr = one(v_val_r).V_ISR[801]() s_irdt = one(s_dt).S_IRDT[17]() - + # migrate Transient Variable (V_TRN) to Instance Handle (V_INT) def migrate_instance(o_obj): v_int = self.new('V_INT') relate(o_obj, v_int, 818) - + unrelate(v_var, v_trn, 814) relate(v_var, v_int, 814) xtuml.delete(v_trn) - + v_irf = self.m.new('V_IRF') - + unrelate(v_val_l, v_tvl, 801) relate(v_val_l, v_irf, 801) - + unrelate(v_var, v_tvl, 805) relate(v_var, v_irf, 808) xtuml.delete(v_tvl) - + # migrate Transient Variable (V_TRN) to Instance Set (V_INS) def migrate_instance_set(o_obj): v_ins = self.new('V_INS') relate(o_obj, v_ins, 819) - + unrelate(v_var, v_trn, 814) relate(v_var, v_ins, 814) xtuml.delete(v_trn) - + v_isr = self.m.new('V_ISR') - + unrelate(v_val_l, v_tvl, 801) relate(v_val_l, v_isr, 801) - + unrelate(v_var, v_tvl, 805) relate(v_var, v_isr, 809) - + xtuml.delete(v_tvl) - + if v_trn and s_irdt: o_obj = one(s_irdt).O_OBJ[123]() if s_irdt.isSet: migrate_instance_set(o_obj) else: migrate_instance(o_obj) - + elif v_trn and v_irf: o_obj = one(v_irf).V_VAR[808].V_INT[814].O_OBJ[818]() migrate_instance(o_obj) - + elif v_trn and v_isr: o_obj = one(v_isr).V_VAR[809].V_INS[814].O_OBJ[819]() migrate_instance_set(o_obj) - + act_ai = self.new('ACT_AI') relate(act_ai, act_smt, 603) relate(act_ai, v_val_r, 609) relate(act_ai, v_val_l, 689) - + return act_smt - + def accept_FieldAccessNode(self, node): root_v_val = self.accept(node.handle) inst = subtype(root_v_val, 801) @@ -885,7 +885,7 @@ def accept_FieldAccessNode(self, node): s_dt = one(root_v_val).S_DT[820]() while one(s_dt).S_UDT[17](): s_dt = one(s_dt).S_UDT[17].S_DT[18]() - + if one(s_dt).S_IRDT[17](): o_obj = one(s_dt).S_IRDT[17].O_OBJ[123]() o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) @@ -897,68 +897,68 @@ def accept_FieldAccessNode(self, node): o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) v_avl = self.v_avl(node, o_attr, root_v_val) return one(v_avl).V_VAL[801]() - + elif kind == 'V_IRF': o_obj = one(inst).V_VAR[808].V_INT[814].O_OBJ[818]() o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) v_avl = self.v_avl(node, o_attr, root_v_val) return one(v_avl).V_VAL[801]() - + else: s_mbr = one(s_dt).S_SDT[17].S_MBR[44](where(Name=node.name)) if s_mbr: v_mvl = self.v_mvl(node, s_mbr, root_v_val) return one(v_mvl).V_VAL[801]() - + # Assume its an array.length access if node.name == 'length': v_val = self.v_val(node) s_dt = self.s_dt('integer') v_alv = self.new('V_ALV') - + relate(v_val, s_dt, 820) relate(v_val, v_alv, 801) relate(v_alv, root_v_val, 840) - + return v_val - + def accept_IndexAccessNode(self, node): v_val_root = self.accept(node.handle) v_val_index = self.accept(node.expression) s_dt = one(v_val_root).S_DT[820]() v_val = self.v_val(node) v_aer = self.new('V_AER') - + if s_dt: relate(v_val, s_dt, 820) - + relate(v_aer, v_val, 801) relate(v_aer, v_val_root, 838) relate(v_aer, v_val_index, 839) - + return v_val - + def accept_SelectedAccessNode(self, node): s_dt = self.s_dt('inst_ref') v_val = self.v_val(node) v_slr = self.new('V_SLR') - + relate(v_val, s_dt, 820) relate(v_val, v_slr, 801) - + return v_val - + def accept_SelfAccessNode(self, node): v_var = self.find_symbol(node, 'self') s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) - + v_irf = self.new('V_IRF') relate(v_val, s_dt, 820) relate(v_val, v_irf, 801) relate(v_var, v_irf, 808) - + return v_val def accept_VariableAccessNode(self, node): @@ -977,31 +977,31 @@ def accept_VariableAccessNode(self, node): v_var = one(v_trn).V_VAR[814]() v_val = self.v_val(node, isImplicit=True) v_tvl = self.new('V_TVL') - + relate(v_tvl, v_val, 801) relate(v_tvl, v_var, 805) else: raise Exception("Unknown transient '%s'" % node.variable_name) - + elif one(v_var).V_INT[814](): v_irf = self.v_irf(node, node.variable_name) v_val = one(v_irf).V_VAL[801]() - + elif one(v_var).V_INS[814](): v_isr = self.v_isr(node, node.variable_name) v_val = one(v_isr).V_VAL[801]() - + elif one(v_var).V_TRN[814](): s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_tvl = self.new('V_TVL') - + relate(v_tvl, v_val, 801) relate(v_val, s_dt, 820) relate(v_tvl, v_var, 805) - + return v_val - + def accept_BinaryOperationNode(self, node): # TODO: coersion and/or casting of binops?? # Perhaps that is up the the model compiler??? @@ -1024,79 +1024,79 @@ def accept_BinaryOperationNode(self, node): # default: cast to left type else: s_dt = s_dt_l - + v_val = self.v_val(node) v_bin = self.new('V_BIN', Operator=operator) - + relate(v_val, s_dt, 820) relate(v_bin, v_val, 801) relate(v_bin, v_val_l, 802) relate(v_bin, v_val_r, 803) - + return v_val - + def accept_UnaryOperationNode(self, node): v_val_op = self.accept(node.operand) operator = node.operator.lower() - + if operator in ['not', 'empty', 'not_empty']: s_dt = self.s_dt('boolean') - + elif operator == 'cardinality': s_dt = self.s_dt('integer') - + else: s_dt = one(v_val_op).S_DT[820]() - + v_val = self.v_val(node) v_uny = self.new('V_UNY', Operator=node.operator.lower()) - + relate(v_val, s_dt, 820) relate(v_uny, v_val, 801) relate(v_uny, v_val_op, 804) - + return v_val - + def accept_BooleanNode(self, node): s_dt = self.s_dt('boolean') v_val = self.v_val(node) v_lbo = self.new('V_LBO', Value=str(node.value).upper()) - + relate(v_val, s_dt, 820) relate(v_lbo, v_val, 801) - + return v_val - + def accept_IntegerNode(self, node): s_dt = self.s_dt('integer') v_val = self.v_val(node) v_lin = self.new('V_LIN', Value=node.value) - + relate(v_val, s_dt, 820) relate(v_lin, v_val, 801) - + return v_val - + def accept_RealNode(self, node): s_dt = self.s_dt('real') v_val = self.v_val(node,) v_lrl = self.new('V_LRL', Value=node.value) - + relate(v_val, s_dt, 820) relate(v_lrl, v_val, 801) - + return v_val - + def accept_StringNode(self, node): s_dt = self.s_dt('string') v_val = self.v_val(node) v_lst = self.new('V_LST', Value=node.value[1:-1]) - + relate(v_val, s_dt, 820) relate(v_lst, v_val, 801) - + return v_val - + def accept_EnumOrNamedConstantNode(self, node): s_dt = self.s_dt(node.namespace) while one(s_dt).S_UDT[17](): @@ -1105,11 +1105,11 @@ def accept_EnumOrNamedConstantNode(self, node): s_enum = one(s_dt).S_EDT[17].S_ENUM[27](where(name=node.name)) cnst_csp = self.any('CNST_CSP', where(InformalGroupName=node.namespace)) cnst_syc = one(cnst_csp).CNST_SYC[1504](where(Name=node.name)) - + if s_enum: v_val = self.v_val(node) v_len = self.new('V_LEN') - + relate(v_val, s_dt, 820) relate(v_len, v_val, 801) relate(v_len, s_enum, 824) @@ -1118,25 +1118,25 @@ def accept_EnumOrNamedConstantNode(self, node): s_dt = one(cnst_syc).S_DT[1500]() v_val = self.v_val(node) v_scv = self.new('V_SCV') - + relate(v_val, v_scv, 801) relate(v_val, s_dt, 820) relate(v_scv, cnst_syc, 850) else: raise Exception("Unknown identifier '%s::%s'" % (node.namespace, node.name)) - + return v_val - + def accept_GenerateClassEventNode(self, node): act_smt = self.act_smt(node) - + evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') - + sel.Drv_Lbl == node.event_specification.identifier + '*') + o_obj = self.o_obj(node.key_letter) sm_evt = one(o_obj).SM_ASM[519].SM_SM[517].SM_EVT[502](evt_filter) - + e_ess = self.new('E_ESS') e_ges = self.new('E_GES') e_gsme = self.new('E_GSME') @@ -1146,39 +1146,39 @@ def accept_GenerateClassEventNode(self, node): relate(e_ess, e_ges, 701) relate(e_ges, e_gsme, 703) relate(e_gsme, e_gar, 705) - relate(e_gsme, sm_evt, 707) - + relate(e_gsme, sm_evt, 707) + for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return act_smt - + def accept_GenerateCreatorEventNode(self, node): o_obj = self.o_obj(node.key_letter) evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) - + e_gsme = self.e_gsme(node, sm_evt) e_gec = self.new('E_GEC') relate(e_gsme, e_gec, 705) - + return one(e_gsme).E_GES[703].E_ESS[701].ACT_SMT[603]() - + def accept_GenerateInstanceEventNode(self, node): v_var = self.find_symbol(node, name=node.variable_access.variable_name) o_obj = one(v_var).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') - + sel.Drv_Lbl == node.event_specification.identifier + '*') + sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) e_gsme = self.e_gsme(node, sm_evt) e_gen = self.new('E_GEN') relate(e_gsme, e_gen, 705) relate(e_gen, v_var, 712) - + return one(e_gsme).E_GES[703].E_ESS[701].ACT_SMT[603]() def accept_CreateInstanceEventNode(self, node): @@ -1189,21 +1189,21 @@ def accept_CreateInstanceEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - - v_var_to = self.find_symbol(node, name=node.to_variable_access.variable_name) + + v_var_to = self.find_symbol(node, name=node.to_variable_access.variable_name) o_obj = one(v_var_to).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_eci = self.new('E_CEI') - + relate(e_csme, e_eci, 704) relate(e_eci, v_var_to, 711) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() - + def accept_CreateCreatorEventNode(self, node): v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -1212,19 +1212,19 @@ def accept_CreateCreatorEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - + o_obj = self.o_obj(node.key_letter) evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) - + e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_cec = self.new('E_CEC') relate(e_csme, e_cec, 704) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() - + def accept_CreateClassEventNode(self, node): v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -1233,17 +1233,17 @@ def accept_CreateClassEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - + o_obj = self.o_obj(node.key_letter) - evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ASM[519].SM_SM[517].SM_EVT[502](evt_filter) - + e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_cea = self.new('E_CEA') relate(e_csme, e_cea, 704) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() def accept_EventDataListNode(self, node): @@ -1253,43 +1253,43 @@ def accept_EventDataListNode(self, node): xtuml.relate(prev, v_par, 816, 'succeeds') prev = v_par yield v_par - + def accept_EventDataItemNode(self, node): v_val = self.accept(node.expression) v_par = self.new('V_PAR', Name=node.name) - + relate(v_val, v_par, 800) - + return v_par def accept_GeneratePreexistingNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.variable_access) - + e_gpr = self.new('E_GPR') - + relate(e_gpr, act_smt, 603) relate(e_gpr, v_val, 714) - + return act_smt - + def accept_InvocationStatementNode(self, node): act_smt = self.act_smt(node) - + self.accept(node.invocation, act_smt=act_smt) return act_smt - + def accept_ImplicitInvocationNode(self, node, act_smt=None): if self.s_ee(node.namespace): return self.accept_BridgeInvocationNode(node, act_smt=act_smt) - + elif self.o_obj(node.namespace): return self.accept_ClassInvocationNode(node, act_smt=act_smt) else: return self.accept_PortInvocationNode(node, act_smt=act_smt) - + def accept_InstanceInvocationNode(self, node, act_smt=None): inst_v_val = self.accept(node.handle) v_var = one(inst_v_val).V_IRF[801].V_VAR[808]() @@ -1298,81 +1298,81 @@ def accept_InstanceInvocationNode(self, node, act_smt=None): s_dt = one(o_tfr).S_DT[116]() v_val = self.v_val(node) v_trv = self.new('V_TRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_trv, v_val, 801) relate(v_trv, o_tfr, 829) relate(v_trv, v_var, 830) - + if act_smt: act_tfm = self.new('ACT_TFM') relate(act_tfm, act_smt, 603) relate(act_tfm, o_tfr, 673) relate(act_tfm, v_var, 667) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_ClassInvocationNode(self, node, act_smt=None): o_obj = self.o_obj(node.namespace) o_tfr = one(o_obj).O_TFR[115](where(Name=node.action_name)) s_dt = one(o_tfr).S_DT[116]() v_val = self.v_val(node) v_trv = self.new('V_TRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_trv, v_val, 801) relate(v_trv, o_tfr, 829) - + if act_smt: act_tfm = self.new('ACT_TFM') relate(act_tfm, act_smt, 603) relate(act_tfm, o_tfr, 673) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_BridgeInvocationNode(self, node, act_smt=None): s_ee = self.s_ee(node.namespace) s_brg = one(s_ee).S_BRG[19](where(Name=node.action_name)) s_dt = one(s_brg).S_DT[20]() v_val = self.v_val(node) v_brv = self.new('V_BRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_val, v_brv, 801) relate(v_brv, s_brg, 828) - + if act_smt: act_brg = self.new('ACT_BRG') relate(act_brg, act_smt, 603) relate(act_brg, s_brg, 674) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_FunctionInvocationNode(self, node, act_smt=None): s_sync = self.s_sync(node.action_name) s_dt = one(s_sync).S_DT[25]() v_val = self.v_val(node) v_fnv = self.new('V_FNV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_fnv, v_val, 801) relate(v_fnv, s_sync, 827) - + if act_smt: act_fnc = self.new('ACT_FNC') relate(act_fnc, act_smt, 603) relate(act_fnc, s_sync, 675) self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_PortInvocationNode(self, node, act_smt=None): port_filt = lambda sel: (sel.Name == node.namespace or one(sel).C_IR[4016].C_I[4012](where(Name=node.namespace))) @@ -1386,47 +1386,47 @@ def accept_PortInvocationNode(self, node, act_smt=None): spr_po = one(spr_pep).SPR_PO[4503]() spr_ps = one(spr_pep).SPR_PS[4503]() - + if act_smt: if spr_ro: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, RequiredOp_Id=spr_ro.Id) - + elif spr_po: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, ProvidedOp_Id=spr_po.Id) - + elif spr_rs: self.new('ACT_SGN', Statement_ID=act_smt.Statement_ID, RequiredSig_Id=spr_rs.Id) - + elif spr_ps: self.new('ACT_SGN', Statement_ID=act_smt.Statement_ID, ProvidedSig_Id=spr_ps.Id) - + c_io = one(c_ep).C_IO[4004]() v_val = None - + if spr_ro: v_val = self.v_val(node, DT_ID=c_io.DT_ID) self.new('V_MSV', Value_ID=v_val.Value_ID, REP_Id=spr_rep.Id, ParmListOK=True) - + if spr_po: v_val = self.v_val(node, DT_ID=c_io.DT_ID) self.new('V_MSV', Value_ID=v_val.Value_ID, PEP_Id=spr_pep.Id, ParmListOK=True) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val def accept_ParameterListNode(self, node, act_smt, v_val): @@ -1445,16 +1445,16 @@ def accept_ParameterListNode(self, node, act_smt, v_val): xtuml.relate(v_par, one(act_smt).ACT_IOP[603](), 679) xtuml.relate(v_par, one(act_smt).ACT_SGN[603](), 662) xtuml.relate(v_par, one(act_smt).E_ESS[603](), 700) - + prev_v_par = v_par - + def accept_ParameterNode(self, node): v_val = self.accept(node.expression) v_par = self.new('V_PAR', Name=node.name) relate(v_val, v_par, 800) - + return v_par - + def accept_GeneratePortEventNode(self, node): port_filt = lambda sel: (sel.Name == node.port_name or one(sel).C_IR[4016].C_I[4012](where(Name=node.port_name))) @@ -1471,33 +1471,36 @@ def accept_GeneratePortEventNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_sgn = self.new('ACT_SGN') - + relate(act_sgn, act_smt, 603) relate(act_sgn, v_val, 630) xtuml.relate(act_sgn, spr_rs, 660) xtuml.relate(act_sgn, spr_ps, 663) - + return act_smt - + class BridgePrebuilder(ActionPrebuilder): def __init__(self, metamodel, s_brg): self._s_brg = s_brg s_ee = one(s_brg).S_EE[19]() c_c = get_defining_component(s_ee) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) @property def label(self): s_ee = one(self._s_brg).S_EE[19]() - return '%s::%s' % (s_ee.Name, self._s_brg.Name) - + compName = "" + if self.c_c is not None: + compName = self.c_c.Name + "::" + return '%s%s::%s' % (compName, s_ee.Name, self._s_brg.Name) + def accept_BodyNode(self, node): act_brb = self.new('ACT_BRB') relate(act_brb, self._s_brg, 697) - + self.act_act = self.new('ACT_ACT', Type='bridge') relate(act_brb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1505,11 +1508,11 @@ def accept_ParamAccessNode(self, node): s_dt = one(s_bparm).S_DT[22]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, s_bparm, 831) relate(v_pvl, v_val, 801) - + return v_val @@ -1517,22 +1520,22 @@ class FunctionPrebuilder(ActionPrebuilder): def __init__(self, metamodel, s_sync): self._s_sync = s_sync c_c = get_defining_component(s_sync) - ActionPrebuilder.__init__(self, metamodel, c_c) - + ActionPrebuilder.__init__(self, metamodel, c_c) + @property def label(self): - return self._s_sync.Name - + return '%s::%s' % (self.c_c.Name, self._s_sync.Name) + def accept_BodyNode(self, node): act_fnb = self.new('ACT_FNB') relate(act_fnb, self._s_sync, 695) - + self.act_act = self.new('ACT_ACT', Type='function', Label=self.label) - + relate(act_fnb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1540,44 +1543,44 @@ def accept_ParamAccessNode(self, node): s_dt = one(s_sparm).S_DT[26]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, s_sparm, 832) relate(v_pvl, v_val, 801) - + return v_val class OperationPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, o_tfr): self._o_tfr = o_tfr self._o_obj = one(o_tfr).O_OBJ[115]() c_c = get_defining_component(self._o_obj) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) def find_symbol(self, node, name): v_var = ActionPrebuilder.find_symbol(self, node, name) if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var - + @property def label(self): - return '%s::%s' % (self._o_obj.Name, self._o_tfr.Name) - + return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, self._o_tfr.Name) + def accept_BodyNode(self, node): act_opb = self.new('ACT_OPB') relate(act_opb, self._o_tfr, 696) - + self.act_act = self.new('ACT_ACT', Type='operation', Label=self.label) - + relate(act_opb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1585,18 +1588,21 @@ def accept_ParamAccessNode(self, node): s_dt = one(o_tparm).S_DT[118]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(s_dt, v_val, 820) relate(v_pvl, o_tparm, 833) relate(v_pvl, v_val, 801) - + return v_val class TransitionPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, sm_act): self._sm_act = sm_act + self._assigned = one( + sm_act).SM_AH[514].SM_TAH[513].SM_TXN[530].SM_NSTXN[507].SM_SEME[504].SM_SEVT[503].SM_EVT[525]() + self._state = one(sm_act).SM_AH[514].SM_MOAH[513].SM_STATE[511]() self._o_obj = (one(sm_act).SM_SM[515].SM_ISM[517].O_OBJ[518]() or one(sm_act).SM_SM[515].SM_ASM[517].O_OBJ[519]()) c_c = get_defining_component(self._o_obj) @@ -1607,30 +1613,53 @@ def find_symbol(self, node, name): if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var - - @property + + def get_event_name(self, event): + nlevt = one(event).SM_SEVT[525].SM_NLEVT[526]() + if nlevt is not None: + poly = one(nlevt).SM_PEVT[527]() + if poly is not None: + if poly.SM_ID == nlevt.SM_ID: # if this is a local poly + return event.Drv_Lbl + ": " + event.Mning + else: + return event.Mning + "::" + poly.localClassName + else: + return event.Mning + "::Orphaned" + else: + signalEvt = one(event).SM_SEVT[525].SM_SGEVT[526]() + if signalEvt is not None: + return event.Drv_Lbl + else: + return event.Drv_Lbl + ": " + event.Mning + + @ property def label(self): - return '' - + actionOwnerName = "" + if self._assigned is not None: + actionOwnerName = self.get_event_name(self._assigned) + else: + actionOwnerName = self._state.Name + return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, actionOwnerName) + def accept_BodyNode(self, node): sm_moah = one(self._sm_act).SM_AH[514].SM_MOAH[513]() if sm_moah is not None: act_sab = self.new('ACT_SAB') relate(act_sab, self._sm_act, 691) - + self.act_act = self.new('ACT_ACT') - + relate(act_sab, self.act_act, 698) else: act_tab = self.new('ACT_TAB') relate(act_tab, self._sm_act, 688) - + self.act_act = self.new('ACT_ACT') - + relate(act_tab, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1641,15 +1670,15 @@ def accept_ParamAccessNode(self, node): one(sm_txn).SM_CRTXN[507].SM_LEVT[509].SM_SEVT[526].SM_EVT[525]()) sm_evt = one(sm_evt).SM_SEVT[525].SM_NLEVT[526].SM_PEVT[527].SM_EVT[525]() or sm_evt sm_evt_di = one(sm_evt).SM_EVTDI[532](filt) - + spr_pep = one(sm_evt).SM_SEVT[525].SM_SGEVT[526].SPR_PS[528].SPR_PEP[4503]() spr_rep = one(sm_evt).SM_SEVT[525].SM_SGEVT[526].SPR_RS[529].SPR_REP[4502]() c_pp = (one(spr_pep).C_EP[4501].C_PP[4006](filt) or one(spr_rep).C_EP[4500].C_PP[4006](filt)) - + s_dt = one(sm_evt_di).S_DT[524]() or one(c_pp).S_DT[4007]() - + v_val = self.v_val(node) v_edv = self.new('V_EDV') v_epr = self.new('V_EPR') @@ -1659,110 +1688,119 @@ def accept_ParamAccessNode(self, node): relate(v_epr, v_edv, 834) xtuml.relate(v_epr, sm_evt_di, 846) xtuml.relate(v_epr, c_pp, 847) - + return v_val - + class DerivedAttributePrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, o_dbattr): self._o_dbattr = o_dbattr self._o_obj = one(o_dbattr).O_BATTR[107].O_ATTR[106].O_OBJ[102]() c_c = get_defining_component(self._o_obj) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) def find_symbol(self, node, name): v_var = ActionPrebuilder.find_symbol(self, node, name) if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var - + @property def label(self): o_attr = one(self._o_dbattr).O_BATTR[107].O_ATTR[106]() - return '%s::%s' % (self._o_obj.Name, o_attr.Name) - + return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, o_attr.Name) + def accept_BodyNode(self, node): act_dab = self.new('ACT_DAB') relate(act_dab, self._o_dbattr, 693) - + self.act_act = self.new('ACT_ACT', Type='derived attribute', Label=self.label) - + relate(act_dab, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - - + + class RequiredOperationPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, spr_ro): self._spr_ro = spr_ro - c_c = one(spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) + c_c = one( + spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() + ActionPrebuilder.__init__(self, metamodel, c_c) - @property + @ property def label(self): - # interface = one(self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() - # port = one(self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016]() - # return '%s::%s::%s' % (port.Name, interface.Name, self._spr_ro.Name) - return '' - + interface = one( + self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() + port = one( + self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016]() + return '%s::%s::%s::%s' % (self.c_c, port.Name, interface.Name, self._spr_ro.Name) + def accept_BodyNode(self, node): act_rob = self.new('ACT_ROB') relate(act_rob, self._spr_ro, 685) - - self.act_act = self.new('ACT_ACT', Type='interface operation', Label=self.label) + + self.act_act = self.new( + 'ACT_ACT', Type='interface operation', Label=self.label) relate(act_rob, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - + def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_ro).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) + c_pp = one(self._spr_ro).SPR_REP[4502].C_EP[4500].C_PP[4006]( + where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val class RequiredSignalPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, spr_rs): self._spr_rs = spr_rs - c_c = one(spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) + c_c = one( + spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() + ActionPrebuilder.__init__(self, metamodel, c_c) - @property + @ property def label(self): - return '' - + interface = one( + self._spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() + port = one( + self._spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016]() + return '%s::%s::%s::%s' % (self.c_c, port.Name, interface.Name, self._spr_rs.Name) + def accept_BodyNode(self, node): act_rsb = self.new('ACT_RSB') relate(act_rsb, self._spr_rs, 684) - + self.act_act = self.new('ACT_ACT', Type='interface signal') relate(act_rsb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - + def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_rs).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) +c_pp = one(self._spr_rs).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val @@ -1771,34 +1809,37 @@ class ProvidedOperationPrebuilder(ActionPrebuilder): def __init__(self, metamodel, spr_po): self._spr_po = spr_po c_c = one(spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) - + ActionPrebuilder.__init__(self, metamodel, c_c) + @property def label(self): - # interface = one(self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() - # port = one(self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016]() - # return '%s::%s::%s' % (port.Name, interface.Name, self._spr_po.Name) - return '' - + interface = one( + self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() + port = one( + self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016]() + return '%s::%s::%s::%s' % (self.c_c.Name, port.Name, interface.Name, self._spr_po.Name) + def accept_BodyNode(self, node): act_pob = self.new('ACT_POB') relate(act_pob, self._spr_po, 687) - - self.act_act = self.new('ACT_ACT', Type='interface operation', Label=self.label) + + self.act_act = self.new( + 'ACT_ACT', Type='interface operation', Label=self.label) relate(act_pob, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_po).SPR_PEP[4503].C_EP[4501].C_PP[4006](where(Name=node.variable_name)) + c_pp = one(self._spr_po).SPR_PEP[4503].C_EP[4501].C_PP[4006]( + where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val @@ -1806,41 +1847,47 @@ class ProvidedSignalPrebuilder(ActionPrebuilder): def __init__(self, metamodel, spr_ps): self._spr_ps = spr_ps - c_c = one(spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) + c_c = one( + spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() + ActionPrebuilder.__init__(self, metamodel, c_c) - @property + @ property def label(self): - return '' - + interface = one( + self._spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() + port = one( + self._spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016]() + return '%s::%s::%s::%s' % (self.c_c.Name, port.Name, interface.Name, self._spr_ps.Name) + def accept_BodyNode(self, node): act_psb = self.new('ACT_PSB') relate(act_psb, self._spr_ps, 686) - + self.act_act = self.new('ACT_ACT', Type='interface signal') relate(act_psb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_ps).SPR_PEP[4503].C_EP[4501].C_PP[4006](where(Name=node.variable_name)) + c_pp = one(self._spr_ps).SPR_PEP[4503].C_EP[4501].C_PP[4006]( + where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val def prebuild_action(instance): ''' Transform textual OAL actions of an *instance* to instances in the ooaofooa - subsystems Value and Body. The provided *instance* must be an instance of + subsystems Value and Body. The provided *instance* must be an instance of one of the following classes: - + - S_SYNC - S_BRG - O_TFR @@ -1852,29 +1899,32 @@ def prebuild_action(instance): - SPR_PS ''' walker_map = { - 'S_SYNC': FunctionPrebuilder, - 'S_BRG': BridgePrebuilder, - 'O_TFR': OperationPrebuilder, - 'O_DBATTR': DerivedAttributePrebuilder, - 'SM_ACT': TransitionPrebuilder, - 'SPR_RO': RequiredOperationPrebuilder, - 'SPR_RS': RequiredSignalPrebuilder, - 'SPR_PO': ProvidedOperationPrebuilder, - 'SPR_PS': ProvidedSignalPrebuilder + 'S_SYNC': {'prebuilder': FunctionPrebuilder, 'elementName': 'Function'}, + 'S_BRG': {'prebuilder': BridgePrebuilder, 'elementName': 'Bridge'}, + 'O_TFR': {'prebuilder': OperationPrebuilder, 'elementName': 'Class Operation'}, + 'O_DBATTR': {'prebuilder': DerivedAttributePrebuilder, 'elementName': 'Derived Base Attribute'}, + 'SM_ACT': {'prebuilder': TransitionPrebuilder, 'elementName': 'State/Transaction'}, + 'SPR_RO': {'prebuilder': RequiredOperationPrebuilder, 'elementName': 'Required Operation'}, + 'SPR_RS': {'prebuilder': RequiredSignalPrebuilder, 'elementName': 'Required Signal'}, + 'SPR_PO': {'prebuilder': ProvidedOperationPrebuilder, 'elementName': 'Provided Operation'}, + 'SPR_PS': {'prebuilder': ProvidedSignalPrebuilder, 'elementName': 'Provided Signal'} } metaclass = xtuml.get_metaclass(instance) - walker = walker_map[metaclass.kind](metaclass.metamodel, instance) - logger.info('processing action %s' % walker.label) + walker = walker_map[metaclass.kind]['prebuilder']( + metaclass.metamodel, instance) + actionType = walker_map[metaclass.kind]['elementName'] + logger.info('processing %s at %s' % + (actionType, walker.label)) # walker.visitors.append(xtuml.tools.NodePrintVisitor()) root = oal.parse(instance.Action_Semantics_internal) return walker.accept(root) - - + + def prebuild_model(metamodel): ''' Transform textual OAL actions in a ooaofooa *metamodel* to instances in the subsystems Value and Body. Instances of the following classes are supported: - + - S_SYNC - S_BRG - O_TFR @@ -1901,34 +1951,34 @@ def main(): formatter=optparse.TitledHelpFormatter()) parser.add_option("-v", "--verbosity", dest='verbosity', - action="count", - help="increase debug logging level", - default=1) - + action="count", + help="increase debug logging level", + default=1) + parser.add_option("-o", "--output", dest="output", metavar="PATH", - help="set output to PATH", - action="store", - default=None) - + help="set output to PATH", + action="store", + default=None) + (opts, args) = parser.parse_args() if len(args) == 0 or opts.output is None: parser.print_help() sys.exit(1) - + levels = { - 0: logging.ERROR, - 1: logging.WARNING, - 2: logging.INFO, - 3: logging.DEBUG, + 0: logging.ERROR, + 1: logging.WARNING, + 2: logging.INFO, + 3: logging.DEBUG, } logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG)) - + m = ooaofooa.load_metamodel(args) prebuild_model(m) - + xtuml.persist_instances(m, opts.output) if __name__ == '__main__': main() - + diff --git a/setup.py b/setup.py index 0cd1cb9..ce03391 100755 --- a/setup.py +++ b/setup.py @@ -69,7 +69,7 @@ def run(self): setup(name='pyxtuml', - version='2.2.1', # ensure that this is the same as in xtuml.version + version='2.2.2', # ensure that this is the same as in xtuml.version description='Library for parsing, manipulating, and generating BridgePoint xtUML models', author=u'John Törnblom', author_email='john.tornblom@gmail.com', diff --git a/xtuml/version.py b/xtuml/version.py index f30e354..0c6221c 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -19,6 +19,6 @@ name = 'pyxtuml' date = '2020-03-12' version = '2.2' -release = '2.2.1' # ensure that this is the same as in setup.py +release = '2.2.2' # ensure that this is the same as in setup.py complete_string = '%s v%s (%s)' % (name, release, date) From 931a8e0352f281bc2cbc7b3534977d88b3a540bb Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 12:55:22 -0500 Subject: [PATCH 2/7] Job: 12009 Remove forrmatting --- bridgepoint/prebuild.py | 871 ++++++++++++++++++++-------------------- 1 file changed, 432 insertions(+), 439 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index c55fab5..1e40050 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -49,17 +49,17 @@ def get_defining_component(pe_pe): ''' if pe_pe is None: return None - + if pe_pe.__class__.__name__ != 'PE_PE': pe_pe = xtuml.navigate_one(pe_pe).PE_PE[8001]() - - + + ep_pkg = xtuml.navigate_one(pe_pe).EP_PKG[8000]() if ep_pkg: return get_defining_component(ep_pkg) - + return xtuml.navigate_one(pe_pe).C_C[8003]() - + class Scope(object): @@ -69,60 +69,60 @@ def __init__(self, handle=None): class SymbolTable(object): - + def __init__(self): self.stack = list() - + def enter_scope(self, handle=None): s = Scope(handle) self.stack.append(s) - + return handle - + def leave_scope(self): s = self.stack.pop() return s.handle - - @property + + @property def scope(self): return self.stack[-1].handle - + def find_symbol(self, name=None, kind=None): ''' Find a symbol in the symbol table by name, kind, or both. ''' for s in reversed(self.stack): - + for symbol_name, handle in s.symbols.items(): symbol_kind = handle.__class__.__name__ - + if name == symbol_name and kind == symbol_kind: return handle - + elif name is None and kind == handle.__class__.__name__: return handle - + elif name == symbol_name and kind is None: return handle - + if name is None and kind == s.handle.__class__.__name__: return s.handle - + def install_symbol(self, name, handle): self.stack[-1].symbols[name] = handle - + class ConstantEvalutation(xtuml.tools.Walker): ''' Simple walker for evaluating constant expressions expressed on ooaofooa. ''' - + def accept_V_VAL(self, inst): return self.accept(subtype(inst, 801)) - + def accept_V_LIN(self, inst): return int(inst.Value) - + def accept_V_BIN(self, inst): ops = { '+': lambda lhs, rhs: (lhs + rhs), @@ -133,9 +133,9 @@ def accept_V_BIN(self, inst): lhs = self.accept(one(inst).V_VAL[802]()) rhs = self.accept(one(inst).V_VAL[803]()) - + return ops[inst.Operator](lhs, rhs) - + def accept_V_UNY(self, inst): ops = { '+': lambda val: val, @@ -143,9 +143,9 @@ def accept_V_UNY(self, inst): } value = self.accept(one(inst).V_VAL[804]()) - + return ops[inst.Operator](value) - + def default_accept(self, node): logger.error('Unable to evaluate constant expression (%s)', node.__class__.__name__) @@ -154,7 +154,7 @@ def default_accept(self, node): def eval_constant_expression(v_val): ''' - Evaluate a constant expression, e.g. for constant folding or for + Evaluate a constant expression, e.g. for constant folding or for calculating array sizes at compile-time. ''' w = ConstantEvalutation() @@ -166,54 +166,54 @@ class ActionPrebuilder(xtuml.tools.Walker): m = None c_c = None symtab = None - + def __init__(self, metamodel, c_c=None): self.m = metamodel self.c_c = c_c self.symtab = SymbolTable() self.is_lvalue = False self.pe_pe_cache = xtuml.QuerySet() - + scope_filt = lambda sel: (ooaofooa.is_contained_in(sel, self.c_c) or - ooaofooa.is_global(sel)) - + ooaofooa.is_global(sel)) + self.pe_pe_cache |= self.m.select_many('PE_PE', scope_filt) - - xtuml.tools.Walker.__init__(self) + + xtuml.tools.Walker.__init__(self) def any(self, key_letter, where_clause=None): return self.m.select_any(key_letter, where_clause) - + def one(self, key_letter, where_clause=None): return self.m.select_one(key_letter, where_clause) - + def many(self, key_letter, where_clause=None): return self.m.select_many(key_letter, where_clause) - + def new(self, *args, **kwargs): return self.m.new(*args, **kwargs) - - def o_obj(self, key_letter): + + def o_obj(self, key_letter): return one(self.pe_pe_cache).O_OBJ[8001](where(Key_Lett=key_letter)) - + def s_sync(self, action_name): return one(self.pe_pe_cache).S_SYNC[8001](where(Name=action_name)) - + def s_ee(self, key_letter): return one(self.pe_pe_cache).S_EE[8001](where(Key_Lett=key_letter)) - + def r_rel(self, rel_id): where_clause = lambda sel: 'r%d' % sel.Numb == rel_id.lower() return self.any('R_REL', where_clause) - + def cnst_syc(self, name): where_clause = lambda sel:(ooaofooa.is_contained_in(sel, self.c_c) or - ooaofooa.is_global(sel)) - + ooaofooa.is_global(sel)) + cnst_csp = self.many('CNST_CSP', where_clause) return one(cnst_csp).CNST_SYC[1504](where(Name=name)) - + def v_val(self, node, **kwargs): act_blk = self.symtab.find_symbol(kind='ACT_BLK') v_val = self.new('V_VAL', @@ -221,11 +221,11 @@ def v_val(self, node, **kwargs): StartPosition=node.position.start_column, EndPosition=node.position.end_column, **kwargs) - + relate(v_val, act_blk, 826) - + return v_val - + def v_var(self, node, **kwargs): act_blk = self.symtab.find_symbol(kind='ACT_BLK') v_var = self.new('V_VAR', **kwargs) @@ -233,108 +233,108 @@ def v_var(self, node, **kwargs): LineNumber=node.position.start_line, StartPosition=node.position.start_column, EndPosition=node.position.end_column) - + relate(v_var, act_blk, 823) relate(v_var, v_loc, 835) - + return v_var - + def v_int(self, node, name, o_obj): s_irdt = one(o_obj).S_IRDT[123](lambda sel: not sel.isSet) s_dt = one(s_irdt).S_DT[17]() or self.s_dt('inst_ref') v_var = self.v_var(node, Name=name) v_int = self.new('V_INT') # TODO: V_INT.IsImplicitInFor - + relate(v_var, s_dt, 848) relate(v_var, v_int, 814) relate(o_obj, v_int, 818) - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_int - + def v_ins(self, node, name, o_obj): s_irdt = one(o_obj).S_IRDT[123](lambda sel: sel.isSet) s_dt = one(s_irdt).S_DT[17]() or self.s_dt('inst_ref_set') v_var = self.v_var(node, Name=name) v_ins = self.new('V_INS') - + relate(v_var, s_dt, 848) relate(v_var, v_ins, 814) relate(o_obj, v_ins, 819) - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_ins - + def v_trn(self, node, name): v_var = self.v_var(node, Name=name) v_trn = self.new('V_TRN') - + relate(v_var, v_trn, 814) # NOTE: V_TRN data type is related when assigned a value - + # TODO: install symbol in v_var instead self.symtab.install_symbol(v_var.Name, v_var) - + return v_trn - + def v_isr(self, node, name): v_var = self.find_symbol(node, name) s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_isr = self.new('V_ISR') - + relate(v_isr, v_val, 801) relate(v_isr, v_var, 809) relate(v_val, s_dt, 820) - + return v_isr - + def v_irf(self, node, name): v_var = self.find_symbol(node, name) s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_irf = self.new('V_IRF') - + relate(v_irf, v_val, 801) relate(v_irf, v_var, 808) relate(v_val, s_dt, 820) - + return v_irf def v_avl(self, node, o_attr, root_v_val): s_dt = (one(o_attr).O_RATTR[106].O_BATTR[113].O_ATTR[106].S_DT[114]() or one(o_attr).S_DT[114]()) - + v_val = self.v_val(node) v_avl = self.new('V_AVL') - + relate(v_val, s_dt, 820) relate(v_avl, v_val, 801) relate(v_avl, root_v_val, 807) relate(v_avl, o_attr, 806) - + return v_avl - + def v_mvl(self, node, s_mbr, root_v_val): v_val = self.v_val(node) s_dt = one(s_mbr).S_DT[45]() - + v_mvl = self.new('V_MVL') - + relate(v_val, s_dt, 820) relate(v_mvl, v_val, 801) relate(v_mvl, root_v_val, 837) relate(v_mvl, s_mbr, 836) - + return v_mvl - + def e_gsme(self, node, sm_evt): act_smt = self.act_smt(node) - + e_ess = self.new('E_ESS') e_ges = self.new('E_GES') e_gsme = self.new('E_GSME') @@ -346,16 +346,16 @@ def e_gsme(self, node, sm_evt): for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return e_gsme - + def e_csme(self, node, sm_evt, v_var, implicit): act_smt = self.act_smt(node) - + e_ess = self.new('E_ESS') e_ces = self.new('E_CES', is_implicit=implicit) e_csme = self.new('E_CSME') - + relate(act_smt, e_ess, 603) relate(e_ess, e_ces, 701) relate(e_ces, e_csme, 702) @@ -364,32 +364,32 @@ def e_csme(self, node, sm_evt, v_var, implicit): for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return e_csme - + def act_smt(self, node): act_blk = self.symtab.find_symbol(kind='ACT_BLK') act_smt = self.new('ACT_SMT') - + act_smt.LineNumber = node.position.start_line act_smt.StartPosition = node.position.start_column act_smt.EndPosition = node.position.end_column act_smt.Label = node.character_stream - + relate(act_blk, act_smt, 602) - + return act_smt - + def act_sel(self, node): act_smt = self.act_smt(node) act_lnk = act_lnk_start = act_lnk_end = self.accept(node.navigation_chain) - + while act_lnk: act_lnk_end = act_lnk act_lnk = one(act_lnk).ACT_LNK[604, 'precedes']() - + v_val = self.accept(node.handle) - + # resulting variable v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -401,21 +401,21 @@ def act_sel(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_sel = self.new('ACT_SEL', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_sel, act_smt, 603) relate(act_sel, act_lnk_start, 637) relate(act_sel, v_val, 613) relate(act_sel, v_var, 638) - + return act_sel - + def s_dt(self, name): return self.any('S_DT', where(Name=name)) - + def find_symbol(self, node, name): # TODO: introduce a new keyword SENDER, and SenderAccessNode? v_var = self.symtab.find_symbol(name) @@ -424,115 +424,115 @@ def find_symbol(self, node, name): v_var = one(v_trn).V_VAR[814]() s_dt = self.s_dt('component_ref') relate(v_var, s_dt, 848) - + return v_var - + def default_accept(self, node, **kwargs): sys.stderr.write(node.__class__.__name__ + '\n') - + def accept_BodyNode(self, node): act_blk = self.new('ACT_BLK') relate(act_blk, self.act_act, 666) relate(act_blk, self.act_act, 601) - + self.symtab.enter_scope(act_blk) self.accept(node.block.statement_list) self.symtab.leave_scope() - + return self.act_act - + def accept_BlockNode(self, node): act_blk = self.new('ACT_BLK') - + relate(act_blk, self.act_act, 601) - + self.symtab.enter_scope(act_blk) self.accept(node.statement_list) self.symtab.leave_scope() - + return act_blk - + def accept_StatementListNode(self, node): prev = None for child in node.children: act_smt = self.accept(child) xtuml.relate(prev, act_smt, 661, 'succeeds') prev = act_smt - + def accept_ReturnNode(self, node): act_smt = self.act_smt(node) act_ret = self.new('ACT_RET') v_val = self.accept(node.expression) - + relate(act_ret, act_smt, 603) xtuml.relate(act_ret, v_val, 668) - + return act_smt def accept_BreakNode(self, node): act_smt = self.act_smt(node) act_brk = self.new('ACT_BRK') - + relate(act_brk, act_smt, 603) - + return act_smt - + def accept_ContinueNode(self, node): act_smt = self.act_smt(node) act_con = self.new('ACT_CON') - + relate(act_con, act_smt, 603) - + return act_smt - + def accept_ControlNode(self, node): act_smt = self.act_smt(node) act_ctl = self.new('ACT_CTL') - + relate(act_ctl, act_smt, 603) - + return act_smt - + def accept_CreateObjectNode(self, node): act_smt = self.act_smt(node) o_obj = self.o_obj(node.key_letter) v_var = self.find_symbol(node, node.variable_name) - + implicit = v_var is None if implicit: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_cr = self.new('ACT_CR', is_implicit=implicit) - + relate(act_cr, act_smt, 603) relate(act_cr, v_var, 633) relate(act_cr, o_obj, 671) - + return act_smt - + def accept_CreateObjectNoVariableNode(self, node): act_smt = self.act_smt(node) o_obj = self.o_obj(node.key_letter) act_cnv = self.new('ACT_CNV') - + relate(act_cnv, act_smt, 603) relate(act_cnv, o_obj, 672) - + return act_smt - + def accept_DeleteNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) - + act_del = self.new('ACT_DEL') - + relate(act_del, act_smt, 603) relate(act_del, v_var, 634) - + return act_smt - + def accept_RelateNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) @@ -540,14 +540,14 @@ def accept_RelateNode(self, node): r_rel = self.r_rel(node.rel_id) act_rel = self.new('ACT_REL', relationship_phrase=node.phrase) - + relate(act_rel, act_smt, 603) relate(act_rel, v_var_from, 615) relate(act_rel, v_var_to, 616) relate(act_rel, r_rel, 653) - + return act_smt - + def accept_RelateUsingNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) @@ -556,47 +556,47 @@ def accept_RelateUsingNode(self, node): r_rel = self.r_rel(node.rel_id) act_ru = self.new('ACT_RU', relationship_phrase=node.phrase) - + relate(act_ru, act_smt, 603) relate(act_ru, v_var_from, 617) relate(act_ru, v_var_to, 618) relate(act_ru, v_var_using, 619) relate(act_ru, r_rel, 654) - + return act_smt - + def accept_UnrelateNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) v_var_to = self.find_symbol(node, node.to_variable_name) r_rel = self.r_rel(node.rel_id) - + act_unr = self.new('ACT_UNR', relationship_phrase=node.phrase) - + relate(act_unr, act_smt, 603) relate(act_unr, v_var_from, 620) relate(act_unr, v_var_to, 621) relate(act_unr, r_rel, 655) - + return act_smt - + def accept_UnrelateUsingNode(self, node): act_smt = self.act_smt(node) v_var_from = self.find_symbol(node, node.from_variable_name) v_var_to = self.find_symbol(node, node.to_variable_name) v_var_using = self.find_symbol(node, node.using_variable_name) r_rel = self.r_rel(node.rel_id) - + act_uru = self.new('ACT_URU', relationship_phrase=node.phrase) - + relate(act_uru, act_smt, 603) relate(act_uru, v_var_from, 622) relate(act_uru, v_var_to, 623) relate(act_uru, v_var_using, 624) relate(act_uru, r_rel, 656) - + return act_smt - + def accept_SelectFromNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) @@ -610,26 +610,26 @@ def accept_SelectFromNode(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_fio = self.new('ACT_FIO', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_fio, act_smt, 603) relate(act_fio, v_var, 639) relate(act_fio, o_obj, 677) - + return act_smt - + def accept_SelectFromWhereNode(self, node): act_smt = self.act_smt(node) v_var = self.find_symbol(node, node.variable_name) o_obj = self.o_obj(node.key_letter) - + self.symtab.enter_scope(o_obj) v_val = self.accept(node.where_clause) self.symtab.leave_scope() - + implicit = v_var is None if implicit: if node.many: @@ -638,26 +638,26 @@ def accept_SelectFromWhereNode(self, node): else: v_int = self.v_int(node, node.variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_fiw = self.new('ACT_FIW', is_implicit=implicit, cardinality=node.cardinality) - + relate(act_fiw, act_smt, 603) relate(act_fiw, v_var, 665) relate(act_fiw, o_obj, 676) relate(act_fiw, v_val, 610) - + return act_smt - + def accept_SelectRelatedNode(self, node): act_sel = self.act_sel(node) act_sr = self.new('ACT_SR') - + relate(act_sr, act_sel, 664) - + return one(act_sel).ACT_SMT[603]() - + def accept_SelectRelatedWhereNode(self, node): act_sel = self.act_sel(node) o_obj = (one(act_sel).V_VAR[638].V_INT[814].O_OBJ[818]() or @@ -665,33 +665,33 @@ def accept_SelectRelatedWhereNode(self, node): act_srw = self.new('ACT_SRW') self.symtab.enter_scope(o_obj) - v_val = self.accept(node.where_clause) + v_val = self.accept(node.where_clause) self.symtab.leave_scope() - + relate(act_srw, act_sel, 664) relate(act_srw, v_val, 611) - + return one(act_sel).ACT_SMT[603]() - + def accept_NavigationListNode(self, node): prev = None for child in reversed(node.children): act_lnk = self.accept(child) xtuml.relate(prev, act_lnk, 604, 'succeeds') prev = act_lnk - + return prev - + def accept_NavigationStepNode(self, node): r_rel = self.r_rel(node.rel_id) o_obj = self.o_obj(node.key_letter) - + # TODO: set the Multiplicity correctly act_lnk = self.new('ACT_LNK', Mult=2, Rel_Phrase=node.phrase) - + relate(act_lnk, r_rel, 681) relate(act_lnk, o_obj, 678) - + return act_lnk def accept_ForEachNode(self, node): @@ -705,77 +705,77 @@ def accept_ForEachNode(self, node): if implicit: v_int = self.v_int(node, node.instance_variable_name, o_obj) v_var = one(v_int).V_VAR[814]() - + act_blk = self.accept(node.block) act_for = self.new('ACT_FOR', is_implicit=implicit) - + relate(act_for, act_smt, 603) relate(act_for, act_blk, 605) relate(act_for, v_var, 614) relate(act_for, v_var_set, 652) relate(act_for, o_obj, 670) - + return act_smt - + def accept_IfNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_if = self.new('ACT_IF') - + relate(act_if, act_smt, 603) relate(act_if, act_blk, 607) relate(act_if, v_val, 625) - + self.accept(node.elif_list, act_if=act_if) self.accept(node.else_clause, act_if=act_if) return act_smt - + def accept_ElIfListNode(self, node, act_if=None): for child in node.children: self.accept(child, act_if=act_if) - + def accept_ElIfNode(self, node, act_if): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_el = self.new('ACT_EL') - + relate(act_el, act_smt, 603) relate(act_el, act_blk, 658) relate(act_el, v_val, 659) relate(act_el, act_if, 682) - + return act_smt - + def accept_ElseNode(self, node, act_if): act_smt = self.act_smt(node) act_blk = self.accept(node.block) - + act_e = self.new('ACT_E') - + relate(act_e, act_smt, 603) relate(act_e, act_blk, 606) relate(act_e, act_if, 683) - + return act_smt - + def accept_WhileNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_blk = self.accept(node.block) - + act_whl = self.new('ACT_WHL') - + relate(act_whl, act_smt, 603) relate(act_whl, act_blk, 608) relate(act_whl, v_val, 626) - + return act_smt - + def accept_AssignmentNode(self, node): act_smt = self.act_smt(node) v_val_r = self.accept(node.expression) @@ -783,7 +783,7 @@ def accept_AssignmentNode(self, node): v_val_l = self.accept(node.variable_access) v_val_l.isLValue = True self.is_lvalue = False - + # Set the type of implicitly defined variables v_tvl = one(v_val_l).V_TVL[801]() v_aer = one(v_val_l).V_AER[801]() @@ -805,78 +805,78 @@ def accept_AssignmentNode(self, node): s_dt = one(v_val_r).S_DT[820]() relate(v_var, s_dt, 848) relate(v_val_l, s_dt, 820) - + for idx, v_aer in enumerate(reversed(v_aer_list)): v_val_index = one(v_aer).V_VAL[839]() element_count = eval_constant_expression(v_val_index) + 1 s_dim = self.new('S_DIM', elementCount=element_count, dimensionCount=idx) relate(v_var, s_dim, 849) - + v_trn = one(v_var).V_TRN[814]() v_irf = one(v_val_r).V_IRF[801]() v_isr = one(v_val_r).V_ISR[801]() s_irdt = one(s_dt).S_IRDT[17]() - + # migrate Transient Variable (V_TRN) to Instance Handle (V_INT) def migrate_instance(o_obj): v_int = self.new('V_INT') relate(o_obj, v_int, 818) - + unrelate(v_var, v_trn, 814) relate(v_var, v_int, 814) xtuml.delete(v_trn) - + v_irf = self.m.new('V_IRF') - + unrelate(v_val_l, v_tvl, 801) relate(v_val_l, v_irf, 801) - + unrelate(v_var, v_tvl, 805) relate(v_var, v_irf, 808) xtuml.delete(v_tvl) - + # migrate Transient Variable (V_TRN) to Instance Set (V_INS) def migrate_instance_set(o_obj): v_ins = self.new('V_INS') relate(o_obj, v_ins, 819) - + unrelate(v_var, v_trn, 814) relate(v_var, v_ins, 814) xtuml.delete(v_trn) - + v_isr = self.m.new('V_ISR') - + unrelate(v_val_l, v_tvl, 801) relate(v_val_l, v_isr, 801) - + unrelate(v_var, v_tvl, 805) relate(v_var, v_isr, 809) - + xtuml.delete(v_tvl) - + if v_trn and s_irdt: o_obj = one(s_irdt).O_OBJ[123]() if s_irdt.isSet: migrate_instance_set(o_obj) else: migrate_instance(o_obj) - + elif v_trn and v_irf: o_obj = one(v_irf).V_VAR[808].V_INT[814].O_OBJ[818]() migrate_instance(o_obj) - + elif v_trn and v_isr: o_obj = one(v_isr).V_VAR[809].V_INS[814].O_OBJ[819]() migrate_instance_set(o_obj) - + act_ai = self.new('ACT_AI') relate(act_ai, act_smt, 603) relate(act_ai, v_val_r, 609) relate(act_ai, v_val_l, 689) - + return act_smt - + def accept_FieldAccessNode(self, node): root_v_val = self.accept(node.handle) inst = subtype(root_v_val, 801) @@ -885,7 +885,7 @@ def accept_FieldAccessNode(self, node): s_dt = one(root_v_val).S_DT[820]() while one(s_dt).S_UDT[17](): s_dt = one(s_dt).S_UDT[17].S_DT[18]() - + if one(s_dt).S_IRDT[17](): o_obj = one(s_dt).S_IRDT[17].O_OBJ[123]() o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) @@ -897,68 +897,68 @@ def accept_FieldAccessNode(self, node): o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) v_avl = self.v_avl(node, o_attr, root_v_val) return one(v_avl).V_VAL[801]() - + elif kind == 'V_IRF': o_obj = one(inst).V_VAR[808].V_INT[814].O_OBJ[818]() o_attr = one(o_obj).O_ATTR[102](where(Name=node.name)) v_avl = self.v_avl(node, o_attr, root_v_val) return one(v_avl).V_VAL[801]() - + else: s_mbr = one(s_dt).S_SDT[17].S_MBR[44](where(Name=node.name)) if s_mbr: v_mvl = self.v_mvl(node, s_mbr, root_v_val) return one(v_mvl).V_VAL[801]() - + # Assume its an array.length access if node.name == 'length': v_val = self.v_val(node) s_dt = self.s_dt('integer') v_alv = self.new('V_ALV') - + relate(v_val, s_dt, 820) relate(v_val, v_alv, 801) relate(v_alv, root_v_val, 840) - + return v_val - + def accept_IndexAccessNode(self, node): v_val_root = self.accept(node.handle) v_val_index = self.accept(node.expression) s_dt = one(v_val_root).S_DT[820]() v_val = self.v_val(node) v_aer = self.new('V_AER') - + if s_dt: relate(v_val, s_dt, 820) - + relate(v_aer, v_val, 801) relate(v_aer, v_val_root, 838) relate(v_aer, v_val_index, 839) - + return v_val - + def accept_SelectedAccessNode(self, node): s_dt = self.s_dt('inst_ref') v_val = self.v_val(node) v_slr = self.new('V_SLR') - + relate(v_val, s_dt, 820) relate(v_val, v_slr, 801) - + return v_val - + def accept_SelfAccessNode(self, node): v_var = self.find_symbol(node, 'self') s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) - + v_irf = self.new('V_IRF') relate(v_val, s_dt, 820) relate(v_val, v_irf, 801) relate(v_var, v_irf, 808) - + return v_val def accept_VariableAccessNode(self, node): @@ -977,31 +977,31 @@ def accept_VariableAccessNode(self, node): v_var = one(v_trn).V_VAR[814]() v_val = self.v_val(node, isImplicit=True) v_tvl = self.new('V_TVL') - + relate(v_tvl, v_val, 801) relate(v_tvl, v_var, 805) else: raise Exception("Unknown transient '%s'" % node.variable_name) - + elif one(v_var).V_INT[814](): v_irf = self.v_irf(node, node.variable_name) v_val = one(v_irf).V_VAL[801]() - + elif one(v_var).V_INS[814](): v_isr = self.v_isr(node, node.variable_name) v_val = one(v_isr).V_VAL[801]() - + elif one(v_var).V_TRN[814](): s_dt = one(v_var).S_DT[848]() v_val = self.v_val(node) v_tvl = self.new('V_TVL') - + relate(v_tvl, v_val, 801) relate(v_val, s_dt, 820) relate(v_tvl, v_var, 805) - + return v_val - + def accept_BinaryOperationNode(self, node): # TODO: coersion and/or casting of binops?? # Perhaps that is up the the model compiler??? @@ -1024,79 +1024,79 @@ def accept_BinaryOperationNode(self, node): # default: cast to left type else: s_dt = s_dt_l - + v_val = self.v_val(node) v_bin = self.new('V_BIN', Operator=operator) - + relate(v_val, s_dt, 820) relate(v_bin, v_val, 801) relate(v_bin, v_val_l, 802) relate(v_bin, v_val_r, 803) - + return v_val - + def accept_UnaryOperationNode(self, node): v_val_op = self.accept(node.operand) operator = node.operator.lower() - + if operator in ['not', 'empty', 'not_empty']: s_dt = self.s_dt('boolean') - + elif operator == 'cardinality': s_dt = self.s_dt('integer') - + else: s_dt = one(v_val_op).S_DT[820]() - + v_val = self.v_val(node) v_uny = self.new('V_UNY', Operator=node.operator.lower()) - + relate(v_val, s_dt, 820) relate(v_uny, v_val, 801) relate(v_uny, v_val_op, 804) - + return v_val - + def accept_BooleanNode(self, node): s_dt = self.s_dt('boolean') v_val = self.v_val(node) v_lbo = self.new('V_LBO', Value=str(node.value).upper()) - + relate(v_val, s_dt, 820) relate(v_lbo, v_val, 801) - + return v_val - + def accept_IntegerNode(self, node): s_dt = self.s_dt('integer') v_val = self.v_val(node) v_lin = self.new('V_LIN', Value=node.value) - + relate(v_val, s_dt, 820) relate(v_lin, v_val, 801) - + return v_val - + def accept_RealNode(self, node): s_dt = self.s_dt('real') v_val = self.v_val(node,) v_lrl = self.new('V_LRL', Value=node.value) - + relate(v_val, s_dt, 820) relate(v_lrl, v_val, 801) - + return v_val - + def accept_StringNode(self, node): s_dt = self.s_dt('string') v_val = self.v_val(node) v_lst = self.new('V_LST', Value=node.value[1:-1]) - + relate(v_val, s_dt, 820) relate(v_lst, v_val, 801) - + return v_val - + def accept_EnumOrNamedConstantNode(self, node): s_dt = self.s_dt(node.namespace) while one(s_dt).S_UDT[17](): @@ -1105,11 +1105,11 @@ def accept_EnumOrNamedConstantNode(self, node): s_enum = one(s_dt).S_EDT[17].S_ENUM[27](where(name=node.name)) cnst_csp = self.any('CNST_CSP', where(InformalGroupName=node.namespace)) cnst_syc = one(cnst_csp).CNST_SYC[1504](where(Name=node.name)) - + if s_enum: v_val = self.v_val(node) v_len = self.new('V_LEN') - + relate(v_val, s_dt, 820) relate(v_len, v_val, 801) relate(v_len, s_enum, 824) @@ -1118,25 +1118,25 @@ def accept_EnumOrNamedConstantNode(self, node): s_dt = one(cnst_syc).S_DT[1500]() v_val = self.v_val(node) v_scv = self.new('V_SCV') - + relate(v_val, v_scv, 801) relate(v_val, s_dt, 820) relate(v_scv, cnst_syc, 850) else: raise Exception("Unknown identifier '%s::%s'" % (node.namespace, node.name)) - + return v_val - + def accept_GenerateClassEventNode(self, node): act_smt = self.act_smt(node) - + evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') - + sel.Drv_Lbl == node.event_specification.identifier + '*') + o_obj = self.o_obj(node.key_letter) sm_evt = one(o_obj).SM_ASM[519].SM_SM[517].SM_EVT[502](evt_filter) - + e_ess = self.new('E_ESS') e_ges = self.new('E_GES') e_gsme = self.new('E_GSME') @@ -1146,39 +1146,39 @@ def accept_GenerateClassEventNode(self, node): relate(e_ess, e_ges, 701) relate(e_ges, e_gsme, 703) relate(e_gsme, e_gar, 705) - relate(e_gsme, sm_evt, 707) - + relate(e_gsme, sm_evt, 707) + for v_par in self.accept(node.event_specification.event_data): relate(v_par, e_ess, 700) - + return act_smt - + def accept_GenerateCreatorEventNode(self, node): o_obj = self.o_obj(node.key_letter) evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) - + e_gsme = self.e_gsme(node, sm_evt) e_gec = self.new('E_GEC') relate(e_gsme, e_gec, 705) - + return one(e_gsme).E_GES[703].E_ESS[701].ACT_SMT[603]() - + def accept_GenerateInstanceEventNode(self, node): v_var = self.find_symbol(node, name=node.variable_access.variable_name) o_obj = one(v_var).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') - + sel.Drv_Lbl == node.event_specification.identifier + '*') + sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) e_gsme = self.e_gsme(node, sm_evt) e_gen = self.new('E_GEN') relate(e_gsme, e_gen, 705) relate(e_gen, v_var, 712) - + return one(e_gsme).E_GES[703].E_ESS[701].ACT_SMT[603]() def accept_CreateInstanceEventNode(self, node): @@ -1189,21 +1189,21 @@ def accept_CreateInstanceEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - - v_var_to = self.find_symbol(node, name=node.to_variable_access.variable_name) + + v_var_to = self.find_symbol(node, name=node.to_variable_access.variable_name) o_obj = one(v_var_to).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_eci = self.new('E_CEI') - + relate(e_csme, e_eci, 704) relate(e_eci, v_var_to, 711) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() - + def accept_CreateCreatorEventNode(self, node): v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -1212,19 +1212,19 @@ def accept_CreateCreatorEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - + o_obj = self.o_obj(node.key_letter) evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ISM[518].SM_SM[517].SM_EVT[502](evt_filter) - + e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_cec = self.new('E_CEC') relate(e_csme, e_cec, 704) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() - + def accept_CreateClassEventNode(self, node): v_var = self.find_symbol(node, node.variable_name) implicit = v_var is None @@ -1233,17 +1233,17 @@ def accept_CreateClassEventNode(self, node): v_trn = self.v_trn(node, node.variable_name) v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - + o_obj = self.o_obj(node.key_letter) - evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or - sel.Drv_Lbl == node.event_specification.identifier + '*') + evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or + sel.Drv_Lbl == node.event_specification.identifier + '*') sm_evt = one(o_obj).SM_ASM[519].SM_SM[517].SM_EVT[502](evt_filter) - + e_csme = self.e_csme(node, sm_evt, v_var, implicit) e_cea = self.new('E_CEA') relate(e_csme, e_cea, 704) - + return one(e_csme).E_CES[702].E_ESS[701].ACT_SMT[603]() def accept_EventDataListNode(self, node): @@ -1253,43 +1253,43 @@ def accept_EventDataListNode(self, node): xtuml.relate(prev, v_par, 816, 'succeeds') prev = v_par yield v_par - + def accept_EventDataItemNode(self, node): v_val = self.accept(node.expression) v_par = self.new('V_PAR', Name=node.name) - + relate(v_val, v_par, 800) - + return v_par def accept_GeneratePreexistingNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.variable_access) - + e_gpr = self.new('E_GPR') - + relate(e_gpr, act_smt, 603) relate(e_gpr, v_val, 714) - + return act_smt - + def accept_InvocationStatementNode(self, node): act_smt = self.act_smt(node) - + self.accept(node.invocation, act_smt=act_smt) return act_smt - + def accept_ImplicitInvocationNode(self, node, act_smt=None): if self.s_ee(node.namespace): return self.accept_BridgeInvocationNode(node, act_smt=act_smt) - + elif self.o_obj(node.namespace): return self.accept_ClassInvocationNode(node, act_smt=act_smt) else: return self.accept_PortInvocationNode(node, act_smt=act_smt) - + def accept_InstanceInvocationNode(self, node, act_smt=None): inst_v_val = self.accept(node.handle) v_var = one(inst_v_val).V_IRF[801].V_VAR[808]() @@ -1298,81 +1298,81 @@ def accept_InstanceInvocationNode(self, node, act_smt=None): s_dt = one(o_tfr).S_DT[116]() v_val = self.v_val(node) v_trv = self.new('V_TRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_trv, v_val, 801) relate(v_trv, o_tfr, 829) relate(v_trv, v_var, 830) - + if act_smt: act_tfm = self.new('ACT_TFM') relate(act_tfm, act_smt, 603) relate(act_tfm, o_tfr, 673) relate(act_tfm, v_var, 667) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_ClassInvocationNode(self, node, act_smt=None): o_obj = self.o_obj(node.namespace) o_tfr = one(o_obj).O_TFR[115](where(Name=node.action_name)) s_dt = one(o_tfr).S_DT[116]() v_val = self.v_val(node) v_trv = self.new('V_TRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_trv, v_val, 801) relate(v_trv, o_tfr, 829) - + if act_smt: act_tfm = self.new('ACT_TFM') relate(act_tfm, act_smt, 603) relate(act_tfm, o_tfr, 673) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_BridgeInvocationNode(self, node, act_smt=None): s_ee = self.s_ee(node.namespace) s_brg = one(s_ee).S_BRG[19](where(Name=node.action_name)) s_dt = one(s_brg).S_DT[20]() v_val = self.v_val(node) v_brv = self.new('V_BRV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_val, v_brv, 801) relate(v_brv, s_brg, 828) - + if act_smt: act_brg = self.new('ACT_BRG') relate(act_brg, act_smt, 603) relate(act_brg, s_brg, 674) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_FunctionInvocationNode(self, node, act_smt=None): s_sync = self.s_sync(node.action_name) s_dt = one(s_sync).S_DT[25]() v_val = self.v_val(node) v_fnv = self.new('V_FNV', ParmListOK=True) - + relate(v_val, s_dt, 820) relate(v_fnv, v_val, 801) relate(v_fnv, s_sync, 827) - + if act_smt: act_fnc = self.new('ACT_FNC') relate(act_fnc, act_smt, 603) relate(act_fnc, s_sync, 675) self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val - + def accept_PortInvocationNode(self, node, act_smt=None): port_filt = lambda sel: (sel.Name == node.namespace or one(sel).C_IR[4016].C_I[4012](where(Name=node.namespace))) @@ -1386,47 +1386,47 @@ def accept_PortInvocationNode(self, node, act_smt=None): spr_po = one(spr_pep).SPR_PO[4503]() spr_ps = one(spr_pep).SPR_PS[4503]() - + if act_smt: if spr_ro: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, RequiredOp_Id=spr_ro.Id) - + elif spr_po: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, ProvidedOp_Id=spr_po.Id) - + elif spr_rs: self.new('ACT_SGN', Statement_ID=act_smt.Statement_ID, RequiredSig_Id=spr_rs.Id) - + elif spr_ps: self.new('ACT_SGN', Statement_ID=act_smt.Statement_ID, ProvidedSig_Id=spr_ps.Id) - + c_io = one(c_ep).C_IO[4004]() v_val = None - + if spr_ro: v_val = self.v_val(node, DT_ID=c_io.DT_ID) self.new('V_MSV', Value_ID=v_val.Value_ID, REP_Id=spr_rep.Id, ParmListOK=True) - + if spr_po: v_val = self.v_val(node, DT_ID=c_io.DT_ID) self.new('V_MSV', Value_ID=v_val.Value_ID, PEP_Id=spr_pep.Id, ParmListOK=True) - + self.accept(node.parameter_list, act_smt=act_smt, v_val=v_val) - + return v_val def accept_ParameterListNode(self, node, act_smt, v_val): @@ -1445,16 +1445,16 @@ def accept_ParameterListNode(self, node, act_smt, v_val): xtuml.relate(v_par, one(act_smt).ACT_IOP[603](), 679) xtuml.relate(v_par, one(act_smt).ACT_SGN[603](), 662) xtuml.relate(v_par, one(act_smt).E_ESS[603](), 700) - + prev_v_par = v_par - + def accept_ParameterNode(self, node): v_val = self.accept(node.expression) v_par = self.new('V_PAR', Name=node.name) relate(v_val, v_par, 800) - + return v_par - + def accept_GeneratePortEventNode(self, node): port_filt = lambda sel: (sel.Name == node.port_name or one(sel).C_IR[4016].C_I[4012](where(Name=node.port_name))) @@ -1471,20 +1471,20 @@ def accept_GeneratePortEventNode(self, node): act_smt = self.act_smt(node) v_val = self.accept(node.expression) act_sgn = self.new('ACT_SGN') - + relate(act_sgn, act_smt, 603) relate(act_sgn, v_val, 630) xtuml.relate(act_sgn, spr_rs, 660) xtuml.relate(act_sgn, spr_ps, 663) - + return act_smt - + class BridgePrebuilder(ActionPrebuilder): def __init__(self, metamodel, s_brg): self._s_brg = s_brg s_ee = one(s_brg).S_EE[19]() c_c = get_defining_component(s_ee) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) @property def label(self): @@ -1497,10 +1497,10 @@ def label(self): def accept_BodyNode(self, node): act_brb = self.new('ACT_BRB') relate(act_brb, self._s_brg, 697) - + self.act_act = self.new('ACT_ACT', Type='bridge') relate(act_brb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1508,11 +1508,11 @@ def accept_ParamAccessNode(self, node): s_dt = one(s_bparm).S_DT[22]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, s_bparm, 831) relate(v_pvl, v_val, 801) - + return v_val @@ -1520,8 +1520,8 @@ class FunctionPrebuilder(ActionPrebuilder): def __init__(self, metamodel, s_sync): self._s_sync = s_sync c_c = get_defining_component(s_sync) - ActionPrebuilder.__init__(self, metamodel, c_c) - + ActionPrebuilder.__init__(self, metamodel, c_c) + @property def label(self): return '%s::%s' % (self.c_c.Name, self._s_sync.Name) @@ -1529,13 +1529,13 @@ def label(self): def accept_BodyNode(self, node): act_fnb = self.new('ACT_FNB') relate(act_fnb, self._s_sync, 695) - + self.act_act = self.new('ACT_ACT', Type='function', Label=self.label) - + relate(act_fnb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1543,30 +1543,30 @@ def accept_ParamAccessNode(self, node): s_dt = one(s_sparm).S_DT[26]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, s_sparm, 832) relate(v_pvl, v_val, 801) - + return v_val class OperationPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, o_tfr): self._o_tfr = o_tfr self._o_obj = one(o_tfr).O_OBJ[115]() c_c = get_defining_component(self._o_obj) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) def find_symbol(self, node, name): v_var = ActionPrebuilder.find_symbol(self, node, name) if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var - + @property def label(self): return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, self._o_tfr.Name) @@ -1574,13 +1574,13 @@ def label(self): def accept_BodyNode(self, node): act_opb = self.new('ACT_OPB') relate(act_opb, self._o_tfr, 696) - + self.act_act = self.new('ACT_ACT', Type='operation', Label=self.label) - + relate(act_opb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1588,16 +1588,16 @@ def accept_ParamAccessNode(self, node): s_dt = one(o_tparm).S_DT[118]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(s_dt, v_val, 820) relate(v_pvl, o_tparm, 833) relate(v_pvl, v_val, 801) - + return v_val class TransitionPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, sm_act): self._sm_act = sm_act self._assigned = one( @@ -1613,7 +1613,7 @@ def find_symbol(self, node, name): if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var def get_event_name(self, event): @@ -1648,18 +1648,18 @@ def accept_BodyNode(self, node): if sm_moah is not None: act_sab = self.new('ACT_SAB') relate(act_sab, self._sm_act, 691) - + self.act_act = self.new('ACT_ACT') - + relate(act_sab, self.act_act, 698) else: act_tab = self.new('ACT_TAB') relate(act_tab, self._sm_act, 688) - + self.act_act = self.new('ACT_ACT') - + relate(act_tab, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): @@ -1670,15 +1670,15 @@ def accept_ParamAccessNode(self, node): one(sm_txn).SM_CRTXN[507].SM_LEVT[509].SM_SEVT[526].SM_EVT[525]()) sm_evt = one(sm_evt).SM_SEVT[525].SM_NLEVT[526].SM_PEVT[527].SM_EVT[525]() or sm_evt sm_evt_di = one(sm_evt).SM_EVTDI[532](filt) - + spr_pep = one(sm_evt).SM_SEVT[525].SM_SGEVT[526].SPR_PS[528].SPR_PEP[4503]() spr_rep = one(sm_evt).SM_SEVT[525].SM_SGEVT[526].SPR_RS[529].SPR_REP[4502]() c_pp = (one(spr_pep).C_EP[4501].C_PP[4006](filt) or one(spr_rep).C_EP[4500].C_PP[4006](filt)) - + s_dt = one(sm_evt_di).S_DT[524]() or one(c_pp).S_DT[4007]() - + v_val = self.v_val(node) v_edv = self.new('V_EDV') v_epr = self.new('V_EPR') @@ -1688,26 +1688,26 @@ def accept_ParamAccessNode(self, node): relate(v_epr, v_edv, 834) xtuml.relate(v_epr, sm_evt_di, 846) xtuml.relate(v_epr, c_pp, 847) - + return v_val - + class DerivedAttributePrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, o_dbattr): self._o_dbattr = o_dbattr self._o_obj = one(o_dbattr).O_BATTR[107].O_ATTR[106].O_OBJ[102]() c_c = get_defining_component(self._o_obj) - ActionPrebuilder.__init__(self, metamodel, c_c) + ActionPrebuilder.__init__(self, metamodel, c_c) def find_symbol(self, node, name): v_var = ActionPrebuilder.find_symbol(self, node, name) if not v_var and name.lower() == 'self': v_int = self.v_int(node, 'self', self._o_obj) v_var = one(v_int).V_VAR[814]() - + return v_var - + @property def label(self): o_attr = one(self._o_dbattr).O_BATTR[107].O_ATTR[106]() @@ -1716,25 +1716,25 @@ def label(self): def accept_BodyNode(self, node): act_dab = self.new('ACT_DAB') relate(act_dab, self._o_dbattr, 693) - + self.act_act = self.new('ACT_ACT', Type='derived attribute', Label=self.label) - + relate(act_dab, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - - + + class RequiredOperationPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, spr_ro): self._spr_ro = spr_ro c_c = one( spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() ActionPrebuilder.__init__(self, metamodel, c_c) - @ property + @property def label(self): interface = one( self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() @@ -1745,36 +1745,33 @@ def label(self): def accept_BodyNode(self, node): act_rob = self.new('ACT_ROB') relate(act_rob, self._spr_ro, 685) - - self.act_act = self.new( - 'ACT_ACT', Type='interface operation', Label=self.label) + + self.act_act = self.new('ACT_ACT', Type='interface operation', Label=self.label) relate(act_rob, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - + def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_ro).SPR_REP[4502].C_EP[4500].C_PP[4006]( - where(Name=node.variable_name)) + c_pp = one(self._spr_ro).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val class RequiredSignalPrebuilder(ActionPrebuilder): - + def __init__(self, metamodel, spr_rs): self._spr_rs = spr_rs - c_c = one( - spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) + c_c = one(spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() + ActionPrebuilder.__init__(self, metamodel, c_c) - @ property + @property def label(self): interface = one( self._spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() @@ -1785,22 +1782,22 @@ def label(self): def accept_BodyNode(self, node): act_rsb = self.new('ACT_RSB') relate(act_rsb, self._spr_rs, 684) - + self.act_act = self.new('ACT_ACT', Type='interface signal') relate(act_rsb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) - + def accept_ParamAccessNode(self, node): -c_pp = one(self._spr_rs).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) + c_pp = one(self._spr_rs).SPR_REP[4502].C_EP[4500].C_PP[4006](where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val @@ -1809,8 +1806,8 @@ class ProvidedOperationPrebuilder(ActionPrebuilder): def __init__(self, metamodel, spr_po): self._spr_po = spr_po c_c = one(spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) - + ActionPrebuilder.__init__(self, metamodel, c_c) + @property def label(self): interface = one( @@ -1822,24 +1819,22 @@ def label(self): def accept_BodyNode(self, node): act_pob = self.new('ACT_POB') relate(act_pob, self._spr_po, 687) - - self.act_act = self.new( - 'ACT_ACT', Type='interface operation', Label=self.label) + + self.act_act = self.new('ACT_ACT', Type='interface operation', Label=self.label) relate(act_pob, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_po).SPR_PEP[4503].C_EP[4501].C_PP[4006]( - where(Name=node.variable_name)) + c_pp = one(self._spr_po).SPR_PEP[4503].C_EP[4501].C_PP[4006](where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val @@ -1847,11 +1842,10 @@ class ProvidedSignalPrebuilder(ActionPrebuilder): def __init__(self, metamodel, spr_ps): self._spr_ps = spr_ps - c_c = one( - spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() - ActionPrebuilder.__init__(self, metamodel, c_c) + c_c = one(spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() + ActionPrebuilder.__init__(self, metamodel, c_c) - @ property + @property def label(self): interface = one( self._spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() @@ -1862,32 +1856,31 @@ def label(self): def accept_BodyNode(self, node): act_psb = self.new('ACT_PSB') relate(act_psb, self._spr_ps, 686) - + self.act_act = self.new('ACT_ACT', Type='interface signal') relate(act_psb, self.act_act, 698) - + return ActionPrebuilder.accept_BodyNode(self, node) def accept_ParamAccessNode(self, node): - c_pp = one(self._spr_ps).SPR_PEP[4503].C_EP[4501].C_PP[4006]( - where(Name=node.variable_name)) + c_pp = one(self._spr_ps).SPR_PEP[4503].C_EP[4501].C_PP[4006](where(Name=node.variable_name)) s_dt = one(c_pp).S_DT[4007]() v_val = self.v_val(node) v_pvl = self.new('V_PVL') - + relate(v_val, s_dt, 820) relate(v_pvl, c_pp, 843) relate(v_pvl, v_val, 801) - + return v_val def prebuild_action(instance): ''' Transform textual OAL actions of an *instance* to instances in the ooaofooa - subsystems Value and Body. The provided *instance* must be an instance of + subsystems Value and Body. The provided *instance* must be an instance of one of the following classes: - + - S_SYNC - S_BRG - O_TFR @@ -1918,13 +1911,13 @@ def prebuild_action(instance): # walker.visitors.append(xtuml.tools.NodePrintVisitor()) root = oal.parse(instance.Action_Semantics_internal) return walker.accept(root) - - + + def prebuild_model(metamodel): ''' Transform textual OAL actions in a ooaofooa *metamodel* to instances in the subsystems Value and Body. Instances of the following classes are supported: - + - S_SYNC - S_BRG - O_TFR @@ -1951,34 +1944,34 @@ def main(): formatter=optparse.TitledHelpFormatter()) parser.add_option("-v", "--verbosity", dest='verbosity', - action="count", - help="increase debug logging level", - default=1) - + action="count", + help="increase debug logging level", + default=1) + parser.add_option("-o", "--output", dest="output", metavar="PATH", - help="set output to PATH", - action="store", - default=None) - + help="set output to PATH", + action="store", + default=None) + (opts, args) = parser.parse_args() if len(args) == 0 or opts.output is None: parser.print_help() sys.exit(1) - + levels = { - 0: logging.ERROR, - 1: logging.WARNING, - 2: logging.INFO, - 3: logging.DEBUG, + 0: logging.ERROR, + 1: logging.WARNING, + 2: logging.INFO, + 3: logging.DEBUG, } logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG)) - + m = ooaofooa.load_metamodel(args) prebuild_model(m) - + xtuml.persist_instances(m, opts.output) if __name__ == '__main__': main() - + From 334c015f49a19dbbccb10ca49a2dcd7bb81454cd Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 13:07:38 -0500 Subject: [PATCH 3/7] Job: 12009 Add text indicating line number and column --- bridgepoint/oal.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index 2399a44..b44f676 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -2013,9 +2013,9 @@ def p_unary_operator(self, p): def p_error(self, p): if p: - raise ParseException("invalid token '%s' at %s:%s" % (p.type, - p.lineno, - find_column(p.lexer.lexdata, p.lexpos))) + raise ParseException("invalid token '%s' at %s : %s" % (p.type, + 'Line number: ' + str(p.lineno), + 'Column: ' + str(find_column(p.lexer.lexdata, p.lexpos)))) else: raise ParseException("unknown parsing error") From 247031be0f87e1aba89da416c9d798b2b1d797c6 Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 14:31:54 -0500 Subject: [PATCH 4/7] Job: 12009 Address review comments --- bridgepoint/oal.py | 4 +--- bridgepoint/prebuild.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index b44f676..b6bfe18 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -2013,9 +2013,7 @@ def p_unary_operator(self, p): def p_error(self, p): if p: - raise ParseException("invalid token '%s' at %s : %s" % (p.type, - 'Line number: ' + str(p.lineno), - 'Column: ' + str(find_column(p.lexer.lexdata, p.lexpos)))) + raise ParseException("invalid token '%s' at line: %s, column: %s" % (p.type,p.lineno, find_column(p.lexer.lexdata, p.lexpos))) else: raise ParseException("unknown parsing error") diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 1e40050..e0c5024 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1489,10 +1489,10 @@ def __init__(self, metamodel, s_brg): @property def label(self): s_ee = one(self._s_brg).S_EE[19]() - compName = "" + comp_name = "" if self.c_c is not None: - compName = self.c_c.Name + "::" - return '%s%s::%s' % (compName, s_ee.Name, self._s_brg.Name) + comp_name = self.c_c.Name + "::" + return '%s%s::%s' % (comp_name, s_ee.Name, self._s_brg.Name) def accept_BodyNode(self, node): act_brb = self.new('ACT_BRB') @@ -1600,9 +1600,9 @@ class TransitionPrebuilder(ActionPrebuilder): def __init__(self, metamodel, sm_act): self._sm_act = sm_act - self._assigned = one( + self._sm_evt = one( sm_act).SM_AH[514].SM_TAH[513].SM_TXN[530].SM_NSTXN[507].SM_SEME[504].SM_SEVT[503].SM_EVT[525]() - self._state = one(sm_act).SM_AH[514].SM_MOAH[513].SM_STATE[511]() + self._sm_state = one(sm_act).SM_AH[514].SM_MOAH[513].SM_STATE[511]() self._o_obj = (one(sm_act).SM_SM[515].SM_ISM[517].O_OBJ[518]() or one(sm_act).SM_SM[515].SM_ASM[517].O_OBJ[519]()) c_c = get_defining_component(self._o_obj) @@ -1636,12 +1636,12 @@ def get_event_name(self, event): @ property def label(self): - actionOwnerName = "" + action_owner_name = "" if self._assigned is not None: - actionOwnerName = self.get_event_name(self._assigned) + action_owner_name = self.get_event_name(self._sm_evt) else: - actionOwnerName = self._state.Name - return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, actionOwnerName) + action_owner_name = self._sm_state.Name + return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, action_owner_name) def accept_BodyNode(self, node): sm_moah = one(self._sm_act).SM_AH[514].SM_MOAH[513]() From 93123df4e59353f5d415702dc76cfd60b7230a4f Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 14:45:31 -0500 Subject: [PATCH 5/7] Job: 12009 Address review comments --- bridgepoint/prebuild.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index e0c5024..d608246 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1637,7 +1637,7 @@ def get_event_name(self, event): @ property def label(self): action_owner_name = "" - if self._assigned is not None: + if self._sm_state is not None: action_owner_name = self.get_event_name(self._sm_evt) else: action_owner_name = self._sm_state.Name @@ -1736,11 +1736,11 @@ def __init__(self, metamodel, spr_ro): @property def label(self): - interface = one( + c_i = one( self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() - port = one( + c_po = one( self._spr_ro).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016]() - return '%s::%s::%s::%s' % (self.c_c, port.Name, interface.Name, self._spr_ro.Name) + return '%s::%s::%s::%s' % (self.c_c, c_po.Name, c_i.Name, self._spr_ro.Name) def accept_BodyNode(self, node): act_rob = self.new('ACT_ROB') @@ -1773,11 +1773,11 @@ def __init__(self, metamodel, spr_rs): @property def label(self): - interface = one( + c_i = one( self._spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_I[4012]() - port = one( + c_po = one( self._spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016]() - return '%s::%s::%s::%s' % (self.c_c, port.Name, interface.Name, self._spr_rs.Name) + return '%s::%s::%s::%s' % (self.c_c, c_po.Name, c_i.Name, self._spr_rs.Name) def accept_BodyNode(self, node): act_rsb = self.new('ACT_RSB') @@ -1810,11 +1810,11 @@ def __init__(self, metamodel, spr_po): @property def label(self): - interface = one( + c_i = one( self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() - port = one( + c_po = one( self._spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016]() - return '%s::%s::%s::%s' % (self.c_c.Name, port.Name, interface.Name, self._spr_po.Name) + return '%s::%s::%s::%s' % (self.c_c.Name, c_po.Name, c_i.Name, self._spr_po.Name) def accept_BodyNode(self, node): act_pob = self.new('ACT_POB') @@ -1847,11 +1847,11 @@ def __init__(self, metamodel, spr_ps): @property def label(self): - interface = one( + c_i = one( self._spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_I[4012]() - port = one( + c_po = one( self._spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016]() - return '%s::%s::%s::%s' % (self.c_c.Name, port.Name, interface.Name, self._spr_ps.Name) + return '%s::%s::%s::%s' % (self.c_c.Name, c_po.Name, c_i.Name, self._spr_ps.Name) def accept_BodyNode(self, node): act_psb = self.new('ACT_PSB') @@ -1905,9 +1905,9 @@ def prebuild_action(instance): metaclass = xtuml.get_metaclass(instance) walker = walker_map[metaclass.kind]['prebuilder']( metaclass.metamodel, instance) - actionType = walker_map[metaclass.kind]['elementName'] + action_type = walker_map[metaclass.kind]['elementName'] logger.info('processing %s at %s' % - (actionType, walker.label)) + (action_type, walker.label)) # walker.visitors.append(xtuml.tools.NodePrintVisitor()) root = oal.parse(instance.Action_Semantics_internal) return walker.accept(root) From 10547998f4da69fef98759b0229d61d31691e7eb Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 15:02:06 -0500 Subject: [PATCH 6/7] Job: 12009 Rework action owner for state/transition. Move element type into each prebuilder. --- bridgepoint/prebuild.py | 55 ++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index d608246..134030a 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1480,6 +1480,7 @@ def accept_GeneratePortEventNode(self, node): return act_smt class BridgePrebuilder(ActionPrebuilder): + element_type = "Bridge" def __init__(self, metamodel, s_brg): self._s_brg = s_brg s_ee = one(s_brg).S_EE[19]() @@ -1517,6 +1518,7 @@ def accept_ParamAccessNode(self, node): class FunctionPrebuilder(ActionPrebuilder): + element_type = "Function" def __init__(self, metamodel, s_sync): self._s_sync = s_sync c_c = get_defining_component(s_sync) @@ -1552,7 +1554,7 @@ def accept_ParamAccessNode(self, node): class OperationPrebuilder(ActionPrebuilder): - + element_type = "Operation" def __init__(self, metamodel, o_tfr): self._o_tfr = o_tfr self._o_obj = one(o_tfr).O_OBJ[115]() @@ -1597,7 +1599,8 @@ def accept_ParamAccessNode(self, node): class TransitionPrebuilder(ActionPrebuilder): - + element_type = "" + action_owner_name = "" def __init__(self, metamodel, sm_act): self._sm_act = sm_act self._sm_evt = one( @@ -1606,6 +1609,14 @@ def __init__(self, metamodel, sm_act): self._o_obj = (one(sm_act).SM_SM[515].SM_ISM[517].O_OBJ[518]() or one(sm_act).SM_SM[515].SM_ASM[517].O_OBJ[519]()) c_c = get_defining_component(self._o_obj) + self.action_owner_name = "" + if self._sm_evt is not None: + self.element_type = "Transition" + self.action_owner_name = self.get_event_name(self._sm_evt) + else: + self.element_type = "State" + self.action_owner_name = self._sm_state.Name + ActionPrebuilder.__init__(self, metamodel, c_c) def find_symbol(self, node, name): @@ -1636,12 +1647,7 @@ def get_event_name(self, event): @ property def label(self): - action_owner_name = "" - if self._sm_state is not None: - action_owner_name = self.get_event_name(self._sm_evt) - else: - action_owner_name = self._sm_state.Name - return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, action_owner_name) + return '%s::%s::%s' % (self.c_c.Name, self._o_obj.Name, self.action_owner_name) def accept_BodyNode(self, node): sm_moah = one(self._sm_act).SM_AH[514].SM_MOAH[513]() @@ -1693,7 +1699,7 @@ def accept_ParamAccessNode(self, node): class DerivedAttributePrebuilder(ActionPrebuilder): - + element_type = "Derived Base Attribute" def __init__(self, metamodel, o_dbattr): self._o_dbattr = o_dbattr self._o_obj = one(o_dbattr).O_BATTR[107].O_ATTR[106].O_OBJ[102]() @@ -1727,7 +1733,7 @@ def accept_BodyNode(self, node): class RequiredOperationPrebuilder(ActionPrebuilder): - + element_type = "Required Operaton" def __init__(self, metamodel, spr_ro): self._spr_ro = spr_ro c_c = one( @@ -1765,7 +1771,7 @@ def accept_ParamAccessNode(self, node): class RequiredSignalPrebuilder(ActionPrebuilder): - + element_type = "Required Signal" def __init__(self, metamodel, spr_rs): self._spr_rs = spr_rs c_c = one(spr_rs).SPR_REP[4502].C_R[4500].C_IR[4009].C_PO[4016].C_C[4010]() @@ -1802,7 +1808,7 @@ def accept_ParamAccessNode(self, node): class ProvidedOperationPrebuilder(ActionPrebuilder): - + element_type = "Provided Operation" def __init__(self, metamodel, spr_po): self._spr_po = spr_po c_c = one(spr_po).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() @@ -1839,7 +1845,7 @@ def accept_ParamAccessNode(self, node): class ProvidedSignalPrebuilder(ActionPrebuilder): - + element_type = "Provided Signal" def __init__(self, metamodel, spr_ps): self._spr_ps = spr_ps c_c = one(spr_ps).SPR_PEP[4503].C_P[4501].C_IR[4009].C_PO[4016].C_C[4010]() @@ -1892,22 +1898,21 @@ def prebuild_action(instance): - SPR_PS ''' walker_map = { - 'S_SYNC': {'prebuilder': FunctionPrebuilder, 'elementName': 'Function'}, - 'S_BRG': {'prebuilder': BridgePrebuilder, 'elementName': 'Bridge'}, - 'O_TFR': {'prebuilder': OperationPrebuilder, 'elementName': 'Class Operation'}, - 'O_DBATTR': {'prebuilder': DerivedAttributePrebuilder, 'elementName': 'Derived Base Attribute'}, - 'SM_ACT': {'prebuilder': TransitionPrebuilder, 'elementName': 'State/Transaction'}, - 'SPR_RO': {'prebuilder': RequiredOperationPrebuilder, 'elementName': 'Required Operation'}, - 'SPR_RS': {'prebuilder': RequiredSignalPrebuilder, 'elementName': 'Required Signal'}, - 'SPR_PO': {'prebuilder': ProvidedOperationPrebuilder, 'elementName': 'Provided Operation'}, - 'SPR_PS': {'prebuilder': ProvidedSignalPrebuilder, 'elementName': 'Provided Signal'} + 'S_SYNC': FunctionPrebuilder, + 'S_BRG': BridgePrebuilder, + 'O_TFR': OperationPrebuilder, + 'O_DBATTR': DerivedAttributePrebuilder, + 'SM_ACT': TransitionPrebuilder, + 'SPR_RO': RequiredOperationPrebuilder, + 'SPR_RS': RequiredSignalPrebuilder, + 'SPR_PO': ProvidedOperationPrebuilder, + 'SPR_PS': ProvidedSignalPrebuilder } metaclass = xtuml.get_metaclass(instance) - walker = walker_map[metaclass.kind]['prebuilder']( + walker = walker_map[metaclass.kind]( metaclass.metamodel, instance) - action_type = walker_map[metaclass.kind]['elementName'] logger.info('processing %s at %s' % - (action_type, walker.label)) + (walker.element_type, walker.label)) # walker.visitors.append(xtuml.tools.NodePrintVisitor()) root = oal.parse(instance.Action_Semantics_internal) return walker.accept(root) From d38129f8aadf8d3173b77e4f66fa1d0e8961bd06 Mon Sep 17 00:00:00 2001 From: tlondon-techmod Date: Wed, 7 Oct 2020 15:21:36 -0500 Subject: [PATCH 7/7] Job: 12009 Reformat get_event_name --- bridgepoint/prebuild.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 134030a..ca3c3d7 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1628,22 +1628,21 @@ def find_symbol(self, node, name): return v_var def get_event_name(self, event): - nlevt = one(event).SM_SEVT[525].SM_NLEVT[526]() - if nlevt is not None: - poly = one(nlevt).SM_PEVT[527]() - if poly is not None: - if poly.SM_ID == nlevt.SM_ID: # if this is a local poly - return event.Drv_Lbl + ": " + event.Mning - else: - return event.Mning + "::" + poly.localClassName - else: - return event.Mning + "::Orphaned" - else: - signalEvt = one(event).SM_SEVT[525].SM_SGEVT[526]() - if signalEvt is not None: - return event.Drv_Lbl - else: - return event.Drv_Lbl + ": " + event.Mning + sm_nlevt = one(event).SM_SEVT[525].SM_NLEVT[526]() + sm_sgevt = one(event).SM_SEVT[525].SM_SGEVT[526]() + sm_pevt = one(sm_nlevt).SM_PEVT[527]() + # If polymorphic and the polymorphic event is not local + # use the poly local class name + if sm_pevt is not None and sm_pevt.SM_ID != sm_nlevt.SM_ID: + return event.Mning + "::" + sm_pevt.localClassName + # If an orphaned polymorphic, append that to the name + if sm_nlevt is not None and sm_pevt is None: + return event.Mning + "::Orphaned" + # If a signal event we use only the derived label + if sm_sgevt is not None: + return event.Drv_Lbl + # otherwise we combine the label with the event Mning + return event.Drv_Lbl + ": " + event.Mning @ property def label(self):