示例#1
0
    def test_check_compiled_module(self):
        space = self.space
        mtime = 12345
        cpathname = _testfile(importing.get_pyc_magic(space), mtime)
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is not None
        ret.close()

        # check for wrong mtime
        ret = importing.check_compiled_module(space, cpathname, mtime + 1)
        assert ret is None

        # also check with expected mtime==0 (nothing special any more about 0)
        ret = importing.check_compiled_module(space, cpathname, 0)
        assert ret is None
        os.remove(cpathname)

        # check for wrong version
        cpathname = _testfile(importing.get_pyc_magic(space) + 1, mtime)
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is None

        # check for empty .pyc file
        f = open(cpathname, "wb")
        f.close()
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is None
        os.remove(cpathname)
示例#2
0
    def test_check_compiled_module(self):
        space = self.space
        mtime = 12345
        cpathname = _testfile(importing.get_pyc_magic(space), mtime)
        ret = importing.check_compiled_module(space,
                                              cpathname,
                                              mtime)
        assert ret is not None
        ret.close()

        # check for wrong mtime
        ret = importing.check_compiled_module(space,
                                              cpathname,
                                              mtime+1)
        assert ret is None
        os.remove(cpathname)

        # check for wrong version
        cpathname = _testfile(importing.get_pyc_magic(space)+1, mtime)
        ret = importing.check_compiled_module(space,
                                              cpathname,
                                              mtime)
        assert ret is None

        # check for empty .pyc file
        f = open(cpathname, 'wb')
        f.close()
        ret = importing.check_compiled_module(space,
                                              cpathname,
                                              mtime)
        assert ret is None
        os.remove(cpathname)
示例#3
0
    def test_check_compiled_module(self):
        space = self.space
        mtime = 12345
        cpathname = _testfile(importing.get_pyc_magic(space), mtime)
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is not None
        ret.close()

        # check for wrong mtime
        ret = importing.check_compiled_module(space, cpathname, mtime + 1)
        assert ret is None

        # also check with expected mtime==0 (nothing special any more about 0)
        ret = importing.check_compiled_module(space, cpathname, 0)
        assert ret is None
        os.remove(cpathname)

        # check for wrong version
        cpathname = _testfile(importing.get_pyc_magic(space) + 1, mtime)
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is None

        # check for empty .pyc file
        f = open(cpathname, 'wb')
        f.close()
        ret = importing.check_compiled_module(space, cpathname, mtime)
        assert ret is None
        os.remove(cpathname)
示例#4
0
 def test_pyc_magic_changes(self):
     py.test.skip("For now, PyPy generates only one kind of .pyc files")
     # test that the pyc files produced by a space are not reimportable
     # from another, if they differ in what opcodes they support
     allspaces = [self.space]
     for opcodename in self.space.config.objspace.opcodes.getpaths():
         key = 'objspace.opcodes.' + opcodename
         space2 = maketestobjspace(make_config(None, **{key: True}))
         allspaces.append(space2)
     for space1 in allspaces:
         for space2 in allspaces:
             if space1 is space2:
                 continue
             pathname = "whatever"
             mtime = 12345
             co = compile('x = 42', '?', 'exec')
             cpathname = _testfile(importing.get_pyc_magic(space1),
                                   mtime, co)
             w_modulename = space2.wrap('somemodule')
             stream = streamio.open_file_as_stream(cpathname, "rb")
             try:
                 w_mod = space2.wrap(Module(space2, w_modulename))
                 magic = importing._r_long(stream)
                 timestamp = importing._r_long(stream)
                 space2.raises_w(space2.w_ImportError,
                                 importing.load_compiled_module,
                                 space2,
                                 w_modulename,
                                 w_mod,
                                 cpathname,
                                 magic,
                                 timestamp,
                                 stream.readall())
             finally:
                 stream.close()
