[M3commit] CVS Update: cm3

Jay Krell jkrell at elego.de
Sun Oct 3 08:38:34 CEST 2010


CVSROOT:	/usr/cvs
Changes by:	jkrell at birch.	10/10/03 08:38:34

Modified files:
	cm3/m3-sys/m3cc/gcc/gcc/m3cg/: parse.c 

Log message:
	enable debugging of enums, in stock gdb
	
	start code for debugging of globals, which are always embedded in global structs
	
	debugging of structs has the indirection off wrong, for example:
	
	t.r1 := 2;
	t.r2 := 3;
	t.r3 := 10;
	
	(gdb) p *t
	$4 = (struct Main.T1 *) 0xa32
	
	oops. To be fixed shortly.
	
	There are probably many cases that don't debug correctly,
	because typenames, subranges, and esp. packing probably
	aren't handled correctly. The code is careful given
	an untyped integer, not to assign it a type of a different
	types.
	
	That is, when the frontend gives us:
	
	TYPE typecode = BITS 20 FOR [...]
	VAR tc:typecode;
	
	and it tells backend tc is a word32 of type typecode,
	we ignore the stronger type and just say it is word32.
	Not doing that was caused me a lot of grief/debugging/staring
	at code.
	
	Since this is a subrange and not an enum anyway, not clear
	we should do anything different. Subranges aren't really types,
	unless, e.g. you wanted the backend to generate the range checks
	(which isn't crazy, as it could optimize away redundant checks).
	
	As well, what does it mean:
	
	TYPE Color={Red,Blue};
	TYPE T1 = BITS 2 FOR Color;
	TYPE T2 = BITS 8 FOR Color;
	TYPE T3 = BITS 800 FOR Color;
	
	Currently enum names are probably wrong, they show as Red, Blue
	in this example, probably should be Interface.Color.Red.
	
	same some pointer overhead in backend
	
	0 => NULL a bit more
	
	add function m3_make_integer_type for maybe future use, that
	can create integers of any number of bits from 1 to 64
	
	remove some more signed math




More information about the M3commit mailing list