Bytecode compound assign for implicit this member
This commit is contained in:
parent
938503fdd4
commit
2c2468b672
@ -1006,6 +1006,19 @@ class BytecodeCompiler(
|
|||||||
updateSlotType(result, SlotType.OBJ)
|
updateSlotType(result, SlotType.OBJ)
|
||||||
return CompiledValue(result, SlotType.OBJ)
|
return CompiledValue(result, SlotType.OBJ)
|
||||||
}
|
}
|
||||||
|
val implicitTarget = ref.target as? ImplicitThisMemberRef
|
||||||
|
if (implicitTarget != null) {
|
||||||
|
val nameId = builder.addConst(BytecodeConst.StringVal(implicitTarget.name))
|
||||||
|
if (nameId > 0xFFFF) return compileEvalRef(ref)
|
||||||
|
val current = allocSlot()
|
||||||
|
val result = allocSlot()
|
||||||
|
val rhs = compileRef(ref.value) ?: return compileEvalRef(ref)
|
||||||
|
builder.emit(Opcode.GET_THIS_MEMBER, nameId, current)
|
||||||
|
builder.emit(objOp, current, rhs.slot, result)
|
||||||
|
builder.emit(Opcode.SET_THIS_MEMBER, nameId, result)
|
||||||
|
updateSlotType(result, SlotType.OBJ)
|
||||||
|
return CompiledValue(result, SlotType.OBJ)
|
||||||
|
}
|
||||||
val indexTarget = ref.target as? IndexRef
|
val indexTarget = ref.target as? IndexRef
|
||||||
if (indexTarget != null) {
|
if (indexTarget != null) {
|
||||||
val receiver = compileRefWithFallback(indexTarget.targetRef, null, Pos.builtIn) ?: return null
|
val receiver = compileRefWithFallback(indexTarget.targetRef, null, Pos.builtIn) ?: return null
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user