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(); }