MSG*_*ero 6 c++ windows arrays haxe hxcpp
这是我的堆栈类的一部分.它在flash中工作正常,但在cpp/windows中,push方法并不总是有效.我不太了解C++,无法理解为什么它可能不一致.
var arr:Array<T>;
public var length(default, null):Int;
public function new() {
clear();
}
public inline function clear():Void {
arr = [];
length = 0;
}
public inline function push(t:T):Void {
// Log.trace(arr) -> []
arr[length++] = t;
// Log.trace(arr) -> []
}
Run Code Online (Sandbox Code Playgroud)
当push内联时,类似的东西stack.push(0)并不总是改变数组,就像它的真实长度固定为0(length然而变量确实增加).其他时候,它工作正常.如果我删除inline关键字,它一直正常工作.
内联(替换stack.push(0))时生成的cpp :
::msg::utils::Stack tmp = this->stack;
::msg::utils::Stack _this = tmp;
Array< int > tmp1 = _this->arr;
int tmp2 = (_this->length)++;
tmp1[tmp2] = (int)0;
Run Code Online (Sandbox Code Playgroud)
当没有内联(内部push())时:
Dynamic tmp = this->arr;
int tmp1 = (this->length)++;
Dynamic tmp2 = t;
hx::IndexRef((tmp).mPtr,tmp1) = tmp2;
Run Code Online (Sandbox Code Playgroud)
C++有没有我缺少的东西?为什么内联代码大多数时间都能工作,但之后却无法工作?
最新的haxe,hxcpp,openfl等
这是一个 haxe/hxcpp 错误。我将其简化为基本情况,事实证明,只有将数组变量设置为新实例,它现在才能正常工作,而我在其他地方无意中这样做了。
https://github.com/HaxeFoundation/haxe/issues/4187