www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Trying to understand a simple piece of code: dmd barray

reply Dibyendu Majumdar <mobile majumdar.org.uk> writes:
Hi,

I am trying to understand 
https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.

Two questions:

1. What does this mean and why is it needed?

line 95: alias array this;

2. The struct has no property called length - but this is 
referenced. Where does this come from?

Thank you

Regards
Mar 07 2020
parent reply drug <drug2004 bk.ru> writes:
07.03.2020 15:05, Dibyendu Majumdar пишет:
 Hi,
 
 I am trying to understand 
 https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
 
 Two questions:
 
 1. What does this mean and why is it needed?
 
 line 95: alias array this;
 
This means that `array` can be used instead of `this`
 2. The struct has no property called length - but this is referenced. 
 Where does this come from?
it comes from `array` being alias for `this`, see above
 
 Thank you
 
 Regards
Mar 07 2020
next sibling parent Steven Schveighoffer <schveiguy gmail.com> writes:
On 3/7/20 7:26 AM, drug wrote:
 07.03.2020 15:05, Dibyendu Majumdar пишет:
 Hi,

 I am trying to understand 
 https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.

 Two questions:

 1. What does this mean and why is it needed?

 line 95: alias array this;
This means that `array` can be used instead of `this`
To expand on this, the compiler basically substitutes the symbol aliased here for the item itself if all other members are a compiler error. So for example, if you have: barr.length; and barr has no member length, it tries: barr.array.length -Steve
Mar 07 2020
prev sibling parent reply Dibyendu Majumdar <mobile majumdar.org.uk> writes:
On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:

 I am trying to understand 
 https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
 
 Two questions:
 
 1. What does this mean and why is it needed?
 
 line 95: alias array this;
 
This means that `array` can be used instead of `this`
Hmm should not that change the meaning of this throughout the struct? is this good practice? Thank you
Mar 07 2020
next sibling parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 3/7/20 8:06 AM, Dibyendu Majumdar wrote:
 On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:
 
 I am trying to understand 
 https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.

 Two questions:

 1. What does this mean and why is it needed?

 line 95: alias array this;
This means that `array` can be used instead of `this`
Hmm should not that change the meaning of this throughout the struct? is this good practice?
No, it's simply a fallback. If the symbol doesn't work with this.symbol, try this.array.symbol. It's D's version of implicit conversion. You can make the alias this a no-arg function and it will try calling that function. -Steve
Mar 07 2020
parent Dibyendu Majumdar <d.majumdar gmail.com> writes:
On Saturday, 7 March 2020 at 14:33:29 UTC, Steven Schveighoffer 
wrote:
 It's D's version of implicit conversion.

 You can make the alias this a no-arg function and it will try 
 calling that function.
Okay thank you.
Mar 07 2020
prev sibling parent Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
On Saturday, 7 March 2020 at 13:06:39 UTC, Dibyendu Majumdar 
wrote:
 On Saturday, 7 March 2020 at 12:26:32 UTC, drug wrote:

 I am trying to understand 
 https://github.com/dlang/dmd/blob/master/src/dmd/backend/barray.d.
 
 Two questions:
 
 1. What does this mean and why is it needed?
 
 line 95: alias array this;
 
This means that `array` can be used instead of `this`
Hmm should not that change the meaning of this throughout the struct? is this good practice? Thank you
This is also a way of imitating inheritance in c-ish code without classes.
Mar 07 2020