HaxeFoundation / HaxeFoundation/haxe
Haxe generates different/buggy HashLink bytecode in a case where IMap is used
- Dominant language
- Haxe
- Stars
- 6.9k
- Forks
- 715
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 11
Description
This code crashes at runtime on the HashLink target:
```haxe
package ;
import haxe.ds.StringMap;
import haxe.Constraints.IMap;
class Main
{
public static function main():Void
{
var blobArray:Array = [ { cat: 1, dog: 2 }, { rat: 3 } ];
var dataArray:Array = new Array();
for (blobElement in blobArray)
{
var dataMap:IMap = new StringMap();
for (key in Reflect.fields(blobElement))
{
var mapBlobElement:Dynamic = Reflect.field(blobElement, key);
cast(dataMap, StringMap).set(key, mapBlobElement);
}
dataArray.push(dataMap);
}
var data:Array> = cast dataArray;
trace(
data.length == 2 &&
data[0]["cat"] == 1 &&
data[0]["dog"] == 2 &&
data[1]["rat"] == 3);
}
}
```
The error I see is a null reference exception when accessing `data[0]["cat"]`. However, changing line 15 to `var dataMap:Dynamic = new StringMap();` gets rid of the crash.
Contributor guide
Assessment
This issue has not been assessed yet.