コード例 #1
0
ファイル: test_builtin.py プロジェクト: rlamy/hippyvm
def test_builder():
    def add(space, m, n):
        return space.newint(m + n)
    signature = ['space', int, int]
    builder = BuiltinFunctionBuilder(signature, add)
    assert builder.make_source() == """\
@unroll_safe
def php_add(interp, args_w, w_this, thisclass):
    nb_args = len(args_w)
    space = interp.space
    if nb_args != 2:
        arguments_exactly(interp, fname, 2, nb_args, error_handler)
    nb_args = 2  # constant below
    arg0 = space
    w_arg = args_w[0].deref_unique()
    try:
        arg1 = w_arg.as_int_arg(space)
    except ConvertError:
        raise argument_not(interp, "long", fname, 1, w_arg.tp, error_handler)
    w_arg = args_w[1].deref_unique()
    try:
        arg2 = w_arg.as_int_arg(space)
    except ConvertError:
        raise argument_not(interp, "long", fname, 2, w_arg.tp, error_handler)
    return (arg0, arg1, arg2)
"""

    def incr(space, a, increment=1):
        return space.newint(a + increment)
    signature = ['space', 'reference', Optional(int)]
    builder = BuiltinFunctionBuilder(signature, incr)
    expected = """\
@unroll_safe
def php_incr(interp, args_w, w_this, thisclass):
    nb_args = len(args_w)
    space = interp.space
    if nb_args < 1:
        warn_at_least(space, fname, 1, nb_args)
    if nb_args > 2:
        warn_at_most(space, fname, 2, nb_args)
    arg2 = default2
    arg0 = space
    w_arg = args_w[0]
    arg1 = check_reference(space, w_arg, fname)
    if nb_args > 1:
        w_arg = args_w[1].deref_unique()
        try:
            arg2 = w_arg.as_int_arg(space)
        except ConvertError:
            raise argument_not(interp, "long", fname, 2, w_arg.tp, error_handler)
    return (arg0, arg1, arg2)
"""
    assert builder.make_source() == expected

    def foo(space, fname, ctx=None):
        pass
    signature = ['space', FilenameArg(False), Optional(Nullable(StreamContextArg(False)))]
    builder = BuiltinFunctionBuilder(signature, foo)
    assert builder.make_source() == """\
コード例 #2
0
ファイル: php_dir.py プロジェクト: youaani/hippyvm

def _get_path(interp, this):
    return this.path


def _set_handle(interp, this, w_value):
    assert isinstance(w_value, W_DirResource)
    this.handle = w_value


def _get_handle(interp, this):
    return this.handle


@wrap(['interp', str, Optional(StreamContextArg(None))])
def dir(interp, directory, w_ctx=None):
    space = interp.space

    if w_ctx:
        if not interp.space.is_resource(w_ctx):
            interp.warn("dir() expects parameter 2 to be resource, %s given" %
                        interp.space.get_type_name(w_ctx.tp).lower())
            return interp.space.w_Null

    if directory == '':
        return interp.space.w_False

    if not os.path.isdir(directory):
        warn_str = "dir(" + directory + \
                   "): failed to open dir: No such file or directory"
コード例 #3
0
ファイル: spl.py プロジェクト: netyum/hippyvm
@wrap_method(['interp', ThisUnwrapper(W_SplFileInfo)],
             name='SplFileInfo::getLinkTarget',
             error_handler=handle_as_exception)
def get_linktarget(interp, this):
    filename = this.file_name
    assert filename is not None
    try:
        return interp.space.wrap(os.readlink(filename))
    except OSError, e:
        raise PHPException(k_RuntimeException.call_args(
            interp, [interp.space.wrap(
                "SplFileInfo::getLinkTarget(): %s" % os.strerror(e.errno))]))


@wrap_method(['interp', ThisUnwrapper(W_SplFileInfo), Optional(str),
              Optional(bool), Optional(Nullable(StreamContextArg(None)))],
             name='SplFileInfo::openFile', error_handler=handle_as_exception)
def openfile(interp, this, open_mode='r', use_include_path=False, w_ctx=None):
    if open_mode == '':
        raise PHPException(k_RuntimeException.call_args(
            interp, [interp.space.wrap(
                    "SplFileInfo::openFile(): Invalid parameters")]))

    args = [interp.space.wrap(this.file_name), interp.space.wrap(open_mode),
             interp.space.wrap(use_include_path)]
    if w_ctx:
        if not interp.space.is_resource(w_ctx):
            raise PHPException(k_RuntimeException.call_args(
                interp, [interp.space.wrap(
                    "SplFileInfo::openFile() expects "
                    "parameter 3 to be resource, %s given"
コード例 #4
0
ファイル: funcs.py プロジェクト: youaani/hippyvm
    """ Creates a pair of connected, indistinguishable socket streams"""
    raise NotImplementedError()


def stream_socket_recvfrom():
    """ Receives data from a socket, connected or not"""
    raise NotImplementedError()


def stream_socket_sendto():
    """ Sends a message to a socket, whether it is connected or not"""
    raise NotImplementedError()


@wrap(['interp', str, Optional('reference'), Optional('reference'),
       Optional(int), Optional(StreamContextArg(None))])
def stream_socket_server(interp, local_socket, w_ref_errno=None,
                         w_ref_errstr=None, flags=12, w_ctx=None):
    """ Create an Internet or Unix domain server socket
        ('STREAM_SERVER_BIND', 4),
        ('STREAM_SERVER_LISTEN', 8),
    """
    r = urlsplit(local_socket)
    space = interp.space
    bind = flags & 4 != 0
    listen = flags & 8 != 0

    w_res = W_SocketResource(space, r.host, r.port, r.scheme)
    if bind:
        w_res.bind()
    if listen:
コード例 #5
0
ファイル: spl.py プロジェクト: youaani/hippyvm
    try:
        return interp.space.wrap(os.readlink(filename))
    except OSError, e:
        raise PHPException(
            k_RuntimeException.call_args(interp, [
                interp.space.wrap(
                    "SplFileInfo::getLinkTarget(): %s" % os.strerror(e.errno))
            ]))


@wrap_method([
    'interp',
    ThisUnwrapper(W_SplFileInfo),
    Optional(str),
    Optional(bool),
    Optional(Nullable(StreamContextArg(None)))
],
             name='SplFileInfo::openFile',
             error_handler=handle_as_exception)
def openfile(interp, this, open_mode='r', use_include_path=False, w_ctx=None):
    if open_mode == '':
        raise PHPException(
            k_RuntimeException.call_args(interp, [
                interp.space.wrap(
                    "SplFileInfo::openFile(): Invalid parameters")
            ]))

    args = [
        interp.space.wrap(this.file_name),
        interp.space.wrap(open_mode),
        interp.space.wrap(use_include_path)
コード例 #6
0
ファイル: funcs.py プロジェクト: rlamy/hippyvm
def stream_socket_recvfrom():
    """ Receives data from a socket, connected or not"""
    raise NotImplementedError()


def stream_socket_sendto():
    """ Sends a message to a socket, whether it is connected or not"""
    raise NotImplementedError()


@wrap([
    'interp', str,
    Optional('reference'),
    Optional('reference'),
    Optional(int),
    Optional(StreamContextArg(None))
])
def stream_socket_server(interp,
                         local_socket,
                         w_ref_errno=None,
                         w_ref_errstr=None,
                         flags=12,
                         w_ctx=None):
    """ Create an Internet or Unix domain server socket
        ('STREAM_SERVER_BIND', 4),
        ('STREAM_SERVER_LISTEN', 8),
    """
    r = urlsplit(local_socket)
    space = interp.space
    bind = flags & 4 != 0
    listen = flags & 8 != 0