__FILE__ and __LINE__ in case of import expression
Steven Schveighoffer
schveiguy at gmail.com
Fri Aug 21 21:06:11 UTC 2020
On 8/21/20 4:54 PM, Andrey Zherikov wrote:
> On Friday, 21 August 2020 at 20:44:27 UTC, Andrey Zherikov wrote:
>> Thanks for this link! I can use "#line" to fix line number but not
>> file name:
>>
>> file: 'foo.d-mixin-1', line: '6', module: 'test',
>> function: 'test.main', pretty function: 'int test.main(string[] args)',
>> file full path: 'C:\Users\andrey\foo.d-mixin-1'
>
> I can actually fix this issue as well.
>
> Changes in test.d:
>
> test(); // line #16 (1)
> mixin("#line 1 \"foo.d\"\n" ~ import("foo.d")); // line #17 (2)
> test(); // line #18 (3)
>
> Output:
>
> file: 'test.d', line: '16', module: 'test',
> function: 'test.main', pretty function: 'int test.main(string[] args)',
> file full path: 'C:\Users\andrey\test.d'
> file: 'foo.d', line: '6', module: 'test',
> function: 'test.main', pretty function: 'int test.main(string[] args)',
> file full path: 'C:\Users\andrey\foo.d'
> file: 'test.d', line: '18', module: 'test',
> function: 'test.main', pretty function: 'int test.main(string[] args)',
> file full path: 'C:\Users\andrey\test.d'
Was just in the process of responding with this technique!
I think what you probably did first is:
int main(string[] args)
{
test();
#line 1 "foo.d"
mixin(import("foo.d"));
return 0;
}
Which sets the line and file of test.d at that point. But when the mixin
happens, I believe the parser/lexer sets the filename, but does not set
the line number to something different.
The hybrid line number (original source line number + mixin line number)
seems like a bug to me.
-Steve
More information about the Digitalmars-d-learn
mailing list