mirror of
https://github.com/irmen/prog8.git
synced 2024-07-03 23:29:58 +00:00
fix passing address of pass-by-reference assignment to a UWORD
This commit is contained in:
parent
8d0607ef58
commit
4825b4dc68
|
@ -48,7 +48,13 @@ internal class AssignmentAsmGen(private val program: Program, private val asmgen
|
||||||
val variable = assign.source.asmVarname
|
val variable = assign.source.asmVarname
|
||||||
when (assign.target.datatype) {
|
when (assign.target.datatype) {
|
||||||
DataType.UBYTE, DataType.BYTE -> assignVariableByte(assign.target, variable)
|
DataType.UBYTE, DataType.BYTE -> assignVariableByte(assign.target, variable)
|
||||||
DataType.UWORD, DataType.WORD -> assignVariableWord(assign.target, variable)
|
DataType.WORD -> assignVariableWord(assign.target, variable)
|
||||||
|
DataType.UWORD -> {
|
||||||
|
if(assign.source.datatype in PassByReferenceDatatypes)
|
||||||
|
assignAddressOf(assign.target, variable)
|
||||||
|
else
|
||||||
|
assignVariableWord(assign.target, variable)
|
||||||
|
}
|
||||||
DataType.FLOAT -> assignVariableFloat(assign.target, variable)
|
DataType.FLOAT -> assignVariableFloat(assign.target, variable)
|
||||||
DataType.STR -> assignVariableString(assign.target, variable)
|
DataType.STR -> assignVariableString(assign.target, variable)
|
||||||
else -> throw AssemblyError("unsupported assignment target type ${assign.target.datatype}")
|
else -> throw AssemblyError("unsupported assignment target type ${assign.target.datatype}")
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
%import conv
|
%import conv
|
||||||
|
|
||||||
; TODO add all other Elite's ships, show their name, advance to next ship on keypress
|
; TODO add all other Elite's ships, show their name, advance to next ship on keypress
|
||||||
; TODO doesn't draw anything on cx16 anymore...
|
|
||||||
|
|
||||||
main {
|
main {
|
||||||
|
|
||||||
|
@ -225,6 +224,8 @@ main {
|
||||||
|
|
||||||
shipdata {
|
shipdata {
|
||||||
|
|
||||||
|
%option force_output
|
||||||
|
|
||||||
; Ship model data converted from BBC Elite's Cobra MK 3
|
; Ship model data converted from BBC Elite's Cobra MK 3
|
||||||
; downloaded from http://www.elitehomepage.org/archive/index.htm
|
; downloaded from http://www.elitehomepage.org/archive/index.htm
|
||||||
|
|
||||||
|
|
|
@ -7,37 +7,17 @@ main {
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
|
|
||||||
; byte bb = 4
|
ubyte[100] array
|
||||||
; bb += sgn(bb+bb)
|
|
||||||
; txt.print_b(bb)
|
|
||||||
; txt.chrout('\n')
|
|
||||||
;
|
|
||||||
; word ww = 4
|
|
||||||
; ww += sgn(ww+ww)
|
|
||||||
; txt.print_w(ww)
|
|
||||||
; txt.chrout('\n')
|
|
||||||
|
|
||||||
float x = 4
|
memset(array, len(array)-1, 255)
|
||||||
x += abs(x+x)
|
|
||||||
floats.print_f(x)
|
ubyte xx
|
||||||
|
for xx in array {
|
||||||
|
txt.print_ubhex(xx, false)
|
||||||
|
txt.chrout(',')
|
||||||
|
}
|
||||||
txt.chrout('\n')
|
txt.chrout('\n')
|
||||||
|
|
||||||
x = 4
|
|
||||||
x += sgn(x+x) ; TODO missing byte->float cast in assembly??? Also fucks up stack
|
|
||||||
x += sgn(x+x) ; TODO missing byte->float cast in assembly??? Also fucks up stack
|
|
||||||
x += sgn(x+x) ; TODO missing byte->float cast in assembly??? Also fucks up stack
|
|
||||||
floats.print_f(x)
|
|
||||||
txt.chrout('\n')
|
|
||||||
|
|
||||||
; repeat 10 {
|
|
||||||
; float cosa = cos(t)
|
|
||||||
; float sina = sin(t)
|
|
||||||
; float cosb = cos(t*0.33)
|
|
||||||
; float sinb = sin(t*0.33)
|
|
||||||
; float cosc = cos(t*0.78)
|
|
||||||
; float sinc = sin(t*0.78)
|
|
||||||
; }
|
|
||||||
|
|
||||||
testX()
|
testX()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user