
Hello. I am writing my own Yhi-Bytecode backend. I wish to minimize the number of indirection checks, and the bytecode.xml is not clear on the subject. Some of the bytecodes, eg INT_SWITCH, require the node they are applied to, to be 'evaluated'. EVAL takes a node and returns an equivalent evaluated node. However in the current implementation (Yhi) EVAL has the side-effect of making any other reference to the original node become evaluated. For instance, this is "legal": not: PUSH_ARG_0 EVAL POP_1 PUSH_ZAP_ARG_0 JUMP_FALSE L2 POP_1 PUSH_CON_0 RETURN L2: POP_1 PUSH_CON_1 RETURN { Prelude.False, Prelude.True } Specifically, I have in mind an implementation where indirections are NEVER automatically followed, and only EVAL and RETURN_EVAL (and for efficiency perhaps APPLY) check for them, returning the targets as the evaluated nodes. Thus in the above example, the value pushed by PUSH_ZAP_ARG_0 would be an indirection node, not False in any case, so our 'not' would mis-behave as 'const False'. Does any yhc generated code rely on this (mis?) feature? Does anyone (note that I do NOT say 'else') think this is a misfeature? Stefan