示例#5
0
文件: __init__.py 项目: charred/pypy
 def setup_after_space_initialization(self):
     """NOT_RPYTHON"""
     if not self.space.config.translating:
         self.extra_interpdef('interp_pdb', 'interp_magic.interp_pdb')
     if self.space.config.objspace.std.withmethodcachecounter:
         self.extra_interpdef('method_cache_counter',
                              'interp_magic.method_cache_counter')
         self.extra_interpdef('reset_method_cache_counter',
                              'interp_magic.reset_method_cache_counter')
         if self.space.config.objspace.std.withmapdict:
             self.extra_interpdef('mapdict_cache_counter',
                                  'interp_magic.mapdict_cache_counter')
     PYC_MAGIC = get_pyc_magic(self.space)
     self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
     #
     try:
         from rpython.jit.backend import detect_cpu
         model = detect_cpu.autodetect()
         self.extra_interpdef('cpumodel', 'space.wrap(%r)' % model)
     except Exception:
         if self.space.config.translation.jit:
             raise
         else:
             pass   # ok fine to ignore in this case
     #
     if self.space.config.translation.jit:
         features = detect_cpu.getcpufeatures(model)
         self.extra_interpdef('jit_backend_features',
                                 'space.wrap(%r)' % features)
示例#6
0
 def test_pyc_magic_changes(self):
     # test that the pyc files produced by a space are not reimportable
     # from another, if they differ in what opcodes they support
     allspaces = [self.space]
     for opcodename in self.space.config.objspace.opcodes.getpaths():
         key = 'objspace.opcodes.' + opcodename
         space2 = gettestobjspace(**{key: True})
         allspaces.append(space2)
     for space1 in allspaces:
         for space2 in allspaces:
             if space1 is space2:
                 continue
             pathname = "whatever"
             mtime = 12345
             co = compile('x = 42', '?', 'exec')
             cpathname = _testfile(importing.get_pyc_magic(space1), mtime,
                                   co)
             w_modulename = space2.wrap('somemodule')
             stream = streamio.open_file_as_stream(cpathname, "rb")
             try:
                 w_mod = space2.wrap(Module(space2, w_modulename))
                 magic = importing._r_long(stream)
                 timestamp = importing._r_long(stream)
                 space2.raises_w(space2.w_ImportError,
                                 importing.load_compiled_module, space2,
                                 w_modulename, w_mod, cpathname, magic,
                                 timestamp, stream.readall())
             finally:
                 stream.close()
示例#7
0
文件: moduledef.py 项目: Mu-L/pypy
    def setup_after_space_initialization(self):
        """NOT_RPYTHON"""
        if self.space.config.objspace.std.withmethodcachecounter:
            self.extra_interpdef('method_cache_counter',
                                 'interp_magic.method_cache_counter')
            self.extra_interpdef('reset_method_cache_counter',
                                 'interp_magic.reset_method_cache_counter')
            self.extra_interpdef('mapdict_cache_counter',
                                 'interp_magic.mapdict_cache_counter')
        PYC_MAGIC = get_pyc_magic(self.space)
        self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
        try:
            from rpython.jit.backend import detect_cpu
            model = detect_cpu.autodetect()
            self.extra_interpdef('cpumodel', 'space.wrap(%r)' % model)
        except Exception:
            if self.space.config.translation.jit:
                raise
            else:
                pass  # ok fine to ignore in this case

        if self.space.config.translation.jit:
            features = detect_cpu.getcpufeatures(model)
            self.extra_interpdef('jit_backend_features',
                                 'space.wrap(%r)' % features)
        if self.space.config.translation.reverse_debugger:
            self.extra_interpdef('revdb_stop', 'interp_magic.revdb_stop')
        else:
            self.extra_interpdef('revdb_stop', 'space.w_None')
