Is it possible to set/override the name of the source file when piping it into DMD via stdin?

Siarhei Siamashka siarhei.siamashka at gmail.com
Wed Dec 13 21:12:24 UTC 2023


On Wednesday, 13 December 2023 at 19:51:11 UTC, Adam D Ruppe 
wrote:
> On Wednesday, 13 December 2023 at 19:37:09 UTC, Siarhei 
> Siamashka wrote:
>> Now I'm curious. Is it possible to somehow communicate the 
>> real source file name to `dmd`, so that it shows up in the 
>> error log instead of "__stdin.d"?
>
> the sequence `#line "filename.d" 1` at the top of the thing 
> might do what you need.
>
> https://dlang.org/spec/lex.html#special-token-sequence
>
> might also suggest putting a `module` declaration in the file.

Thanks a lot! Looks like it does the job:

```D
/+dub.sdl:+/ #line 2 "example.d"
import std;
void main() {
   deliberate syntax error here
}
```

At least this way there's no undesired line numbers mismatch 
between different ways to compile and run the same file:

```
$ dub example.d
example.d(4,14): Error: found `error` when expecting `;` or `=`, 
did you mean `deliberate syntax = here`?
example.d(4,27): Error: found `}` when expecting `;` or `=`, did 
you mean `error here = End of File`?

$ cat example.d | dmd -run -
example.d(4): Error: found `error` when expecting `;` or `=`, did 
you mean `deliberate syntax = here`?
example.d(4): Error: found `}` when expecting `;` or `=`, did you 
mean `error here = End of File`?
```

But the compiler command line doesn't provide any alternative 
solutions to override the "__stdin.d" placeholder, right? My 
primary concern is that the file name and the special token or 
module directive have to match each other. And unless this is 
reliably enforced, it may become an additional headache to worry 
about.


More information about the Digitalmars-d-learn mailing list