On 8 June 2015 at 21:22, Yicong Huang <hengha....@gmail.com> wrote:

> By reading modules in pypy/module, finally we found out the workaround
> method.
>
> For most of modules in 'pypy/module', their interp code could not be
> imported or used by other module's app code.
> But there is special module '__pypy__', it exposed several interp
> functions, and those code are used by other module's app code.
>

​There's nothing special about __pypy__ for exposing interp-level code, the
modules in pypy/modules​ usually include interp level code.

​For example, the select module exposes the interp-level function
select_interp.select.  Here's how it does so:

​
https://bitbucket.org/pypy/pypy/src/b0c01840baea472c834635de627bb596c05d3bd5/pypy/module/select/__init__.py?at=default

The interpreter gateway has more options for exposing interp-level
functions and types to app-level​.

The workaround solution is simple: add one more interface in __pypy__
> module's __init__.py
>

​You should make a new module rather than adding to one existing one.​


>  PYC_MAGIC = get_pyc_magic(self.space)

 self.extra_interpdef('PYC_MAGIC', 'space.wrap(%d)' % PYC_MAGIC)


> Are the above code do the magic thing to expose interp code?
>

​They are exposing an integer value called PYC_MAGIC, which is the value
for determining what python the .pyc file was compiled for.​

​This is about exposing an integer rather than a function, it's probably
not relevant to you.


-- 
William Leslie

Notice:
Likely much of this email is, by the nature of copyright, covered under
copyright law.  You absolutely MAY reproduce any part of it in accordance
with the copyright law of the nation you are reading this in.  Any attempt
to DENY YOU THOSE RIGHTS would be illegal without prior contractual
agreement.
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to