HaxeFoundation / HaxeFoundation/haxe

Haxe generates different/buggy HashLink bytecode in a case where IMap is used

Open
#8,867 1 comment 0 reactions 1 assignee Claimed by @ncannasse View on GitHub
platform-hl
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.