37 changes: 20 additions & 17 deletions thrift/lib/d/thrift/codegen/idlgen.d
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
*/
module thrift.codegen.idlgen;

import std.algorithm : find, join;
import std.algorithm : find, joiner;
import std.array : empty, front;
import std.conv : to;
import std.traits : EnumMembers, isSomeFunction, OriginalType,
Expand All @@ -44,7 +44,7 @@ import thrift.util.hashset;
alias Any!(isStruct, isException, isEnum, isService) isThriftEntity;

/**
* Returns an IDL string describing the passed »root« entities and all types
* Returns an IDL string describing the passed >>root<< entities and all types
* they depend on.
*/
template idlString(Roots...) if (allSatisfy!(isThriftEntity, Roots)) {
Expand All @@ -69,7 +69,7 @@ private {
)
) Types;

enum result = join(
enum result = joiner(
[
staticMap!(
enumIdlString,
Expand Down Expand Up @@ -237,9 +237,10 @@ private {
} else static if (is(FullyUnqual!T _ : HashSet!E, E)) {
alias CompositeTypeDeps!E CompositeTypeDeps;
} else static if (is(FullyUnqual!T _ : V[K], K, V)) {
alias TypeTuple!(CompositeTypeDeps!K, CompositeTypeDeps!V) CompositeTypeDeps;
} else static if (is(FullyUnqual!T == enum) || is(FullyUnqual!T == struct) ||
is(FullyUnqual!T : TException)
alias TypeTuple!(CompositeTypeDeps!K, CompositeTypeDeps!V)
CompositeTypeDeps;
} else static if (is(FullyUnqual!T == enum) || is(FullyUnqual!T == struct)
|| is(FullyUnqual!T : TException)
) {
alias TypeTuple!(FullyUnqual!T) CompositeTypeDeps;
} else {
Expand Down Expand Up @@ -304,10 +305,11 @@ template serviceIdlString(T) if (isService!T) {
result ~= to!string(id) ~ ": " ~ dToIdlType!ParamType ~ " " ~ paramName;

static if (havePM && !meta.front.params[i].defaultValue.empty) {
result ~= " = " ~ dToIdlConst(mixin(meta.front.params[i].defaultValue));
result ~= " = " ~
dToIdlConst(mixin(meta.front.params[i].defaultValue));
} else {
// Unfortunately, getting the default value for parameters from a
// function alias isn't possible we can't transfer the default
// function alias isn't possible - we can't transfer the default
// value to the IDL e.g. for interface Foo { void foo(int a = 5); }
// without the user explicitly declaring it in metadata.
}
Expand Down Expand Up @@ -374,7 +376,7 @@ template structIdlString(T) if (isStruct!T || isException!T) {
}
result ~= T.stringof ~ " {\n";

// The last automatically assigned id fields with no meta information
// The last automatically assigned id - fields with no meta information
// are assigned (in lexical order) descending negative ids, starting with
// -1, just like the Thrift compiler does.
short lastId;
Expand Down Expand Up @@ -420,13 +422,13 @@ template structIdlString(T) if (isStruct!T || isException!T) {

private {
// This very convoluted way of doing things was chosen because putting the
// static if directly into structIdlString caused »not evaluatable at compile
// time« errors to slip through even though typeof() was used, resp. the
// static if directly into structIdlString caused >>not evaluatable at compile
// time<< errors to slip through even though typeof() was used, resp. the
// condition to be true even though the value couldn't actually be read at
// compile time due to a @@BUG@@ in DMD 2.055.
// The extra »compiled« field in fieldInitA is needed because we must not try
// to use != if !is compiled as well (but was false), e.g. for floating point
// types.
// The extra >>compiled<< field in fieldInitA is needed because we must not
// try to use != if !is compiled as well (but was false), e.g. for floating
// point types.
template fieldInitA(T, string name) {
static if (mixin("T.init." ~ name) !is MemberType!(T, name).init) {
enum fieldInitA = mixin("T.init." ~ name);
Expand Down Expand Up @@ -460,8 +462,8 @@ private {
enum dToIdlType = "map<" ~ dToIdlType!K ~ ", " ~ dToIdlType!V ~ ">";
} else static if (is(FullyUnqual!T _ : HashSet!E, E)) {
enum dToIdlType = "set<" ~ dToIdlType!E ~ ">";
} else static if (is(FullyUnqual!T == struct) || is(FullyUnqual!T == enum) ||
is(FullyUnqual!T : TException)
} else static if (is(FullyUnqual!T == struct) || is(FullyUnqual!T == enum)
|| is(FullyUnqual!T : TException)
) {
enum dToIdlType = FullyUnqual!(T).stringof;
} else {
Expand Down Expand Up @@ -757,7 +759,8 @@ service Srv {
OneOfEach structMethod(),
void methodWithDefaultArgs(1: i32 something = 2, ),
oneway void onewayMethod(),
void exceptionMethod() throws (1: ExceptionWithAMap a, 2: ExceptionWithAMap b, ),
void exceptionMethod() throws (1: ExceptionWithAMap a,
2: ExceptionWithAMap b, ),
}
service ChildSrv extends Srv {
Expand Down
14 changes: 7 additions & 7 deletions thrift/lib/d/thrift/codegen/processor.d
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
*/
module thrift.codegen.processor;

import std.algorithm : find, join;
import std.algorithm : find, joiner;
import std.array : empty, front;
import std.conv : to;
import std.conv : to, text;
import std.traits : ParameterTypeTuple, ReturnType, Unqual;
import std.typetuple : allSatisfy, TypeTuple;
import std.variant : Variant;
Expand Down Expand Up @@ -68,7 +68,7 @@ import thrift.protocol.processor;
* // Low overhead.
* proc.process(tBinaryProtocol(tBufferTransport(someSocket)));
*
* // Not in the specialization list higher overhead.
* // Not in the specialization list - higher overhead.
* proc.process(tBinaryProtocol(tFramedTransport(someSocket)));
*
* // Same as above, but optimized for the Compact protocol backed by a
Expand Down Expand Up @@ -247,7 +247,7 @@ template TServiceProcessor(Interface, Protocols...) if (
}

immutable call = "iface_." ~ methodName ~
"(" ~ join(paramList, ", ") ~ ")";
"(" ~ joiner(paramList, ", ").text ~ ")";
if (is(ReturnType!(mixin("Interface." ~ methodName)) == void)) {
code ~= call ~ ";\n";
} else {
Expand Down Expand Up @@ -369,7 +369,7 @@ template TArgsStruct(Interface, string methodName) {
string[] fieldMetaCodes;
foreach (i, _; ParameterTypeTuple!(mixin("Interface." ~ methodName))) {
// If we have no meta information, just use param1, param2, etc. as
// field names, it shouldn't really matter anyway. 1-based »indexing«
// field names, it shouldn't really matter anyway. 1-based >>indexing<<
// is used to match the common scheme in the Thrift world.
string memberId;
string memberName;
Expand Down Expand Up @@ -402,7 +402,7 @@ template TArgsStruct(Interface, string methodName) {
}
}
immutable fieldMetaCode =
fieldMetaCodes.empty ? "" : "[" ~ join(fieldMetaCodes, ", ") ~ "]";
fieldMetaCodes.empty ? "" : "[" ~ joiner(fieldMetaCodes, ", ").text ~ "]";
code ~= "mixin TStructHelpers!(" ~ fieldMetaCode ~ ");\n";
code ~= "}\n";
return code;
Expand Down Expand Up @@ -489,7 +489,7 @@ template TResultStruct(Interface, string methodName) {
}

immutable fieldMetaCode =
fieldMetaCodes.empty ? "" : "[" ~ join(fieldMetaCodes, ", ") ~ "]";
fieldMetaCodes.empty ? "" : "[" ~ joiner(fieldMetaCodes, ", ").text ~ "]";
code ~= "mixin TStructHelpers!(" ~ fieldMetaCode ~ ");\n";
code ~= "}\n";
return code;
Expand Down
5 changes: 3 additions & 2 deletions thrift/lib/d/thrift/internal/ctfe.d
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ import std.traits;
* is evaluatable at compile time.
*
* There is a wealth of problems associated with the algorithm used (e.g. 5.0
* prints as 4.999…, incorrect rounding, etc.), but a better alternative should
* be included with the D standard library instead of implementing it here.
* prints as 4.999..., incorrect rounding, etc.), but a better alternative
* should be included with the D standard library instead of implementing it
* here.
*/
string ctfeToString(T)(T val) if (isFloatingPoint!T) {
if (val is T.nan) return "nan";
Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/internal/resource_pool.d
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ final class TResourcePool(Resource) {
}

/**
* Returns an »enriched« input range to iterate over the pool members.
* Returns an >>enriched<< input range to iterate over the pool members.
*/
struct Range {
/**
Expand Down Expand Up @@ -98,7 +98,7 @@ final class TResourcePool(Resource) {
auto fi = r in parent_.faultInfos_;

if (fi && fi.resetTime != fi.resetTime.init) {
// The argument to < needs to be an lvalue
// The argument to < needs to be an lvalue...
auto currentTick = TickDuration.currSystemTick;
if (fi.resetTime < currentTick) {
// The timeout expired, remove the resource from the list and go
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/internal/ssl_bio.d
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ private {
switch (cmd) {
case BIO_C_SET_FD:
// Note that close flag and "fd" are actually reversed here because we
// need 64 bit width for the pointer should probably drop BIO_set_fd
// need 64 bit width for the pointer - should probably drop BIO_set_fd
// altogether.
ttDestroy(b);
b.ptr = cast(void*)num;
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/internal/traits.d
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ unittest {
}

/**
* Adds »nothrow« to the type of the passed function pointer/delegate, if it
* Adds >>nothrow<< to the type of the passed function pointer/delegate, if it
* is not already present.
*
* Technically, assumeNothrow just performs a cast, but using it has the
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/protocol/base.d
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* types.
*
* Most parts of the protocol API are typically not used in client code, as
* the actual serialization code is generated by thrift.codegen.* the only
* the actual serialization code is generated by thrift.codegen.* - the only
* interesting thing usually is that there are protocols which can be created
* from transports and passed around.
*/
Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/protocol/processor.d
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,14 @@ interface TProcessorEventHandler {
/**
* Called before calling other callback methods.
*
* Expected to return some sort of »call context«, which is passed to all
* Expected to return some sort of >>call context<<, which is passed to all
* other callbacks for that function invocation.
*/
Variant createContext(string methodName, Variant connectionContext);

/**
* Called when handling the method associated with a context has been
* finished can be used to perform clean up work.
* finished - can be used to perform clean up work.
*/
void deleteContext(Variant callContext, string methodName);

Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/server/base.d
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class TServer {
* cancellation request has been triggered.
*
* Server implementations are expected to implement cancellation in a best-
* effort way usually, it should be possible to immediately stop accepting
* effort way - usually, it should be possible to immediately stop accepting
* connections and return after all currently active clients have been
* processed, but this might not be the case for every conceivable
* implementation.
Expand Down Expand Up @@ -135,7 +135,7 @@ interface TServerEventHandler {
Variant createContext(TProtocol input, TProtocol output);

/**
* Called when request handling for a client has been finished can be used
* Called when request handling for a client has been finished - can be used
* to perform clean up work.
*/
void deleteContext(Variant serverContext, TProtocol input, TProtocol output);
Expand Down
14 changes: 7 additions & 7 deletions thrift/lib/d/thrift/server/nonblocking.d
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

/**
* A non-blocking server implementation that operates a set of I/O threads (by
* default only one) and either does processing »in-line« or off-loads it to a
* default only one) and either does processing >>in-line<< or off-loads it to a
* task pool.
*
* It *requires* TFramedTransport to be used on the client side, as it expects
Expand Down Expand Up @@ -238,7 +238,7 @@ class TNonblockingServer : TServer {

/**
* The task pool to use for processing requests. If null, no additional
* threads are used and request are processed »inline«.
* threads are used and request are processed >>inline<<.
*
* Can safely be set even when the server is already running.
*/
Expand Down Expand Up @@ -390,7 +390,7 @@ private:
while (true) {
// It is lame to use exceptions for regular control flow (failing is
// excepted due to non-blocking mode of operation), but that's the
// interface std.socket offers
// interface std.socket offers...
Socket clientSocket;
try {
clientSocket = listenSocket_.accept();
Expand Down Expand Up @@ -480,7 +480,7 @@ private:
/**
* Determines if the server is currently overloaded.
*
* If the number of open connections or »processing« connections is over the
* If the number of open connections or >>processing<< connections is over the
* respective limit, the server will enter overload handling mode and a
* warning will be logged. If below values are below the hysteresis curve,
* this will cause the server to exit it again.
Expand Down Expand Up @@ -991,7 +991,7 @@ private {

// Acquire the data written to the transport.
// KLUDGE: To avoid copying, we simply cast the const away and
// modify the internal buffer of the TMemoryBuffer works with the
// modify the internal buffer of the TMemoryBuffer - works with the
// current implementation, but isn't exactly beautiful.
writeBuffer_ = cast(ubyte[])outputTransport_.getContents();

Expand Down Expand Up @@ -1097,7 +1097,7 @@ private {
auto bytesRead = socket_.read(
(cast(ubyte[])((&frameSize)[0 .. 1]))[readBufferPos_ .. $]);
if (bytesRead == 0) {
// Couldn't read anything, but we have been notified client
// Couldn't read anything, but we have been notified - client
// has disconnected.
close();
return;
Expand Down Expand Up @@ -1166,7 +1166,7 @@ private {
assert(writeBufferPos_ <= writeBuffer_.length);

if (writeBufferPos_ == writeBuffer_.length) {
// Nothing left to send this shouldn't happen, just move on.
// Nothing left to send - this shouldn't happen, just move on.
logInfo("WARNING: In send state, but no data to send.\n");
transition();
return;
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/server/taskpool.d
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ protected:
// another module.
// private {
/*
* The state of the »connection queue«, i.e. used for keeping track of how
* The state of the >>connection queue<<, i.e. used for keeping track of how
* many client connections are currently processed.
*/
struct QueueState {
Expand Down
3 changes: 2 additions & 1 deletion thrift/lib/d/thrift/server/transport/socket.d
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ Socket makeSocketAndListen(ushort port, int backlog, ushort retryLimit,
Address localAddr;
try {
// null represents the wildcard address.
auto addrInfos = getAddressInfo(null, to!string(port),
auto addrInfos = getAddressInfo("::", to!string(port),
AddressInfoFlags.PASSIVE, SocketType.STREAM, ProtocolType.TCP);
foreach (i, ai; addrInfos) {
// Prefer to bind to IPv6 addresses, because then IPv4 is listened to as
Expand All @@ -227,6 +227,7 @@ Socket makeSocketAndListen(ushort port, int backlog, ushort retryLimit,
}
}
} catch (Exception e) {
logError("could not bind to local addr: %s", e.toString());
throw new STE("Could not determine local address to listen on.",
STE.Type.RESOURCE_FAILED, __FILE__, __LINE__, e);
}
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/test/thrift_test_server.d
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ void main(string[] args) {

version (ThriftTestTemplates) {
// Only exercise the specialized template code paths if explicitly enabled
// to reduce memory consumption on regular test suite runs there should
// to reduce memory consumption on regular test suite runs - there should
// not be much that can go wrong with that specifically anyway.
alias TypeTuple!(TBufferedTransport, TFramedTransport, TServerHttpTransport)
AvailableTransports;
Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/test/transport_test.d
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ import thrift.transport.socket;
import thrift.transport.zlib;

/*
* Size generation helpers used to be able to run the same testing code
* Size generation helpers - used to be able to run the same testing code
* with both constant and random total/chunk sizes.
*/

Expand Down Expand Up @@ -609,7 +609,7 @@ void testBlocking(C)() if (isCoupledTransports!C) {
}
}

// A quick hack, for the sake of brevity
// A quick hack, for the sake of brevity...
float g_sizeMultiplier = 1;

version (Posix) {
Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/transport/base.d
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ interface TTransport {
* For potentially blocking data sources (e.g. sockets), read() will only
* block if no data is available at all. If there is some data available,
* but waiting for new data to arrive would be required to fill the whole
* buffer, the readily available data will be immediately returned use
* buffer, the readily available data will be immediately returned - use
* readAll() if you want to wait until the whole buffer is filled.
*
* Params:
Expand Down Expand Up @@ -118,7 +118,7 @@ interface TTransport {
*
* Note: You must call flush() to ensure the data is actually written,
* and available to be read back in the future. Destroying a TTransport
* object does not automatically flush pending data if you destroy a
* object does not automatically flush pending data - if you destroy a
* TTransport object with written but unflushed data, that data may be
* discarded.
*
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/transport/buffered.d
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ final class TBufferedTransport : TBaseTransport {
// directly read to the passed buffer. This probably doesn't occur too
// often in practice (and even if it does, the underlying transport
// probably cannot fulfill the request at once anyway), but it can't
// harm to try
// harm to try...
return transport_.read(buf);
}

Expand Down
25 changes: 14 additions & 11 deletions thrift/lib/d/thrift/transport/file.d
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
*/

/**
* Transports for reading from/writing to Thrift »log files«.
* Transports for reading from/writing to Thrift >>log files<<.
*
* These transports are not »stupid« sources and sinks just reading and
* These transports are not >>stupid<< sources and sinks just reading and
* writing bytes from a file verbatim, but organize the contents in the form
* of so-called »events«, which refers to the data written between two flush()
* of so-called >>events<<, which refers to the data written between two flush()
* calls.
*
* Chunking is supported, events are guaranteed to never span chunk boundaries.
Expand Down Expand Up @@ -538,7 +538,7 @@ private:
Duration readTimeout_;
size_t maxEventSize_;

// Read buffer lazily allocated on the first read().
// Read buffer - lazily allocated on the first read().
ubyte[] readBuffer_;
size_t readBufferSize_;

Expand Down Expand Up @@ -686,7 +686,7 @@ final class TFileWriterTransport : TBaseTransport {
/**
* The size of the chunks the file is divided into, in bytes.
*
* A single event (write call) never spans multiple chunks this
* A single event (write call) never spans multiple chunks - this
* effectively limits the event size to chunkSize - EventSize.sizeof.
*/
ulong chunkSize() @property {
Expand Down Expand Up @@ -846,7 +846,8 @@ private {
receiveTimeout(max(dur!"hnsecs"(0), maxFlushInterval - flushTimer.peek()),
(immutable(ubyte)[] data) {
while (errorOpening) {
logError("Writer thread going to sleep for %s µs due to IO errors",
logError("Writer thread going to sleep for %s microseconds "
"due to IO errors",
ioErrorSleepDuration.total!"usecs");

// Sleep for ioErrorSleepDuration, being ready to be interrupted
Expand Down Expand Up @@ -875,11 +876,12 @@ private {
// Make sure the event does not cross the chunk boundary by writing
// a padding consisting of zeroes if it would.
auto chunk1 = offset / chunkSize;
auto chunk2 = (offset + EventSize.sizeof + data.length - 1) / chunkSize;
auto chunk2 =
(offset + EventSize.sizeof + data.length - 1) / chunkSize;

if (chunk1 != chunk2) {
// TODO: The C++ implementation refetches the offset here to »keep
// in sync« – why would this be needed?
// TODO: The C++ implementation refetches the offset here to >>keep
// in sync<< - why would this be needed?
auto padding = cast(size_t)
((((offset / chunkSize) + 1) * chunkSize) - offset);
auto zeroes = new ubyte[padding];
Expand Down Expand Up @@ -918,7 +920,8 @@ private {
if (errorOpening) continue;

bool flush;
if (forceFlush || shutdownRequested || unflushedByteCount > maxFlushBytes) {
if (forceFlush || shutdownRequested ||
unflushedByteCount > maxFlushBytes) {
flush = true;
} else if (cast(Duration)flushTimer.peek() > maxFlushInterval) {
if (unflushedByteCount == 0) {
Expand Down Expand Up @@ -1083,7 +1086,7 @@ unittest {
// However, if the box is heavily loaded, some of the test runs can take
// longer. Additionally, on a Windows Server 2008 instance running in
// a VirtualBox VM, it has been observed that about a quarter of the runs
// takes (217 ± 1) ms, for reasons not yet known.
// takes (217 plus or minus 1) ms, for reasons not yet known.
if (sw.peek().msecs > 5) {
++numOver;
}
Expand Down
8 changes: 4 additions & 4 deletions thrift/lib/d/thrift/transport/socket.d
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ abstract class TSocketBase : TBaseTransport {
version (none) assert(written <= buf.length, text("Implementation wrote " ~
"more data than requested to?! (", written, " vs. ", buf.length, ")"));
} body {
assert(0, "DMD bug? Why would contracts work for interfaces, but not "
assert(0, "DMD bug? - Why would contracts work for interfaces, but not "
"for abstract methods? "
"(Error: function [] in and out contracts require function body");
"(Error: function [...] in and out contracts require function body");
}

/**
Expand Down Expand Up @@ -166,7 +166,7 @@ protected:
logError("Could not set socket option: %s", e);
}

// Just try to disable Nagle's algorithm this will fail if we are passed
// Just try to disable Nagle's algorithm - this will fail if we are passed
// in a non-TCP socket via the Socket-accepting constructor.
try {
socket_.setOption(SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, true);
Expand Down Expand Up @@ -365,7 +365,7 @@ class TSocket : TSocketBase {
auto lastErrno = getSocketErrno();

if (lastErrno == WOULD_BLOCK_ERRNO) {
// Not an exceptional error per se even with blocking sockets,
// Not an exceptional error per se - even with blocking sockets,
// EAGAIN apparently is returned sometimes on out-of-resource
// conditions (see the C++ implementation for details). Also, this
// allows using TSocket with non-blocking sockets e.g. in
Expand Down
2 changes: 1 addition & 1 deletion thrift/lib/d/thrift/util/cancellation.d
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ interface TCancellation {
*
* This design allows operations to pass the TCancellation on to sub-tasks,
* while making sure that the cancellation can only be triggered by the
* »outermost« instance waiting for the result.
* >>outermost<< instance waiting for the result.
*/
final class TCancellationOrigin : TCancellation {
this() {
Expand Down
4 changes: 2 additions & 2 deletions thrift/lib/d/thrift/util/future.d
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ interface TFuture(ResultType) {
* If the operation has already completed, the result is immediately
* returned.
*
* The result of this method is »alias this«'d to the interface, so that
* The result of this method is >>alias this<<'d to the interface, so that
* TFuture can be used as a drop-in replacement for a simple value in
* synchronous code.
*/
Expand Down Expand Up @@ -439,7 +439,7 @@ final class TFutureAggregatorRange(T) {
TickDuration.currSystemTick);

if (remaining <= dur!"hnsecs"(0)) {
// No time left, but still no element received we are empty now.
// No time left, but still no element received - we are empty now.
finished_ = true;
childCancellation_.trigger();
return true;
Expand Down