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



Reply via email to