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

📄 opers.py

📁 编译工具
💻 PY
字号:
# -*- python -*-#                           Package   : omniidl# opers.py                  Created on: 1999/11/4#			    Author    : David Scott (djs)##    Copyright (C) 1999 AT&T Laboratories Cambridge##  This file is part of omniidl.##  omniidl is free software; you can redistribute it and/or modify it#  under the terms of the GNU General Public License as published by#  the Free Software Foundation; either version 2 of the License, or#  (at your option) any later version.##  This program is distributed in the hope that it will be useful,#  but WITHOUT ANY WARRANTY; without even the implied warranty of#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU#  General Public License for more details.##  You should have received a copy of the GNU General Public License#  along with this program; if not, write to the Free Software#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA#  02111-1307, USA.## Description:#   #   Produce the main header operator definitions for the C++ backend# $Id: opers.py,v 1.9.2.4 2001/10/29 17:42:40 dpg1 Exp $# $Log: opers.py,v $# Revision 1.9.2.4  2001/10/29 17:42:40  dpg1# Support forward-declared structs/unions, ORB::create_recursive_tc().## Revision 1.9.2.3  2001/06/08 17:12:17  dpg1# Merge all the bug fixes from omni3_develop.## Revision 1.9.2.2  2000/10/12 15:37:51  sll# Updated from omni3_1_develop.## Revision 1.10.2.1  2000/08/21 11:35:17  djs# Lots of tidying## Revision 1.10  2000/07/13 15:26:00  dpg1# Merge from omni3_develop for 3.0 release.## Revision 1.7.2.4  2000/06/26 16:23:59  djs# Better handling of #include'd files (via new commandline options)# Refactoring of configuration state mechanism.## Revision 1.7.2.3  2000/04/26 18:22:30  djs# Rewrote type mapping code (now in types.py)# Rewrote identifier handling code (now in id.py)## Revision 1.7.2.2  2000/03/20 11:50:20  djs# Removed excess buffering- output templates have code attached which is# lazily evaluated when required.## Revision 1.7.2.1  2000/02/14 18:34:54  dpg1# New omniidl merged in.## Revision 1.7  2000/01/19 11:23:28  djs# Moved most C++ code to template file## Revision 1.6  2000/01/17 17:03:14  djs# Support for constructed types in typedefs and unions## Revision 1.5  2000/01/13 15:56:39  djs# Factored out private identifier prefix rather than hard coding it all through# the code.## Revision 1.4  2000/01/07 20:31:29  djs# Regression tests in CVSROOT/testsuite now pass for#   * no backend arguments#   * tie templates#   * flattened tie templates#   * TypeCode and Any generation## Revision 1.3  1999/12/24 18:14:30  djs# Fixed handling of #include'd .idl files## Revision 1.2  1999/12/01 17:01:09  djs# Moved ancillary marshalling and alignment code to another module# Added operator overloads for Typecodes and Anys## Revision 1.1  1999/11/04 19:05:09  djs# Finished moving code from tmp_omniidl. Regression tests ok.#"""Produce the main header operator definitions"""# similar to o2be_root::produce_hdr_operators in the old C++ BEfrom omniidl import idlast, idltype, idlutilfrom omniidl_be.cxx import config, id, types, astfrom omniidl_be.cxx.header import templateimport opersself = opersdef __init__(stream):    opers.stream = stream    return opers# Control arrives here#def visitAST(node):    for n in node.declarations():        if ast.shouldGenerateCodeForDecl(n):            n.accept(self)def visitModule(node):    for n in node.definitions():        n.accept(self)def visitStruct(node):    for n in node.members():        n.accept(self)    # TypeCode and Any    if config.state['Typecode']:        fqname = id.Name(node.scopedName()).fullyQualify()        stream.out(template.any_struct,                   fqname = fqname)def visitStructForward(node):    passdef visitUnion(node):    # deal with constructed switch type    if node.constrType():        node.switchType().decl().accept(self)    # deal with constructed member types    for n in node.cases():        if n.constrType():            n.caseType().decl().accept(self)        # TypeCode and Any    if config.state['Typecode']:        fqname = id.Name(node.scopedName()).fullyQualify()            stream.out(template.any_union,                   fqname = fqname)def visitUnionForward(node):    passdef visitMember(node):    if node.constrType():        node.memberType().decl().accept(self)def visitEnum(node):    cxx_fqname = id.Name(node.scopedName()).fullyQualify()        # build the cases    def cases(stream = stream, node = node):        for d in node.enumerators():            labelname = id.Name(d.scopedName()).fullyQualify()            stream.out("case " + labelname + ":\n")    stream.out(template.enum_operators,               name = cxx_fqname,               private_prefix = config.state['Private Prefix'],               cases = cases)    # Typecode and Any    if config.state['Typecode']:        stream.out(template.any_enum,                   name = cxx_fqname)def visitInterface(node):    # interfaces act as containers for other declarations    # output their operators here    for d in node.declarations():        d.accept(self)    # Typecode and Any    if config.state['Typecode']:        fqname = id.Name(node.scopedName()).fullyQualify()            stream.out(template.any_interface,                   fqname = fqname)        def visitTypedef(node):    aliasType = types.Type(node.aliasType())    if node.constrType():        aliasType.type().decl().accept(self)    # don't need to do anything unless generating TypeCodes and Any    if not config.state['Typecode']:        return        for d in node.declarators():        decl_dims = d.sizes()        fqname = id.Name(d.scopedName()).fullyQualify()        array_declarator = decl_dims != []        if array_declarator:            stream.out(template.any_array_declarator,                       fqname = fqname)        # only need to generate these operators if the typedef        # introduces a new sequence- they already exist for a simple        # typedef. Hence aliasType rather than deref_aliasType.        elif aliasType.sequence():            stream.out(template.any_sequence,                       fqname = fqname)                                def visitForward(node):    passdef visitConst(node):    passdef visitDeclarator(node):    passdef visitException(node):    for m in node.members():        if m.constrType():            m.memberType().decl().accept(self)        # don't need to do anything unless generating TypeCodes and Any    if not config.state['Typecode']:        return    fqname = id.Name(node.scopedName()).fullyQualify()    stream.out(template.any_exception,               fqname = fqname)

⌨️ 快捷键说明

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