mirror of
https://github.com/irmen/prog8.git
synced 2024-12-27 05:29:38 +00:00
docs about 'when' statement
This commit is contained in:
parent
14cabde5cf
commit
a85743f241
@ -416,15 +416,26 @@ So ``if_cc goto target`` will directly translate into the single CPU instruction
|
||||
Maybe in the future this will be a separate nested scope, but for now, that is
|
||||
only possible when defining a subroutine.
|
||||
|
||||
when statement (jumptable)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
when statement ('jump table')
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. attention::
|
||||
TODO: docs for this this must still be written.
|
||||
TODO: the code generator for this is not yet working.
|
||||
Instead of writing a bunch of sequential if-elseif statements, it is more readable to
|
||||
use a ``when`` statement. (It will also result in greatly improved assembly code generation)
|
||||
Use a ``when`` statement if you have a set of fixed choices that each should result in a certain
|
||||
action. It is possible to combine several choices to result in the same action::
|
||||
|
||||
Use a ``when`` statement if you have a set of choices that each should result in a certain
|
||||
action. It's more readable (and results in faster code) than using a lot of if / else statements.
|
||||
when value {
|
||||
4 -> c64scr.print("four")
|
||||
5 -> c64scr.print("five")
|
||||
10,20,30 -> {
|
||||
c64scr.print("ten or twenty or thirty")
|
||||
}
|
||||
else -> c64scr.print("don't know")
|
||||
}
|
||||
|
||||
The when-*value* can be any expression but the choice values have to evaluate to
|
||||
compile-time constant integers (bytes or words). They also have to be the same
|
||||
datatype as the when-value, otherwise no efficient comparison can be done.
|
||||
|
||||
|
||||
Assignments
|
||||
|
@ -610,28 +610,28 @@ The XX corresponds to one of the eigth branching instructions so the possibiliti
|
||||
``if_cs``, ``if_cc``, ``if_eq``, ``if_ne``, ``if_pl``, ``if_mi``, ``if_vs`` and ``if_vc``.
|
||||
It can also be one of the four aliases that are easier to read: ``if_z``, ``if_nz``, ``if_pos`` and ``if_neg``.
|
||||
|
||||
when statement (jumptable)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
.. attention::
|
||||
TODO: docs for this this must still be written.
|
||||
TODO: the code generator for this is not yet working.
|
||||
when statement ('jump table')
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
The structure of a when statement is like this::
|
||||
|
||||
The condition value can only be an integer datatype.
|
||||
The choice values must be constant integer values.
|
||||
when <expression> {
|
||||
<value(s)> -> <statement(s)>
|
||||
<value(s)> -> <statement(s)>
|
||||
...
|
||||
[ else -> <statement(s)> ]
|
||||
}
|
||||
|
||||
code example::
|
||||
The when-*value* can be any expression but the choice values have to evaluate to
|
||||
compile-time constant integers (bytes or words).
|
||||
The else part is optional.
|
||||
Choices can result in a single statement or a block of multiple statements in which
|
||||
case you have to use { } to enclose them::
|
||||
|
||||
when 4+A+Y {
|
||||
10 -> {
|
||||
c64scr.print("ten")
|
||||
}
|
||||
5 -> c64scr.print("five")
|
||||
30 -> c64scr.print("thirty")
|
||||
99 -> c64scr.print("nn")
|
||||
55 -> {
|
||||
; will be optimized away
|
||||
}
|
||||
else -> {
|
||||
c64scr.print("!??!\n")
|
||||
}
|
||||
when value {
|
||||
4 -> c64scr.print("four")
|
||||
5 -> c64scr.print("five")
|
||||
10,20,30 -> {
|
||||
c64scr.print("ten or twenty or thirty")
|
||||
}
|
||||
else -> c64scr.print("don't know")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user