Skip to content

Goto definition not reliable #303

@TurkeyMan

Description

@TurkeyMan

Hey there, just trying out your new build. Other recent issues appear to be fixed.
Today I wanted to try and get to the bottom of some of these issues with goto definition not working reliably.

The first sample case I bumped into looks like this:

char[] tconcat(Args...)(ref Args args)
{
	import urt.string.format : concat;
	char[] r = concat(cast(char[])tempMem[allocOffset..$], args);
	if (!r)
	{
		allocOffset = 0;
		r = concat(cast(char[])tempMem[0..TempMemSize / 2], args);
	}
	allocOffset += r.length;
	return r;
}

You can see the import urt.string.format : concat; there, and 2 calls to concat inside this function.
If I cursor over concat and goto definition, it doesn't go anywhere.
I figure the first thing to do is check the log for an error explanation, but it didn't say anything:

19:25:19 - ba64 -   schedule GetDefinition: D:\Code\monitor\src\urt\mem\temp.d
19:25:19 - ba64 - GetDefinitionResult: 
19:25:20 - ba64 -   schedule GetDefinition: D:\Code\monitor\src\urt\mem\temp.d
19:25:20 - ba64 - GetDefinitionResult: 
19:25:21 - ba64 -   schedule GetDefinition: D:\Code\monitor\src\urt\mem\temp.d
19:25:21 - ba64 - GetDefinitionResult: 
19:25:21 - ba64 -   schedule GetDefinition: D:\Code\monitor\src\urt\mem\temp.d
19:25:21 - ba64 - GetDefinitionResult: 

What's my next port of call to try and track this down?

I did wonder; given a template function without an instantiation like this, how does the frontend even perform semantic to determine what these local symbols are? Can DMD begin to meaningfully compile this code without knowing what Args is?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions