mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-26 15:32:16 +00:00
Fix crash when assigning to bool class fields (#95)
With `Type.bool`, size is 1, so dividing by 8 isn't the right way to convert to byteSize. Instead, we need to use the `byteSize` property that does the proper ceiling division.
This commit is contained in:
parent
8997561670
commit
ce2bf00d62
1
NOTICE
1
NOTICE
@ -7,6 +7,7 @@ under the licensing terms detailed in LICENSE:
|
|||||||
* Max Graey <maxgraey@gmail.com>
|
* Max Graey <maxgraey@gmail.com>
|
||||||
* Igor Sbitnev <PinkaminaDianePie@gmail.com>
|
* Igor Sbitnev <PinkaminaDianePie@gmail.com>
|
||||||
* Norton Wang <me@nortonwang.com>
|
* Norton Wang <me@nortonwang.com>
|
||||||
|
* Alan Pierce <alangpierce@gmail.com>
|
||||||
|
|
||||||
Portions of this software are derived from third-party works licensed under
|
Portions of this software are derived from third-party works licensed under
|
||||||
the following terms:
|
the following terms:
|
||||||
|
@ -4411,7 +4411,7 @@ export class Compiler extends DiagnosticEmitter {
|
|||||||
return module.createBlock(null, [
|
return module.createBlock(null, [
|
||||||
module.createSetLocal(tempLocalIndex, valueWithCorrectType),
|
module.createSetLocal(tempLocalIndex, valueWithCorrectType),
|
||||||
module.createStore(
|
module.createStore(
|
||||||
type.size >> 3,
|
type.byteSize,
|
||||||
thisExpr,
|
thisExpr,
|
||||||
module.createGetLocal(tempLocalIndex, nativeType),
|
module.createGetLocal(tempLocalIndex, nativeType),
|
||||||
nativeType,
|
nativeType,
|
||||||
@ -4421,7 +4421,7 @@ export class Compiler extends DiagnosticEmitter {
|
|||||||
], nativeType);
|
], nativeType);
|
||||||
} else {
|
} else {
|
||||||
return module.createStore(
|
return module.createStore(
|
||||||
type.size >> 3,
|
type.byteSize,
|
||||||
thisExpr,
|
thisExpr,
|
||||||
valueWithCorrectType,
|
valueWithCorrectType,
|
||||||
nativeType,
|
nativeType,
|
||||||
|
16
tests/compiler/class-with-boolean-field.optimized.wat
Normal file
16
tests/compiler/class-with-boolean-field.optimized.wat
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
(module
|
||||||
|
(type $i (func (result i32)))
|
||||||
|
(memory $0 1)
|
||||||
|
(export "test" (func $class-with-boolean-field/test))
|
||||||
|
(export "memory" (memory $0))
|
||||||
|
(func $class-with-boolean-field/test (; 0 ;) (type $i) (result i32)
|
||||||
|
(local $0 i32)
|
||||||
|
(i32.store8
|
||||||
|
(get_local $0)
|
||||||
|
(i32.const 1)
|
||||||
|
)
|
||||||
|
(i32.load8_u
|
||||||
|
(get_local $0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
9
tests/compiler/class-with-boolean-field.ts
Normal file
9
tests/compiler/class-with-boolean-field.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class A {
|
||||||
|
boolValue: bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function test(): bool {
|
||||||
|
let a: A;
|
||||||
|
a.boolValue = true;
|
||||||
|
return a.boolValue;
|
||||||
|
}
|
20
tests/compiler/class-with-boolean-field.untouched.wat
Normal file
20
tests/compiler/class-with-boolean-field.untouched.wat
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
(module
|
||||||
|
(type $i (func (result i32)))
|
||||||
|
(global $HEAP_BASE i32 (i32.const 4))
|
||||||
|
(memory $0 1)
|
||||||
|
(export "test" (func $class-with-boolean-field/test))
|
||||||
|
(export "memory" (memory $0))
|
||||||
|
(func $class-with-boolean-field/test (; 0 ;) (type $i) (result i32)
|
||||||
|
(local $0 i32)
|
||||||
|
(nop)
|
||||||
|
(i32.store8
|
||||||
|
(get_local $0)
|
||||||
|
(i32.const 1)
|
||||||
|
)
|
||||||
|
(return
|
||||||
|
(i32.load8_u
|
||||||
|
(get_local $0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user