示例#8
0
 def test_pyc_magic_changes(self):
     # skipped: for now, PyPy generates only one kind of .pyc file
     # per version.  Different versions should differ in
     # sys.implementation.cache_tag, which means that they'll look up
     # different .pyc files anyway.  See test_get_tag() in test_app.py.
     py.test.skip("For now, PyPy generates only one kind of .pyc files")
     # test that the pyc files produced by a space are not reimportable
     # from another, if they differ in what opcodes they support
     allspaces = [self.space]
     for opcodename in self.space.config.objspace.opcodes.getpaths():
         key = 'objspace.opcodes.' + opcodename
         space2 = maketestobjspace(make_config(None, **{key: True}))
         allspaces.append(space2)
     for space1 in allspaces:
         for space2 in allspaces:
             if space1 is space2:
                 continue
             pathname = "whatever"
             mtime = 12345
             co = compile('x = 42', '?', 'exec')
             cpathname = _testfile(space1, importing.get_pyc_magic(space1),
                                   mtime, co)
             w_modulename = space2.wrap('somemodule')
             stream = streamio.open_file_as_stream(cpathname, "rb")
             try:
                 w_mod = space2.wrap(Module(space2, w_modulename))
                 magic = _r_long(stream)
                 timestamp = _r_long(stream)
                 space2.raises_w(space2.w_ImportError,
                                 importing.load_compiled_module, space2,
                                 w_modulename, w_mod, cpathname, magic,
                                 timestamp, stream.readall())
             finally:
                 stream.close()
示例#9
0
 def can_use_pyc(self, space, filename, magic, timestamp):
     if magic != importing.get_pyc_magic(space):
         return False
     if self.check_newer_pyfile(space, filename[:-1], timestamp):
         return False
     if not self.check_compatible_mtime(space, filename, timestamp):
         return False
     return True
示例#10
0
 def can_use_pyc(self, space, filename, magic, timestamp):
     if magic != importing.get_pyc_magic(space):
         return False
     if self.check_newer_pyfile(space, filename[:-1], timestamp):
         return False
     if not self.check_compatible_mtime(space, filename, timestamp):
         return False
     return True
示例#11
0
def get_magic(space):
    x = importing.get_pyc_magic(space)
    a = x & 0xff
    x >>= 8
    b = x & 0xff
    x >>= 8
    c = x & 0xff
    x >>= 8
    d = x & 0xff
    return space.newbytes(chr(a) + chr(b) + chr(c) + chr(d))
示例#12
0
def get_magic(space):
    x = importing.get_pyc_magic(space)
    a = x & 0xff
    x >>= 8
    b = x & 0xff
    x >>= 8
    c = x & 0xff
    x >>= 8
    d = x & 0xff
    return space.wrap(chr(a) + chr(b) + chr(c) + chr(d))
示例#13
0
文件: __init__.py 项目: alkorzt/pypy
 def setup_after_space_initialization(self):
     """NOT_RPYTHON"""
     if not self.space.config.translating:
         self.extra_interpdef('isfake', 'interp_magic.isfake')
         self.extra_interpdef('interp_pdb', 'interp_magic.interp_pdb')
     if self.space.config.objspace.std.withmethodcachecounter:
         self.extra_interpdef('method_cache_counter',
                              'interp_magic.method_cache_counter')
         self.extra_interpdef('reset_method_cache_counter',
                              'interp_magic.reset_method_cache_counter')
     PYC_MAGIC = get_pyc_magic(self.space)
     self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
示例#14
0
 def setup_after_space_initialization(self):
     """NOT_RPYTHON"""
     if not self.space.config.translating:
         self.extra_interpdef('isfake', 'interp_magic.isfake')
         self.extra_interpdef('interp_pdb', 'interp_magic.interp_pdb')
     if self.space.config.objspace.std.withmethodcachecounter:
         self.extra_interpdef('method_cache_counter',
                              'interp_magic.method_cache_counter')
         self.extra_interpdef('reset_method_cache_counter',
                              'interp_magic.reset_method_cache_counter')
     PYC_MAGIC = get_pyc_magic(self.space)
     self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
示例#15
0
 def make_pyc(cls, space, co, mtime):
     data = marshal.dumps(co)
     if type(mtime) is type(0.0):
         # Mac mtimes need a bit of special casing
         if mtime < 0x7fffffff:
             mtime = int(mtime)
         else:
             mtime = int(-0x100000000L + long(mtime))
     s = StringIO()
     try:
         _w_long(s, get_pyc_magic(space))
     except AttributeError:
         import imp
         s.write(imp.get_magic())
     pyc = s.getvalue() + struct.pack("<i", int(mtime)) + data
     return pyc
