⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.py

📁 编译工具
💻 PY
📖 第 1 页 / 共 3 页
字号:
                                 stream.out(template.builddesc_member,               guard_name = guard_name,               fqname = fqname,               num_members = str(num_members),               private_prefix = prefix,               cases = str(cases))        returndef visitStruct(node):    startingNode(node)    scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    fqname = scopedName.fullyQualify()    prefix = config.state['Private Prefix']        # if it's recursive, stick in a forward declaration    if node.recursive():        stream.out("// struct is recursive")        forward(node)    # output code for constructed members (eg nested structs)    for m in node.members():        memberType = m.memberType()        if m.constrType():            memberType.decl().accept(self)    def member_desc(node = node, stream = stream, fqname = fqname,                    guard_name = guard_name, prefix = prefix):        visitMembers(node, stream, fqname, guard_name, prefix,                     static = "static")            stream.out(template.struct,               fqname = fqname, guard_name = guard_name,               member_desc = member_desc,               private_prefix = prefix)    # <---    required_symbols = [ prefix + "_buildDesc_c" + guard_name ]    generated_symbols = [ prefix + "_delete_" + guard_name ]    assertDefined(required_symbols)    defineSymbols(generated_symbols)    # <---        finishingNode()def visitStructForward(node):    startingNode(node)    scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    fqname = scopedName.fullyQualify()    prefix = config.state['Private Prefix']    stream.out("// forward declaration")    forward(node)    required_symbols = [ prefix + "_buildDesc_c" + guard_name ]    generated_symbols = [ prefix + "_delete_" + guard_name ]    assertDefined(required_symbols)    defineSymbols(generated_symbols)    finishingNode()def visitTypedef(node):    startingNode(node)        aliasType = types.Type(node.aliasType())    deref_aliasType = aliasType.deref()    type_dims = aliasType.dims()    prefix = config.state['Private Prefix']    if node.constrType():        aliasType.type().decl().accept(self)    # we don't need to recurse on the aliased type here because    # the code generated is only used from the code generated from    # an array declarator.    # visitArray() would take care of it for us.    # Don't do this:    #   aliasType.accept(self)    alias_cname = mangler.canonTypeName(aliasType)    alias_tyname = aliasType.base()    deref_alias_tyname = deref_aliasType.base()    if deref_aliasType.objref():        alias_tyname = aliasType.objRefTemplate("Member")        deref_alias_tyname = deref_aliasType.objRefTemplate("Member")    elif deref_aliasType.string():        alias_tyname = "CORBA::String_member"    elif deref_aliasType.wstring():        alias_tyname = "CORBA::WString_member"    for declarator in node.declarators():        first_declarator = declarator == node.declarators()[0]                decl_dims = declarator.sizes()        full_dims = decl_dims + type_dims        is_array = full_dims != []        is_array_declarator = decl_dims != []        scopedName = id.Name(declarator.scopedName())        fqname = scopedName.fullyQualify()        tc_name = scopedName.prefix("_tc_").fullyQualify()        guard_name = scopedName.guard()        decl_cname = mangler.canonTypeName(aliasType, declarator)        if is_array_declarator:            defineSymbols([ prefix + "_delete_" + guard_name ])            stream.out(template.typedef_array_decl_delete,                       fqname = fqname, guard_name = guard_name,                       private_prefix = prefix)            visitArray(aliasType, declarator)            dims_str   = map(str, full_dims)            dims_index = map(lambda x:"[" + x + "]", dims_str)            dims_tail_index = dims_index[1:]            tail_dims = string.join(dims_tail_index, "")            argtype = deref_alias_tyname            if deref_aliasType.sequence():                argtype = deref_aliasType.sequenceTemplate()            if deref_aliasType.string():                argtype = "CORBA::String_member"            elif deref_aliasType.wstring():                argtype = "CORBA::WString_member"            elif deref_aliasType.typecode():                argtype = "CORBA::TypeCode_member"                            assertDefined([ prefix + "_buildDesc" + decl_cname ])            stream.out(template.typedef_array_decl_oper,                       fqname = fqname,                       decl_cname = decl_cname,                       type = alias_tyname,                       dtype = argtype,                       tail_dims = tail_dims,                       private_prefix = config.state['Private Prefix'],                       tcname = tc_name,                       guard_name = guard_name)        # --- sequences        if not is_array_declarator and aliasType.sequence():            if first_declarator:                deref_aliasType.type().accept(self)            stream.out(template.typedef_sequence_oper,                       fqname = fqname,                       tcname = tc_name,                       decl_cname = decl_cname,                       private_prefix = config.state['Private Prefix'],                       guard_name = guard_name)    finishingNode()def visitUnion(node):    startingNode(node)        scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    fqname = scopedName.fullyQualify()    switchType = types.Type(node.switchType())    deref_switchType = switchType.deref()    discrim_cname = mangler.canonTypeName(switchType)    discrim_type = deref_switchType.base()    isExhaustive = ast.exhaustiveMatch(switchType,ast.allCaseLabelValues(node))    prefix = config.state['Private Prefix']    # grab the default case if it exists    default_case = None    for c in node.cases():        for l in c.labels():            if l.default():                default_case = c                break    # if it's recursive, stick in a forward declaration    if (node.recursive()):        stream.out("// forward declaration because union is recursive")        forward(node)    # this may need an extern    node.switchType().accept(self)        # constructed types    if node.constrType():        node.switchType().decl().accept(self)    for n in node.cases():        if n.constrType():            n.caseType().decl().accept(self)    required_symbols = []                switch = output.StringStream()    if default_case:        default_decl = default_case.declarator()        default_type = types.Type(default_case.caseType())        default_dims = default_type.dims()        decl_dims = default_decl.sizes()        full_dims = decl_dims + default_dims            default_is_array = full_dims != []        mem_cname = mangler.canonTypeName(default_type, default_decl)        default_decl_name = id.Name(default_decl.scopedName())        mem_name = default_decl_name.simple()        thing = "_u->_pd_" + mem_name        if default_is_array:            thing = docast(default_type, default_decl, thing)        required_symbols.append(prefix + "_buildDesc" + mem_cname)                switch.out("""\if( _u->_pd__default ) {  @private_prefix@_buildDesc@mem_cname@(_newdesc, @thing@);} else {""",                   mem_cname = mem_cname,                   private_prefix = prefix,                   thing = thing)        switch.inc_indent()    # handle the main cases    switch.out("""\switch( _u->_pd__d ) {""")    # deal with types    for c in node.cases():        caseType = types.Type(c.caseType())        caseType.type().accept(self)                declarator = c.declarator()        d_sizes = declarator.sizes()        is_array_declarator = d_sizes != []        if is_array_declarator:            visitArray(caseType, declarator)                        deref_caseType = caseType.deref()        type_cname = mangler.canonTypeName(caseType, declarator)        type_name = caseType.base()        deref_type_name = deref_caseType.base()        mem_name = id.Name(c.declarator().scopedName()).simple()        case_dims = caseType.dims()        full_dims = d_sizes + case_dims                is_array = full_dims != []        is_array_declarator = declarator.sizes() != []        union_member = "_u->_pd_" + mem_name        cast = union_member        if is_array:            cast = docast(caseType, declarator, cast)                    for l in c.labels():            if l.default():                continue            label = switchType.literal(l.value())            required_symbols.append(prefix + "_buildDesc" + type_cname)            switch.out("""\case @label@:  @private_prefix@_buildDesc@type_cname@(_newdesc, @cast@);  break;""", label = label, type_cname = type_cname, cast = cast,                       private_prefix = prefix)            switch.dec_indent()    if not isExhaustive:        switch.out("""\default: return 0;""")    switch.dec_indent()    switch.out("""\}""")    if default_case:        switch.out("""\}""")            assertDefined(required_symbols) # needed by the switch    stream.out(template.union_tcParser,               guard_name = guard_name,               discrim_cname = discrim_cname,               discrim_type = discrim_type,               switch = str(switch),               private_prefix = prefix,               fqname = fqname)    generated_symbols = [ prefix + "_buildDesc_c" + guard_name,                          prefix + "_delete_" + guard_name ]    defineSymbols(generated_symbols)        stream.out(template.union,               guard_name = guard_name, fqname = fqname,               private_prefix = prefix)                   finishingNode()def visitUnionForward(node):    startingNode(node)    scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    fqname = scopedName.fullyQualify()    prefix = config.state['Private Prefix']    stream.out("// forward declaration")    forward(node)    required_symbols = [ prefix + "_buildDesc_c" + guard_name ]    generated_symbols = [ prefix + "_delete_" + guard_name ]    assertDefined(required_symbols)    defineSymbols(generated_symbols)    finishingNode()def visitForward(node):    scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    prefix = config.state['Private Prefix']    symbol = prefix + "_buildDesc_c" + guard_name    if not isDefined(symbol):        stream.out("// forward declaration of interface")        interface_type = types.Type(idltype.Declared(node, node.scopedName(),                                          idltype.tk_objref,0))        mem_name = interface_type.objRefTemplate("tcDesc_arg")        forward(node, mem_name)def visitConst(node):    passdef visitDeclarator(node):    passdef visitMember(node):    passdef visitException(node):    startingNode(node)        scopedName = id.Name(node.scopedName())    guard_name = scopedName.guard()    fqname = scopedName.fullyQualify()    prefix = config.state['Private Prefix']    for m in node.members():        memberType = m.memberType()        if m.constrType():            memberType.decl().accept(self)    visitMembers(node, stream, fqname, guard_name, prefix)        required_symbols = [ prefix + "_buildDesc_c" + guard_name ]    generated_symbols = [ prefix + "_delete_" + guard_name ]    assertDefined(required_symbols)    defineSymbols(generated_symbols)    stream.out(template.exception,               guard_name = guard_name, fqname = fqname,               private_prefix = config.state['Private Prefix'])    finishingNode()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -