blitz-research / blitzmax

BlitzMax

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Array casting issue

davecamp opened this issue · comments

I have found an issue with casting to and from 'type array' and 'Object array'. In this example I create an array of 'typeb'. I get the array by 'Object[]'. I can then cast to an array of 'typea[]' - which I would expect to be invalid and end up as 'Null'? I can then interate throught the returned and cast array using an iterator of 'typea' which of course shows me the data from a 'typeb' - as the array was originally a 'typeb[]'.
I'm not always so good with explaining so here's the example...

Strict

Type typea
	Field a_a:Int
	Field a_b:Int
	Field a_c:Int
	
	Method debug()
		Print "typea"
	EndMethod
EndType

Type typeb
	Field b_a:Int
	Field b_b:Int
	Field b_c:Int
	
	Method debug()
		Print "typeb"
	EndMethod
EndType

Type container
	Field data:typeb[]
	
	Method New()
		For Local i:Int = 0 Until 10
			data :+ [New typeb]
		Next
	EndMethod
	
	Method getdata:Object[]()
		Return data
	EndMethod
EndType



Local con:container = New container
Local data:typea[] = typea[](con.getdata()) ' This Local data appears valid but is actually a 'typeb[]'

For Local t:typea = EachIn data
	Print t.a_a ' I can access the 't' using typea fields but they are actually referencing a 'typeb' object
	t.debug()
Next

A safe implementation of such casts may be possible with Reflection or suggestions in the community forum thread may help work around this known limitation of BlitzMax.