public override object Execute(IContext context, Stream writer) { if (_test != null && Util.ToBool(_test.Execute(context, writer))) { _statements.Execute(context, writer); } else if (_elseStatements != null) { _elseStatements.Execute(context, writer); } return(null); }
public override object Execute(IContext context, Stream writer) { if (_init != null) { EvalCollection(context, _init, writer); } while ((_test != null) && Util.ToBool(_test.Execute(context, writer))) { _blockStatement.Execute(context, writer); EvalCollection(context, _inc, writer); } return(null); }
public override object Execute(IContext context, Stream writer) { object obj = _collection.Execute(context, writer); object varData = null; if (context.ContainsKey(_varName)) { varData = context[_varName]; } if (obj is IEnumerable) { IEnumerable em = (IEnumerable)obj; int index = 0; bool isOdd = true; string indexName = _varName + "_index"; string oddName = _varName + "_odd"; object indexData; object oddData; context.TryGetValue(indexName, out indexData); context.TryGetValue(oddName, out oddData); foreach (object o in em) { try { context[_varName] = o; context[indexName] = index++; context[oddName] = isOdd; _blockStatement.Execute(context, writer); isOdd = !isOdd; context.Remove(_varName); context.Remove(indexName); context.Remove(oddName); } catch (BreakException) { break; } catch (ContinueException) { continue; } } if (indexData != null) { context[indexName] = indexData; } if (oddData != null) { context[oddName] = oddData; } } else { if (obj != null) { PropertyInfo[] properties = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo info in properties) { try { context[_varName] = info.GetValue(obj, null); _blockStatement.Execute(context, writer); context.Remove(_varName); } catch (BreakException) { break; } catch (ContinueException) { continue; } } } } if (varData != null) { context[_varName] = varData; } return(null); }