public override void Compile(ICompiler cmp, bool reverse) { if (group == null) { Alternate.Compile(cmp, reverse); return; } int gid = group.Number; LinkRef tail = cmp.NewLink(); if (FalseExpression == null) { // IfDefined :1 // <yes_exp> // 1: <tail> cmp.EmitIfDefined(gid, tail); TrueExpression.Compile(cmp, reverse); } else { // IfDefined :1 // <yes_expr> // Jump :2 // 1: <no_expr> // 2: <tail> LinkRef false_expr = cmp.NewLink(); cmp.EmitIfDefined(gid, false_expr); TrueExpression.Compile(cmp, reverse); cmp.EmitJump(tail); cmp.ResolveLink(false_expr); FalseExpression.Compile(cmp, reverse); } cmp.ResolveLink(tail); }