コード例 #1
0
        public override void Compile(ICompileContext context)
        {
            var success = context.Success ?? Label();
            var cut     = context.Cache(Constant(false));

            foreach (var option in _options)
            {
                var savePoint = context.Save();
                context.Child(option, null, context.Result, success, savePoint, cut);
                context.Restore(savePoint);
                context.Append(IfThen(cut, Goto(context.Failure)));
                context.Release(savePoint);
            }
            context.Release(cut);
            context.Fail();
            if (context.Success == null)
            {
                context.Append(Label(success));
            }
            context.Succeed();
        }