internal static BikeString BuildStackTrace()
{
var lastLocation = InterpretationContext.Instance.CurrentLocation;
var callStack = new List<ScopeFrame>();
var currentFrame = InterpretationContext.Instance.CurrentFrame;
while (currentFrame != null)
{
if (currentFrame.Func != null || currentFrame.IsGlobal)
callStack.Add(currentFrame);
currentFrame = currentFrame.Caller;
}
var sb = new StringBuilder();
foreach (var frame in callStack)
{
var at = frame.IsGlobal
? "<Global>"
: frame.Func.Description;
sb.AppendFormat(" at {0} in {1}:line {2}", at, lastLocation.FilePath, lastLocation.Line)
.AppendLine();
lastLocation = frame.Location;
}
return new BikeString(sb.ToString());
}