示例#1
0
    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
示例#2
0
 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
示例#3
0
 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)
示例#4
0
 def __init__(self, cpp_type, ident):
     object.__init__(self)
     self.cpp_type = cpp_type
     self.identifier = iutil.namingConvert(ident)
     self.init_list = list()
示例#5
0
 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