Example #1
0
    def test_string_contains_lone_surrogates(self):
        self.assertFalse(
            StringEncoding.string_contains_lone_surrogates(u"abc"))
        self.assertFalse(
            StringEncoding.string_contains_lone_surrogates(u"\uABCD"))
        self.assertFalse(
            StringEncoding.string_contains_lone_surrogates(u"\N{SNOWMAN}"))

        # This behaves differently in Py2 when freshly parsed and read from a .pyc file,
        # but it seems to be a marshalling bug in Py2, which doesn't hurt us in Cython.
        if sys.version_info[0] != 2:
            self.assertTrue(
                StringEncoding.string_contains_lone_surrogates(
                    u"\uD800\uDFFF"))

        # In Py2 with 16bit Unicode, the following is indistinguishable from the 32bit character.
        obfuscated_surrogate_pair = (u"\uDFFF" + "\uD800")[::-1]
        if sys.version_info[0] == 2 and sys.maxunicode == 65565:
            self.assertFalse(
                StringEncoding.string_contains_lone_surrogates(
                    obfuscated_surrogate_pair))
        else:
            self.assertTrue(
                StringEncoding.string_contains_lone_surrogates(
                    obfuscated_surrogate_pair))

        self.assertTrue(
            StringEncoding.string_contains_lone_surrogates(u"\uD800"))
        self.assertTrue(
            StringEncoding.string_contains_lone_surrogates(u"\uDFFF"))
        self.assertTrue(
            StringEncoding.string_contains_lone_surrogates(u"\uDFFF\uD800"))
        self.assertTrue(
            StringEncoding.string_contains_lone_surrogates(u"\uD800x\uDFFF"))
Example #2
0
    def synthesize_defnodes(self):
        """
        Create the __signatures__ dict of PyCFunctionNode specializations.
        """
        if isinstance(self.nodes[0], CFuncDefNode):
            nodes = [node.py_func for node in self.nodes]
        else:
            nodes = self.nodes

        signatures = [
            StringEncoding.EncodedString(node.specialized_signature_string)
            for node in nodes
        ]
        keys = [
            ExprNodes.StringNode(node.pos, value=sig)
            for node, sig in zip(nodes, signatures)
        ]
        values = [
            ExprNodes.PyCFunctionNode.from_defnode(node, True)
            for node in nodes
        ]
        self.__signatures__ = ExprNodes.DictNode.from_pairs(
            self.pos, zip(keys, values))

        self.specialized_pycfuncs = values
        for pycfuncnode in values:
            pycfuncnode.is_specialization = True
Example #3
0
 def visit_Constant(self, node):
     if isinstance(node.value, int):
         return IntNode(self.loc(node), value=str(node.value))
     if isinstance(node.value, float):
         # We won't have c float, we map floating types to double
         return FloatNode(self.loc(node), value=str(node.value))
     if isinstance(node.value, str):
         if node.kind == "u":
             return UnicodeNode(self.loc(node), value=node.value, bytes_value=None)
         else:
             return StringNode(
                 self.loc(node),
                 value=node.value,
                 unicode_value=StringEncoding.EncodedString(node.value),
             )
     if (
         isinstance(Ellipsis, type)
         and isinstance(node.value, Ellipsis)
         or isinstance(node.value, type(Ellipsis))
     ):
         return EllipsisNode(self.loc(node))
     if isinstance(node.value, bytes):
         return BytesNode(self.loc(node), value=node.s)
     if node.value is None:
         return NoneNode(self.loc(node))
     raise NotImplementedError("Unknown constant value: %s" % node)
Example #4
0
    def test_string_contains_surrogates(self):
        self.assertFalse(StringEncoding.string_contains_surrogates(u"abc"))
        self.assertFalse(StringEncoding.string_contains_surrogates(u"\uABCD"))
        self.assertFalse(
            StringEncoding.string_contains_surrogates(u"\N{SNOWMAN}"))

        self.assertTrue(StringEncoding.string_contains_surrogates(u"\uD800"))
        self.assertTrue(StringEncoding.string_contains_surrogates(u"\uDFFF"))
        self.assertTrue(
            StringEncoding.string_contains_surrogates(u"\uD800\uDFFF"))
        self.assertTrue(
            StringEncoding.string_contains_surrogates(u"\uDFFF\uD800"))
        self.assertTrue(
            StringEncoding.string_contains_surrogates(u"\uD800x\uDFFF"))
    def visit_CallNode(self, node):
        if isinstance(node.function, ExprNodes.NameNode) and \
                node.function.name == u"DAAPObject":

            # Make sure we only convert DAAPObject(x, y) calls, nothing more.
            if len(node.args) == 2:
                code = daap_data.dmap_names[node.args[0].value]
                itype = daap_data.dmap_code_types[code][1]

                node.function.name = self.context.intern_ustring(
                    u"SpeedyDAAPObject")
                node.args[0] = ExprNodes.StringNode(
                    node.pos, value=StringEncoding.BytesLiteral(code))
                node.args.insert(1, ExprNodes.IntNode(
                    node.pos, value=str(itype)))

        # Visit method body.
        self.visitchildren(node)

        return node
Example #6
0
 def visit_Str(self, node):
     return StringNode(
         self.loc(node),
         value=node.s,
         unicode_value=StringEncoding.EncodedString(node.s),
     )