Skip to content

Assignment chain leads to validation error #2674

Closed
@CountBleck

Description

@CountBleck

The following code should compile properly:

class Vec2 {
  x: f64 = 123
  y: f64 = 456

  test(z: f64): void {
    this.x = this.y = z
  }
}

const foo = new Vec2()
foo.test(1)

Instead, a validation error is reached, as seen here:

[wasm-validator error in function module/Vec2#test] f64 != i32: local.set type must be correct, on
(local.tee $2
 (local.get $0)
)
[wasm-validator error in function module/Vec2#test] local.set's value type must be correct, on
(local.tee $2
 (local.get $0)
)
[wasm-validator error in function module/Vec2#test] call param types must match, on
(call $module/Vec2#get:y
 (local.get $2)
)
(on argument 0)

The above editor link doesn't use the incremental runtime. If that is used instead, the compiler crashes:

▌ Whoops, the AssemblyScript compiler has crashed during compile :-(
▌ 
▌ Here is the stack trace hinting at the problem, perhaps it's useful?
▌ 
▌ AssertionError: assertion failed
▌ r@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:9:3
▌ Z.assert@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:9:3369
▌ tostack@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:17:28198
▌ operandsTostack@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:77830
▌ makeCallDirect@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:79602
▌ makeAssignment@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:67236
▌ compileAssignment@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:65908
▌ compileBinaryExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:43656
▌ compileExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:35667
▌ compileAssignment@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:65854
▌ compileBinaryExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:43656
▌ compileExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:35667
▌ compileExpressionStatement@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:26724
▌ compileStatement@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:23915
▌ compileStatements@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:24766
▌ compileFunctionBody@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:17525
▌ compileFunction@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:16029
▌ makeCallDirect@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:78560
▌ compileCallDirect@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:73025
▌ compileCallExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:70470
▌ compileExpression@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:35719
▌ compileExpressionStatement@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:26724
▌ compileStatement@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:23915
▌ compileTopLevelStatement@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:23560
▌ compileFile@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:10843
▌ compile@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:266:3889
▌ p0@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/assemblyscript.js:298:2124
▌ Me@https://cdn.jsdelivr.net/npm/assemblyscript@0.27.1/dist/asc.js:22218:8980
▌ async*compile@https://www.assemblyscript.org/editor#IyFvcHRpbWl6ZT1zaXplJnJ1bnRpbWU9c3R1YiZub0Fzc2VydApjbGFzcyBWZWMyIHsKICB4OiBmNjQgPSAxMjMKICB5OiBmNjQgPSA0NTYKCiAgemVybygpOiB2b2lkIHsKICAgIHRoaXMueCA9IHRoaXMueSA9IDAKICB9Cn0KCmNvbnN0IGZvbyA9IG5ldyBWZWMyKCkKCmZvby56ZXJvKCkKIyFodG1sCg==:868:13
▌ @https://www.assemblyscript.org/editor#IyFvcHRpbWl6ZT1zaXplJnJ1bnRpbWU9c3R1YiZub0Fzc2VydApjbGFzcyBWZWMyIHsKICB4OiBmNjQgPSAxMjMKICB5OiBmNjQgPSA0NTYKCiAgemVybygpOiB2b2lkIHsKICAgIHRoaXMueCA9IHRoaXMueSA9IDAKICB9Cn0KCmNvbnN0IGZvbyA9IG5ldyBWZWMyKCkKCmZvby56ZXJvKCkKIyFodG1sCg==:580:15
▌ setTimeout handler*@https://www.assemblyscript.org/editor#IyFvcHRpbWl6ZT1zaXplJnJ1bnRpbWU9c3R1YiZub0Fzc2VydApjbGFzcyBWZWMyIHsKICB4OiBmNjQgPSAxMjMKICB5OiBmNjQgPSA0NTYKCiAgemVybygpOiB2b2lkIHsKICAgIHRoaXMueCA9IHRoaXMueSA9IDAKICB9Cn0KCmNvbnN0IGZvbyA9IG5ldyBWZWMyKCkKCmZvby56ZXJvKCkKIyFodG1sCg==:579:23
▌ 
▌ 
▌ If you see where the error is, feel free to send us a pull request. If not,
▌ please let us know: https://github.com/AssemblyScript/assemblyscript/issues
▌ 
▌ Thank you!

Also, the z parameter isn't necessary. Using 0 instead also fails.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions