コード例 #1
0
        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);
        }