# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# ------------------------------------------------------------------------------
import xml.etree.ElementTree as ET

import chc.util.fileutil as UF
import chc.util.IndexedTable as IT

import chc.proof.CPOPredicate as PO

po_predicate_constructors = {
    'ab': lambda x: PO.CPOAllocationBase(*x),
    'b': lambda x: PO.CPOBuffer(*x),
    'c': lambda x: PO.CPOCast(*x),
    'cb': lambda x: PO.CPOCommonBase(*x),
    'cbt': lambda x: PO.CPOCommonBaseType(*x),
    'cls': lambda x: PO.CPOCanLeaveScope(*x),
    'cr': lambda x: PO.CPOControlledResource(*x),
    'cssl': lambda x: PO.CPOSignedToSignedCastLB(*x),
    'cssu': lambda x: PO.CPOSignedToSignedCastUB(*x),
    'csul': lambda x: PO.CPOSignedToUnsignedCastLB(*x),
    'csuu': lambda x: PO.CPOSignedToUnsignedCastUB(*x),
    'cus': lambda x: PO.CPOUnsignedToSignedCast(*x),
    'cuu': lambda x: PO.CPOUnsignedToUnsignedCast(*x),
    'dr': lambda x: PO.CPODistinctRegion(*x),
    'fc': lambda x: PO.CPOFormatCast(*x),
    'ft': lambda x: PO.CPOFormatString(*x),
    'ga': lambda x: PO.CPOGlobalAddress(*x),
    'ha': lambda x: PO.CPOHeapAddress(*x),
 def f(index, key):
     return PO.CPOCast(self, index, p.tags, args)
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# ------------------------------------------------------------------------------
import xml.etree.ElementTree as ET

import chc.util.fileutil as UF
import chc.util.IndexedTable as IT

import chc.proof.CPOPredicate as PO

po_predicate_constructors = {
    "ab": lambda x: PO.CPOAllocationBase(*x),
    "b": lambda x: PO.CPOBuffer(*x),
    "c": lambda x: PO.CPOCast(*x),
    "cb": lambda x: PO.CPOCommonBase(*x),
    "cbt": lambda x: PO.CPOCommonBaseType(*x),
    "cls": lambda x: PO.CPOCanLeaveScope(*x),
    "cr": lambda x: PO.CPOControlledResource(*x),
    "cssl": lambda x: PO.CPOSignedToSignedCastLB(*x),
    "cssu": lambda x: PO.CPOSignedToSignedCastUB(*x),
    "csul": lambda x: PO.CPOSignedToUnsignedCastLB(*x),
    "csuu": lambda x: PO.CPOSignedToUnsignedCastUB(*x),
    "cus": lambda x: PO.CPOUnsignedToSignedCast(*x),
    "cuu": lambda x: PO.CPOUnsignedToUnsignedCast(*x),
    "dr": lambda x: PO.CPODistinctRegion(*x),
    "fc": lambda x: PO.CPOFormatCast(*x),
    "ft": lambda x: PO.CPOFormatString(*x),
    "ga": lambda x: PO.CPOGlobalAddress(*x),
    "ha": lambda x: PO.CPOHeapAddress(*x),