示例#16
0
 def make_pyc(cls, space, co, mtime):
     data = marshal.dumps(co)
     if type(mtime) is type(0.0):
         # Mac mtimes need a bit of special casing
         if mtime < 0x7fffffff:
             mtime = int(mtime)
         else:
             mtime = int(-0x100000000L + long(mtime))
     s = StringIO()
     try:
         _w_long(s, get_pyc_magic(space))
     except AttributeError:
         import imp
         s.write(imp.get_magic())
     pyc = s.getvalue() + struct.pack("<i", int(mtime)) + data
     return pyc
示例#17
0
    def setup_after_space_initialization(self):
        """NOT_RPYTHON"""
        if not self.space.config.translating:
            self.extra_interpdef("isfake", "interp_magic.isfake")
            self.extra_interpdef("interp_pdb", "interp_magic.interp_pdb")
        if self.space.config.objspace.std.withmethodcachecounter:
            self.extra_interpdef("method_cache_counter", "interp_magic.method_cache_counter")
            self.extra_interpdef("reset_method_cache_counter", "interp_magic.reset_method_cache_counter")
            if self.space.config.objspace.std.withmapdict:
                self.extra_interpdef("mapdict_cache_counter", "interp_magic.mapdict_cache_counter")
        PYC_MAGIC = get_pyc_magic(self.space)
        self.extra_interpdef("PYC_MAGIC", "space.wrap(%d)" % PYC_MAGIC)
        #
        from pypy.jit.backend import detect_cpu

        model = detect_cpu.autodetect_main_model_and_size()
        self.extra_interpdef("cpumodel", "space.wrap(%r)" % model)
示例#18
0
 def test_read_compiled_module(self):
     space = self.space
     mtime = 12345
     co = compile("x = 42", "?", "exec")
     cpathname = _testfile(importing.get_pyc_magic(space), mtime, co)
     stream = streamio.open_file_as_stream(cpathname, "rb")
     try:
         stream.seek(8, 0)
         w_code = importing.read_compiled_module(space, cpathname, stream.readall())
         pycode = w_code
     finally:
         stream.close()
     assert type(pycode) is pypy.interpreter.pycode.PyCode
     w_dic = space.newdict()
     pycode.exec_code(space, w_dic, w_dic)
     w_ret = space.getitem(w_dic, space.wrap("x"))
     ret = space.int_w(w_ret)
     assert ret == 42
示例#19
0
 def test_load_compiled_module_nopathname(self):
     space = self.space
     mtime = 12345
     co = compile('x = 42', '?', 'exec')
     cpathname = _testfile(space, importing.get_pyc_magic(space), mtime, co)
     w_modulename = space.wrap('somemodule')
     stream = streamio.open_file_as_stream(cpathname, "rb")
     try:
         w_mod = space.wrap(Module(space, w_modulename))
         magic = _r_long(stream)
         timestamp = _r_long(stream)
         w_ret = importing.load_compiled_module(space, w_modulename, w_mod,
                                                None, magic, timestamp,
                                                stream.readall())
     finally:
         stream.close()
     filename = space.getattr(w_ret, space.wrap('__file__'))
     assert space.str_w(filename) == u'?'
示例#20
0
 def test_load_compiled_module(self):
     space = self.space
     mtime = 12345
     co = compile("x = 42", "?", "exec")
     cpathname = _testfile(importing.get_pyc_magic(space), mtime, co)
     w_modulename = space.wrap("somemodule")
     stream = streamio.open_file_as_stream(cpathname, "rb")
     try:
         w_mod = space.wrap(Module(space, w_modulename))
         magic = importing._r_long(stream)
         timestamp = importing._r_long(stream)
         w_ret = _load_compiled_module(space, w_modulename, w_mod, cpathname, magic, timestamp, stream.readall())
     finally:
         stream.close()
     assert w_mod is w_ret
     w_ret = space.getattr(w_mod, space.wrap("x"))
     ret = space.int_w(w_ret)
     assert ret == 42
