Shovel.Vm.Vm.WriteCurrentEnvironment C# (CSharp) Метод

WriteCurrentEnvironment() статический приватный Метод

static private WriteCurrentEnvironment ( StringBuilder sb ) : void
sb StringBuilder
Результат void
        void WriteCurrentEnvironment(StringBuilder sb)
        {
            for (var env = this.currentEnvironment; env != null; env = env.Next) {
                if (env.Frame.IntroducedAtProgramCounter != null) {
                    sb.AppendLine ("Frame starts at:");
                    var pc = env.Frame.IntroducedAtProgramCounter.Value;
                    var instruction = this.bytecode [pc];
                    this.PrintLineFor (sb, pc, instruction.StartPos, instruction.StartPos);
                }
                sb.AppendLine ("Frame variables are:");
                for (var i = 0; i < env.Frame.VarNames.Length; i++) {
                    sb.AppendLine (String.Format (
                        "{0} = {1}",
                        env.Frame.VarNames [i],
                        Prim0.ShovelStringRepresentation (this.api, env.Frame.Values [i]).stringValue)
                    );
                }
                sb.AppendLine ();
            }
        }

Usage Example

Пример #1
0
 static void HandleContext(Vm vm)
 {
     var stackTraceSb = new StringBuilder ();
     vm.WriteStackTrace (stackTraceSb);
     var stackTrace = stackTraceSb.ToString ();
     var currentEnvironmentSb = new StringBuilder ();
     vm.WriteCurrentEnvironment (currentEnvironmentSb);
     var currentEnvironment = currentEnvironmentSb.ToString ();
     var result = new HashInstance ();
     result.Add (Value.Make ("stack"), Value.Make (stackTrace));
     result.Add (Value.Make ("environment"), Value.Make (currentEnvironment));
     vm.IncrementCells (6 + stackTrace.Length + currentEnvironment.Length);
     vm.stack.Push (Value.Make (result));
     vm.programCounter ++;
     return;
 }
Vm