IMHO we need some more information in the ops files: 1) If an INT argument refers to a label/branch destination 2) For the event-checking code 3) For the safe run core
ad 1) e.g. inline op eq(in INT, in INT, inconst INT) { inline op eq(in INT, in INT, in_branch_const INT) {
The C<in_branch_const> translates during ops file mangling to C<inconst> *and* sets an appropriate flag in OpLib/core.pm, which is carried on into the op_info structure.
Currently imcc just estimates, if an opcode would branch and where the label is, which is bad (and error prone) - or more precisley, branching ops are known, but not all have an associated label.
ad 2) e.g.
op event invoke()
op event_after sleep()
would mean to check at or after that opcode, if events are to be handled. This would be a flag (or 2) in the op_info.
ad 3)
The safe run-core will very likely need to disallow opcodes per category similar as in "perldoc Opcode".
e.g. op :base_io print(...)
Comments welcome (and takers, if we agree) leo