[Issue 17763] [scope][DIP1000] The compiler treats implicit and explicit static array slicing differently

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sat Aug 26 19:26:29 PDT 2017


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

Walter Bright <bugzilla at digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |INVALID

--- Comment #3 from Walter Bright <bugzilla at digitalmars.com> ---
(In reply to ZombineDev from comment #0)
> The problem is that the compiler disallows explicitly slicing a static array
> and passing the slice to a scope parameter, while if you rely on the
> implicit slicing it works without a problem.

Let's examine:

>     use(c);            // OK - this compiles.

The address of c is implicitly taken by its coercion to the parameter type of
Context[]. But this is allowed because the parameter is 'scope', and it cannot
escape.


>     use(c[]);          // NG - doesn't compile, though should be
>                        // equivalent to the statement above.

What's happening here is the semantic analysis is bottom up, meaning `c[]` is
evaluated without regard to what context it appears in. The compiler doesn't
see that the result is being passed as `scope`, and so assumes the worst, and
issues an error.

It is not a bug in the compiler.

Trying to add some form of top down in addition to bottom up is a huge increase
in complexity, and will produce all kinds of weird corner cases. You can reopen
it as an enhancement request if you prefer, but I don't think it is practical
to implement at least in the near future.

--


More information about the Digitalmars-d-bugs mailing list