dlang bug - accessing module variable from method segfaults only when using module reference directly

Chris Katko ckatko at gmail.com
Fri Jul 1 13:44:20 UTC 2022


On Friday, 1 July 2022 at 13:28:26 UTC, Chris Katko wrote:
> ...wait, does "world" not 'exist' until after the constructor 
> finishes? Is that's what's going on? But then why does it 
> 'exist' when I send it directly? Is it only "registered" with 
> the module once this() finishes or something like that?

Yep, that's it.

moving all code in world.this() to world.initialize() and 
immediately calling initialize, works fine.

````D
g.world = new g.world_t; // code would crash here
g.world.initialize();  // doesn't crash if moved here

class world
{
this(){}
void initialize(){/*...*/}
}

class elf : unit
	{
	this(pair _pos, atlasHandler atlas/*not used*/)
		{		
		super(0, _pos, pair(0, 0), g.dude_bmp);
		anim = new animation(1, elf_coords, g.world.atlas); //not 
crashing now
		}
	}
````

It appears module access to a class is broken until the 
constructor finishes.


More information about the Digitalmars-d-learn mailing list