[Issue 19064] [REG2.081] Vibe.d's InterfaceProxy no longer works

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Jul 5 13:10:20 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=19064

--- Comment #1 from Seb <greeenify at gmail.com> ---
Managed to find the root cause of the regression:

cat << EOF > minimal.d
enum IOMode { all}

struct blocking {}

interface InputStream {
        @safe:

        @property bool empty();

        @property ulong leastSize();

        @property bool dataAvailableForRead();

        const(ubyte)[] peek();

        size_t read(scope ubyte[] dst, IOMode mode);
        final void read(scope ubyte[] dst) { auto n = read(dst, IOMode.all);
assert(n == dst.length); }
}


interface OutputStream {
        @safe:

        size_t write(in ubyte[] bytes, IOMode mode);
        final void write(in ubyte[] bytes) { auto n = write(bytes, IOMode.all);
assert(n == bytes.length); }
        final void write(in char[] bytes) { write(cast(const(ubyte)[])bytes); }

        void flush();

        void finalize();
}

interface Stream : InputStream, OutputStream {
}


interface ConnectionStream : Stream {
        @safe:

        @property bool connected() const;
        void close();
}

static foreach (member; __traits(allMembers, ConnectionStream))
{
    pragma(msg, __traits(getOverloads, ConnectionStream, member));
}
EOF

with 2.080.1:

---
tuple(connected)                                                          
tuple(close)
tuple(empty)
tuple(leastSize)
tuple(dataAvailableForRead)
tuple(peek)
tuple(read, read)
tuple(write, write, write)
tuple(flush)
tuple(finalize)
---

with 2.081.0:

---
tuple()
tuple()
tuple(empty)
tuple(leastSize)
tuple(dataAvailableForRead)
tuple(peek)
tuple(read, read)
tuple(write, write, write)
tuple(flush)
tuple(finalize)
---

That's why the proxy-wrapping doesn't work.

--


More information about the Digitalmars-d-bugs mailing list