Thoughts about D
Steven Schveighoffer
schveiguy at yahoo.com
Thu Nov 30 14:35:23 UTC 2017
On 11/29/17 11:50 PM, Nicholas Wilson wrote:
> On Thursday, 30 November 2017 at 04:21:20 UTC, Steven Schveighoffer wrote:
>> On 11/29/17 10:29 PM, Walter Bright wrote:
>>> Another issue (I should check this again) was doing null checks on
>>> member function calls, which is not necessary since if they're null
>>> it'll seg fault.
>>
>> Just happened last release.
>>
>> https://dlang.org/changelog/2.077.0.html#removePreludeAssert
>
> That was specifically for constructors and destructors (i.e.
> (cast(Foo)null).__ctor() was the only way to trigger that assert) not
> member functions (of classes), which I believe is still part of the
> compiler.
Then either the changelog entry is wrong, or the fix was more
encompassing than the author/reviewers thought:
Stevens-MacBook-Pro:testd steves$ cat testprelude.d
struct S
{
int foo() { return 1; }
}
void main()
{
S s;
auto x = s.foo;
}
Stevens-MacBook-Pro:testd steves$ dvm use 2.076.1
Stevens-MacBook-Pro:testd steves$ dmd -vcg-ast testprelude.d
Stevens-MacBook-Pro:testd steves$ cat testprelude.d.cg
import object;
struct S
{
int foo()
{
assert(&this, "null this");
return 1;
}
}
void main()
{
S s = 0;
int x = s.foo();
return 0;
}
RTInfo!(S)
{
enum typeof(null) RTInfo = null;
}
Stevens-MacBook-Pro:testd steves$ dvm use 2.077.0
Stevens-MacBook-Pro:testd steves$ dmd -vcg-ast testprelude.d
Stevens-MacBook-Pro:testd steves$ cat testprelude.d.cg
import object;
struct S
{
int foo()
{
return 1;
}
}
void main()
{
S s = 0;
int x = s.foo();
return 0;
}
RTInfo!(S)
{
enum typeof(null) RTInfo = null;
}
-Steve
More information about the Digitalmars-d
mailing list