class UnhealthyIdeas(MemStruct): fields = [ ("pastruct", Ptr("I", Array(RawStruct("=Bf")))), ("apstr", Array(Ptr("I", Str()), 10)), ("pself", Ptr("I", Self())), ("apself", Array(Ptr("I", Self()), 2)), ("ppself", Ptr("I", Ptr("I", Self()))), ("pppself", Ptr("I", Ptr("I", Ptr("I", Self())))), ]
class MyStruct2(MemStruct): fields = [ ("s1", RawStruct("=BI")), ("s2", Array(Num("B"), 10)), ]
assert MemShort(jitter.vm, ms2.get_addr("s2")).val == 0x1234 # Manual cast inside an Array ms2.s2[4] = 0xcd ms2.s2[5] = 0xab assert MemShort(jitter.vm, ms2.s2.get_addr(4)).val == 0xabcd # void* style cast MemPtrVoid = Ptr("I", Void()).lval p = MemPtrVoid(jitter.vm) p.val = mstruct.get_addr() assert p.deref.cast(MyStruct) == mstruct assert p.cast(Ptr("I", MyStruct)).deref == mstruct # Field equality tests assert RawStruct("IH") == RawStruct("IH") assert RawStruct("I") != RawStruct("IH") assert Num("I") == Num("I") assert Num(">I") != Num("<I") assert Ptr("I", MyStruct) == Ptr("I", MyStruct) assert Ptr(">I", MyStruct) != Ptr("<I", MyStruct) assert Ptr("I", MyStruct) != Ptr("I", MyStruct2) assert MyStruct.get_type() == MyStruct.get_type() assert MyStruct.get_type() != MyStruct2.get_type() assert Array(Num("H"), 12) == Array(Num("H"), 12) assert Array(Num("H"), 11) != Array(Num("H"), 12) assert Array(Num("I"), 12) != Array(Num("H"), 12) assert Struct("a", [("f1", Num("B")), ("f2", Num("H"))]) == \ Struct("a", [("f1", Num("B")), ("f2", Num("H"))]) assert Struct("a", [("f2", Num("B")), ("f2", Num("H"))]) != \ Struct("a", [("f1", Num("B")), ("f2", Num("H"))])