示例#21
0
 def setup_after_space_initialization(self):
     """NOT_RPYTHON"""
     if not self.space.config.translating:
         self.extra_interpdef('isfake', 'interp_magic.isfake')
         self.extra_interpdef('interp_pdb', 'interp_magic.interp_pdb')
     if self.space.config.objspace.std.withmethodcachecounter:
         self.extra_interpdef('method_cache_counter',
                              'interp_magic.method_cache_counter')
         self.extra_interpdef('reset_method_cache_counter',
                              'interp_magic.reset_method_cache_counter')
         if self.space.config.objspace.std.withmapdict:
             self.extra_interpdef('mapdict_cache_counter',
                                  'interp_magic.mapdict_cache_counter')
     PYC_MAGIC = get_pyc_magic(self.space)
     self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
     #
     from pypy.jit.backend import detect_cpu
     model = detect_cpu.autodetect_main_model_and_size()
     self.extra_interpdef('cpumodel', 'space.wrap(%r)' % model)
示例#22
0
 def test_read_compiled_module(self):
     space = self.space
     mtime = 12345
     co = compile('x = 42', '?', 'exec')
     cpathname = _testfile(space, importing.get_pyc_magic(space), mtime, co)
     stream = streamio.open_file_as_stream(cpathname, "rb")
     try:
         stream.seek(8, 0)
         w_code = importing.read_compiled_module(space, cpathname,
                                                 stream.readall())
         pycode = w_code
     finally:
         stream.close()
     assert type(pycode) is PyCode
     w_dic = space.newdict()
     pycode.exec_code(space, w_dic, w_dic)
     w_ret = space.getitem(w_dic, space.wrap('x'))
     ret = space.int_w(w_ret)
     assert ret == 42
示例#23
0
 def setup_after_space_initialization(self):
     """NOT_RPYTHON"""
     if not self.space.config.translating:
         self.extra_interpdef('isfake', 'interp_magic.isfake')
         self.extra_interpdef('interp_pdb', 'interp_magic.interp_pdb')
     if self.space.config.objspace.std.withmethodcachecounter:
         self.extra_interpdef('method_cache_counter',
                              'interp_magic.method_cache_counter')
         self.extra_interpdef('reset_method_cache_counter',
                              'interp_magic.reset_method_cache_counter')
         if self.space.config.objspace.std.withmapdict:
             self.extra_interpdef('mapdict_cache_counter',
                                  'interp_magic.mapdict_cache_counter')
     PYC_MAGIC = get_pyc_magic(self.space)
     self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)
     #
     from pypy.jit.backend import detect_cpu
     model = detect_cpu.autodetect_main_model_and_size()
     self.extra_interpdef('cpumodel', 'space.wrap(%r)' % model)
示例#24
0
 def test_load_compiled_module(self):
     space = self.space
     mtime = 12345
     co = compile('x = 42', '?', 'exec')
     cpathname = _testfile(importing.get_pyc_magic(space), mtime, co)
     w_modulename = space.wrap('somemodule')
     stream = streamio.open_file_as_stream(cpathname, "rb")
     try:
         w_mod = space.wrap(Module(space, w_modulename))
         magic = importing._r_long(stream)
         timestamp = importing._r_long(stream)
         w_ret = importing.load_compiled_module(space, w_modulename, w_mod,
                                                cpathname, magic, timestamp,
                                                stream.readall())
     finally:
         stream.close()
     assert w_mod is w_ret
     w_ret = space.getattr(w_mod, space.wrap('x'))
     ret = space.int_w(w_ret)
     assert ret == 42
示例#25
0
 def can_use_pyc(self, space, filename, magic, buf):
     if magic != importing.get_pyc_magic(space):
         return False
     bitfield = importing._get_long(buf[4:8])
     if bitfield != 0:
         # Hash-based pyc. CPython (and we) currently refuse to handle
         # checked hash-based pycs in zips. We could validate hash-based
         # pycs against the source, but it seems likely that most people
         # putting hash-based pycs in a zipfile will use unchecked ones.
         w_imp = space.getbuiltinmodule("_imp")
         w_mode = space.getattr(w_imp,
                                space.newtext("check_hash_based_pycs"))
         mode = space.text_w(w_mode)
         if mode == "always":
             return False
         if mode == "default" and bitfield & 0b10:
             return False
         return True
     timestamp = importing._get_long(buf[8:12])
     if self.check_newer_pyfile(space, filename[:-1], timestamp):
         return False
     return True