# HG changeset patch # User William Astle # Date 1698726006 21600 # Node ID 2f97bfecffab9f642f99f246880622ac9468dcdd # Parent baead5689afc4d036ac0187d6334862447679876 Reorganize the operand matching routine diff -r baead5689afc -r 2f97bfecffab src/number.s --- a/src/number.s Mon Oct 30 20:48:29 2023 -0600 +++ b/src/number.s Mon Oct 30 22:20:06 2023 -0600 @@ -18,26 +18,28 @@ ; * If one or both operands are not numeric, raise a type mismatch ; The operands are in val0 and val1 val_matchtypes ldb val0+val.type ; get the type of first argument - cmpb #valtype_int ; is it integer? - beq val_matchtypes0 ; brif so - cmpb #valtype_float ; is it floating point? - beq val_matchtypes1 ; brif so + cmpb val1+val.type ; do types match? + bne val_matchtypes1 ; brif not + cmpb #valtype_int ; integer? + beq val_matchtypes0 ; brif so - it's good + cmpb #valtype_float ; floating point? + bne TMERROR ; brif not +val_matchtypes0 rts ; types match and are good TMERROR ldb #err_tm ; raise a type mismatch jmp ERROR -val_matchtypes0 ldb val1+val.type ; get type of second operand - cmpb #valtype_int ; is it integer? +val_matchtypes1 cmpb #valtype_float ; is first argument float? bne val_matchtypes2 ; brif not -val_matchtypes3 rts ; both types int - we're good so return -val_matchtypes2 cmpb #valtype_float ; is it floating point? - bne TMERROR ; brif not - raise error - ldx #val0 ; convert the first argument to floating point + ldb val1+val.type ; get second type + cmpb #valtype_int ; is it integer? + bne TMERROR ; brif not - don't know how to convert + ldx #val1 ; go convert val1 to floating point jmp fps_fromint -val_matchtypes1 ldb val1+val.type ; get second argument type +val_matchtypes2 cmpb #valtype_int ; are we an integer? + bne TMERROR ; brif not - we don't know how to convert + ldb val1+val.type ; get second type cmpb #valtype_float ; is it floating point? - beq val_matchtypes3 ; brif so - we're good - cmpb #valtype_int ; is it integer? - bne TMERROR ; brif not - invalid type combination - ldx #val1 ; convert the second argument to floating point + bne TMERROR ; brif not - we don't know how to convert + ldx #val0 ; convert val0 to floating point jmp fps_fromint ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Parse a number to either an integer or a floating point value and return the result in val0