public Value For() { using (var assistant = new ParameterAssistant(Arguments)) { var block = assistant.Block(); if (block != null) { assistant.IteratorParameter(); var count = 0; for (var current = start; current.CompareTo(stop) <= 0 && count++ < Runtime.MAX_LOOP; current = current.Succ()) { assistant.SetIteratorParameter(current); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return(null); } } } return(this); } }
public void Iterate(Lambda lambda) { using (var assistant = new ParameterAssistant(Arguments)) { var block = lambda.Block; if (block == null) { return; } assistant.IteratorParameter(lambda.Parameters); var count = 0; for (var current = start; current.CompareTo(stop) <= 0 && count++ < Runtime.MAX_LOOP; current = current.Succ()) { assistant.SetIteratorParameter(current); var text = block.Evaluate().Text; var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return; } Runtime.State.Print(text); } } }
public void Iterate(Lambda lambda) { using (var assistant = new ParameterAssistant(Arguments)) { var block = lambda.Block; if (block != null) { assistant.IteratorParameter(lambda.Parameters); var count = 0; if (start < stop) { for (var i = start; i <= stop && count++ < Runtime.MAX_LOOP; i += increment) { assistant.SetIteratorParameter(i); var record = block.Evaluate().Text; var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return; } Runtime.State.Print(record); } } else { for (var i = start; i >= stop && count++ < Runtime.MAX_LOOP; i -= increment) { assistant.SetIteratorParameter(i); var record = block.Evaluate().Text; var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return; } Runtime.State.Print(record); } } } } }
public Value For() { using (var assistant = new ParameterAssistant(Arguments)) { var block = assistant.Block(); if (block != null) { assistant.IteratorParameter(); var count = 0; if (start < stop) { for (var i = start; i <= stop && count++ < Runtime.MAX_LOOP; i += increment) { assistant.SetIteratorParameter(i); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return(null); } } } else { for (var i = start; i >= stop && count++ < Runtime.MAX_LOOP; i -= increment) { assistant.SetIteratorParameter(i); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return(null); } } } } return(this); } }
public Value Each() { using (var assistant = new ParameterAssistant(Arguments)) { var block = assistant.Block(); if (block == null) { return(null); } RegionManager.Regions.Push("string-indexer"); var changes = new Hash <int, string>(); var indexes = getIndexes(); foreach (var index in indexes) { var correctedIndex = WrapIndex(index, text.Text.Length, true); assistant.SetParameterValues(text.Text.Skip(index).Take(1), index.ToString(), correctedIndex); var result = block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return(null); } if (result != null) { changes[correctedIndex] = result.Text; } } Slicer slicer = text.Text; foreach (var item in changes) { slicer[item.Key] = item.Value; } text.Text = slicer.ToString(); RegionManager.Regions.Pop("string-indexer"); return(null); } }
public Value For() { using var assistant = new ParameterAssistant(Arguments); var block = assistant.Block(); if (block != null) { assistant.LoopParameters(); Func <string, bool> func = _ => true; if (filter.IsNotEmpty()) { func = l => l.IndexOf(filter, StringComparison.Ordinal) > -1; } else if (lambda != null) { func = l => lambda.Evaluate(new Arguments(l)).IsTrue; } using var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read); using var reader = new StreamReader(stream); string line; var index = 0; while ((line = reader.ReadLine()) != null) { if (func(line)) { assistant.SetLoopParameters(line, index++); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.Continuing: continue; case ParameterAssistant.SignalType.ReturningNull: return(null); } } } return(null); } return(null); }
static Value forLoop(Value value, Arguments arguments, out bool handled) { handled = false; var array = value.YieldValue; if (array == null) { return(value); } using (var assistant = new ParameterAssistant(arguments)) { var block = assistant.Block(); if (block == null) { return(value); } Regions.Push("for"); foreach (var item in array) { assistant.SetParameterValues(item); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == Breaking) { break; } switch (signal) { case Continuing: continue; case ReturningNull: return(null); } } value.YieldValue = null; Regions.Pop("for"); handled = true; return(array); } }
public Value For() { using var assistant = new ParameterAssistant(Arguments); var block = assistant.Block(); if (block != null) { assistant.LoopParameters(); if (filter.IsEmpty()) { using var reader = new StringReader(text); string line; var index = 0; while ((line = reader.ReadLine()) != null) { assistant.SetLoopParameters(line, index++); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.ReturningNull: return(null); case ParameterAssistant.SignalType.Continuing: continue; } } } else { using var reader = new StringReader(text); string line; var index = 0; while ((line = reader.ReadLine()) != null) { if (line.IndexOf(filter, StringComparison.Ordinal) > -1) { assistant.SetLoopParameters(line, index++); block.Evaluate(); var signal = ParameterAssistant.Signal(); if (signal == ParameterAssistant.SignalType.Breaking) { break; } switch (signal) { case ParameterAssistant.SignalType.ReturningNull: return(null); case ParameterAssistant.SignalType.Continuing: continue; } } } } return(null); } return(null); }