public static JToken ToJson(this StackItem item) { return item switch { Neo.VM.Types.Boolean _ => item.GetBoolean(), Neo.VM.Types.Buffer buffer => buffer.GetSpan().ToHexString(), Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(), Neo.VM.Types.Integer @int => @int.GetInteger().ToString(), // Neo.VM.Types.InteropInterface _ => MakeVariable("InteropInterface"), Neo.VM.Types.Map map => MapToJson(map), Neo.VM.Types.Null _ => new JValue((object?)null), // Neo.VM.Types.Pointer _ => MakeVariable("Pointer"), Neo.VM.Types.Array array => new JArray(array.Select(i => i.ToJson())), _ => throw new NotSupportedException(), };
public IEnumerable <Variable> Enumerate(IVariableManager manager) { foreach (var key in map.Keys) { var keyString = key switch { Neo.VM.Types.Boolean @bool => @bool.GetBoolean().ToString(), Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(), Neo.VM.Types.Integer @int => @int.GetInteger().ToString(), _ => throw new NotImplementedException($"Unknown primitive type {key.GetType()}"), }; yield return(map[key].ToVariable(manager, keyString)); } }
static JToken StackItemToJson(StackItem item, string?typeHint) { return(typeHint switch { "Boolean" => item.GetBoolean().ToString(), "Integer" => item.GetBigInteger().ToString(), "String" => item.GetString(), _ => item switch { Neo.VM.Types.Boolean _ => item.GetBoolean().ToString(), Neo.VM.Types.ByteArray _ => $"{item.GetBigInteger().ToHexString()} ({item.GetString()})", Neo.VM.Types.Integer _ => item.GetBigInteger().ToString(), Neo.VM.Types.Array array => new JArray(array.Select(i => StackItemToJson(i, null))), _ => throw new NotSupportedException(item.GetType().Name), } });
public static JToken ToJson(this StackItem item, string typeHint = "") { var stringRep = item.ToStringRep(typeHint); return(stringRep != null ? (JToken)stringRep : item switch { Neo.VM.Types.Boolean _ => item.GetBoolean(), // Neo.VM.Types.Buffer buffer => "Buffer", Neo.VM.Types.ByteString byteString => byteString.GetSpan().ToHexString(), Neo.VM.Types.Integer @int => @int.GetInteger().ToString(), // Neo.VM.Types.InteropInterface _ => MakeVariable("InteropInterface"), // Neo.VM.Types.Map _ => MakeVariable("Map"), Neo.VM.Types.Null _ => new JValue((object?)null), // Neo.VM.Types.Pointer _ => MakeVariable("Pointer"), Neo.VM.Types.Array array => new JArray(array.Select(i => i.ToJson())), _ => throw new NotSupportedException(), });
private static void DumpStackItem(StackItem stackItem) { var typeStackItem = stackItem.GetType(); switch (typeStackItem.ToString()) { case "Neo.VM.Types.Integer": { Neo.VM.Types.Integer value = (Neo.VM.Types.Integer)stackItem; BigInteger bigvalue = value.GetBigInteger(); Console.WriteLine("Neo.VM.Types.Integer:\t{0}", bigvalue.ToString()); break; } case "Neo.VM.Types.Array": { Neo.VM.Types.Array items = (Neo.VM.Types.Array)stackItem; int offset = 0; Console.WriteLine("Array.Count:\t{0}", items.Count); foreach (var item in items) { Console.WriteLine("Neo.VM.Types.Array:\t{0}\t{1}", offset, item.ToString()); var typeItem = item.GetType(); switch (typeItem.ToString()) { case "Neo.VM.Types.Boolean": { int offset2 = 0; Neo.VM.Types.Boolean b = (Neo.VM.Types.Boolean)item; Console.WriteLine(" Neo.VM.Types.Boolean:\t{0}\t{1}", offset2, b.GetBoolean()); break; } case "Neo.VM.Types.Integer": { int offset2 = 0; Neo.VM.Types.Integer i = (Neo.VM.Types.Integer)item; Console.WriteLine(" Neo.VM.Types.Integer:\t{0}\t{1}\t{2}", offset2, i.GetBigInteger(), i.GetBigInteger().ToString("X")); break; } case "Neo.VM.Types.Array": { var items2 = ((Neo.VM.Types.Array)item); int offset2 = 0; foreach (var item2 in items2) { Console.WriteLine(" Neo.VM.Types.Array:\t{0}\t{1}\t{2}", offset2, item2.GetBigInteger(), item2.GetBigInteger()); offset2++; } break; } case "Neo.VM.Types.ByteArray": { byte[] items2 = ((Neo.VM.Types.ByteArray)item).GetByteArray(); int offset2 = 0; foreach (var item2 in items2) { Console.WriteLine(" Neo.VM.Types.ByteArray:\t{0}\t{1}\t{2}\t{3}", offset2, item2.ToString(), item2.ToString("X"), Convert.ToChar(item2).ToString()); offset2++; } break; } default: { throw new NotImplementedException(typeItem.ToString() + " unknown"); } } offset++; } break; } case "Neo.VM.Types.ByteArray": { byte[] items = ((Neo.VM.Types.ByteArray)stackItem).GetByteArray(); int offset = 0; foreach (var item in items) { Console.WriteLine("Neo.VM.Types.ByteArray:\t{0}\t{1}\t{2}\t{3}", offset, item.ToString(), item.ToString("X"), Convert.ToChar(item).ToString()); offset++; } break; } default: { throw new NotImplementedException(typeStackItem.ToString() + " unknown"); } } }
public BooleanStackItem(bool value) : base(value) { _item = new Neo.VM.Types.Boolean(value); }
public BooleanStackItem(Neo.VM.Types.Boolean item) : base(item.GetBoolean()) { _item = item; }