private void loadVar(Node downNode, PointerValue ptr, object o) { PointerToNode ptrUpNode = (o as Data).PointerToNode; ptrUpNode = new PointerToNode(ptrUpNode.Node = new LoadVar(this.varsHash[ptr])); this.AddTask(downNode.Next, ptrUpNode); }
public object Convert(PointerValue value, IStore store) { var dataField = value.Fields.FirstOrDefault(n => "dateData".Equals(n.Name, StringComparison.InvariantCultureIgnoreCase)); if (dataField == null || !(dataField.Value is UInt64)) { return(null); } var dateData = (UInt64)dataField.Value; var ticks = (long)(dateData & 4611686018427387903uL); var internalKind = dateData & 13835058055282163712uL; DateTimeKind kind; if (internalKind == 0uL) { kind = DateTimeKind.Unspecified; } if (internalKind != 4611686018427387904uL) { kind = DateTimeKind.Local; } kind = DateTimeKind.Utc; return(new DateTime(ticks, kind)); }
private void storeVar(Node downNode, PointerValue ptr, object o) { PointerToNode ptrUpNode = (o as Data).PointerToNode; ptrUpNode = new PointerToNode(ptrUpNode.Node = new StoreVar(this.varsHash[ptr])); ptr.SetZeroValue(); this.AddTask(downNode.Next, ptrUpNode); }
internal Variable this [PointerValue ptr] { get { return(this.hash[ptr] as Variable); } set { this.hash[ptr] = value; } }
public object Convert(PointerValue value, IStore store) { // THIS IS JUST AN EXAMPLE IMPLEMENTATION, REPLACE BY YOUR OWN var stringField = value.Fields.FirstOrDefault(n => "m_String".Equals(n.Name, StringComparison.InvariantCultureIgnoreCase)); if (stringField == null || !(stringField.Value is string)) { return(null); } return(stringField.Value); }
public object Convert(PointerValue value, IStore store) { var ticksField = value.Fields.FirstOrDefault(n => "_ticks".Equals(n.Name, StringComparison.InvariantCultureIgnoreCase)); if (ticksField == null || !(ticksField.Value is Int64)) { return(null); } var ticks = (Int64)ticksField.Value; return(new TimeSpan(ticks)); }
public bool CanConvert(PointerValue value, IStore store) { // THIS IS JUST AN EXAMPLE IMPLEMENTATION, REPLACE BY YOUR OWN if (value.Fields == null) { return(false); } if (!"System.Uri".Equals(value.TypeName, StringComparison.InvariantCultureIgnoreCase)) { return(false); } return(value.Fields.Any(n => "m_String".Equals(n.Name, StringComparison.InvariantCultureIgnoreCase))); }
public bool CanConvert(PointerValue value, IStore store) { if (value.Fields == null) { return(false); } if (!"System.TimeSpan".Equals(value.TypeName, StringComparison.InvariantCultureIgnoreCase)) { return(false); } return(value.Fields.Any(n => "_ticks".Equals(n.Name, StringComparison.InvariantCultureIgnoreCase))); }
public int Compare(object o1, object o2) { if (o1 == o2) { return(0); } else if (!(o1 is PointerValue) || !(o2 is PointerValue)) { return(1); } else { PointerValue ptr1 = o1 as PointerValue; PointerValue ptr2 = o2 as PointerValue; int res = (int)this.objHash[ptr1.GetHeapObject()] - (int)this.objHash[ptr2.GetHeapObject()]; if (res == 0) { res = ptr1.GetQuasiOffset() - ptr2.GetQuasiOffset(); } return(res); } }
Value CreatePointerLikeValue(DmdType defaultType, long value, out DmdType type) { var vm = engine.MonoVirtualMachine; if (defaultType.IsPointer || defaultType.IsFunctionPointer) { type = defaultType; if (vm.Version.AtLeast(2, 46)) { return(new PointerValue(vm, GetType(type), value)); } return(new PrimitiveValue(vm, ElementType.Ptr, value)); } else { if (defaultType == defaultType.AppDomain.System_IntPtr || defaultType == defaultType.AppDomain.System_UIntPtr) { type = defaultType; } else { type = defaultType.AppDomain.System_IntPtr; } var monoType = GetType(type); Value monoValue; if (vm.Version.AtLeast(2, 46)) { monoValue = new PointerValue(vm, GetType(type.AppDomain.System_Void.MakePointerType()), value); } else { monoValue = new PrimitiveValue(vm, ElementType.Ptr, value); } return(vm.CreateStructMirror(monoType, new[] { monoValue })); } }
protected override void VisitStoreIndirect(StoreIndirect downNode, object o) { PointerValue ptr = this.state.Stack.Pop() as PointerValue; this.storeVar(downNode, ptr, o); }