方法内联时数组不会更改

Array doesn't change when method inlined

本文关键字:数组 方法      更新时间:2023-10-16

这是我的堆栈类的一部分。它在闪存中工作正常,但在 cpp/windows 中,推送方法并不总是有效。我不太了解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) -> []
}

push 被内联时,像 stack.push(0) 这样的东西并不总是改变数组,就像它的真实长度固定在 0 一样(但是,length变量确实会增加)。其他时候,它工作正常。如果我删除inline关键字,它始终运行良好。

内联时生成的 cpp (替换stack.push(0)):

::msg::utils::Stack tmp = this->stack;
::msg::utils::Stack _this = tmp;
Array< int > tmp1 = _this->arr;
int tmp2 = (_this->length)++;
tmp1[tmp2] = (int)0;

当不内联时(push()内):

Dynamic tmp = this->arr;
int tmp1 = (this->length)++;
Dynamic tmp2 = t;
hx::IndexRef((tmp).mPtr,tmp1) = tmp2;

我缺少什么C++吗?为什么内联代码大部分时间都有效,而其他时间却不起作用?

最新的 haxe、hxcpp、openfl 等。

这是一个

haxe/hxcpp错误。我将其简化为基本情况,事实证明,如果您将数组变量设置为新实例,它现在只能正常工作,这是我在其他地方意外做的。

https://github.com/HaxeFoundation/haxe/issues/4187