def handle_leaf(self, yinNode): cpp_type, default = None, None for subN in yinNode.subNodes: if subN.match('type'): cpp_type = subN.cpp_type if cpp_type == 'tEnumeration': e = dict() for ex_subN in subN.subNodes: if ex_subN.match('enum'): e_id = yinNode.mod_name + '_' + yinNode.identifier + '_' + ex_subN.identifier e_val = None for ex2_subN in ex_subN.subNodes: if ex2_subN.match('value'): e_val = ex2_subN.value e[e_id] = e_val em = simple_syntax.enumeration(yinNode.mod_name + '_' + yinNode.identifier, e) self.enums.append(em) elif subN.match('default'): default = subN.default if not cpp_type: iutil.ERROR('leaf<%s> under node<%s> has no cpp_type!' % (yinNode.identifier, self.tag)) yinNode.cpp_type, yinNode.default = cpp_type, default if (yinNode.identifier == self.keyName): self.keyNode = yinNode if yinNode.parNode != self.yinNode: yinNode.identifier = yinNode.mod_name + '_' + yinNode.identifier mv = leafVariable(yinNode) if yinNode.default: #TODO: Handle default statements if yin_common.isOrmStringType(yinNode.cpp_type): yinNode.default = '\"%s\"' % yinNode.default elif yinNode.cpp_type == yin_common.tUnion: yinNode.default = None elif yinNode.cpp_type == yin_common.tEnumeration: yinNode.default = None elif yinNode.cpp_type == yin_common.tInstanceIdentifier: yinNode.default = None elif yinNode.cpp_type == yin_common.tIdentityref: yinNode.default = None elif yinNode.cpp_type == yin_common.tBits: yinNode.default = None mv.default = yinNode.default # Get & Set pre = 'const ' if yin_common.isOrmStringType(yinNode.cpp_type) else iutil.nullStr getter = simple_syntax.function(pre + yinNode.cpp_type, iutil.namingConvert('get_'+yinNode.identifier), []) getter.inline = True getter.impBody.append('return %s.getValue();' % mv.identifier) mv.getter = getter param = simple_syntax.var_param(pre + yinNode.cpp_type, 'rhs') setter = simple_syntax.function('void', iutil.namingConvert('set_'+yinNode.identifier), [param]) setter.inline = True setter.impBody.append('%s.set(%s);' % (mv.identifier, param.identifier)) mv.setter = setter self.subLeafVars.append(mv) return mv
def declare(self): out = [] out.append('enum' + iutil.ws + iutil.namingConvert(self.identifier) + iutil.ws + iutil.lBrace) for e_ident in self.enum_dict: val = self.enum_dict[e_ident] if val: out.append(iutil.tab + iutil.namingConvert(e_ident) + iutil.equal + val + iutil.comma) else: out.append(iutil.tab + iutil.namingConvert(e_ident) + iutil.comma) out.append(iutil.rBrace + iutil.semicolon) return out
def handle_case(self, yinNode): self.refine_variable_stmt(yinNode) mv = leafVariable(yinNode) mv.complex = True getter = simple_syntax.function(yinNode.cpp_type+'&', iutil.namingConvert('get_'+yinNode.identifier), []) getter.inline = True getter.impBody.append('return %s;' % mv.identifier) self.subLeafVars.append(mv)
def __init__(self, cpp_type, ident): object.__init__(self) self.cpp_type = cpp_type self.identifier = iutil.namingConvert(ident) self.init_list = list()
def __init__(self, yinNode): simple_syntax.variable.__init__(self, yinNode.cpp_type, iutil.namingConvert(yinNode.identifier) + '_m') self.yinNode = yinNode self.setter = None self.getter = None