@@ -144,20 +144,6 @@ private interface RecursiveDeserializer {
144144 Object deserialize (Object json , ProxyFactory proxyFactory ) throws DeserializationException ;
145145
146146 Object deserialize (Object json , ProxyFactory proxyFactory , String tag ) throws DeserializationException ;
147-
148- /**
149- * Sets the {@link Architecture} parsed by this deserializer.
150- *
151- * @param arch the architecture
152- */
153- void setArchitecture (Architecture arch );
154-
155- /**
156- * Gets the {@link Architecture} parsed by this deserializer.
157- *
158- * @return the architecture
159- */
160- Architecture getArchitecture ();
161147 }
162148
163149 private sealed interface ObjectSerializer {
@@ -819,6 +805,7 @@ public Object deserialize(EconomicMap<String, Object> json, RecursiveDeserialize
819805 }
820806
821807 private static final class RegisterSerializer implements ObjectSerializer {
808+
822809 @ Override
823810 public Class <?> clazz () {
824811 return Register .class ;
@@ -833,17 +820,20 @@ public String tag() {
833820 public void serialize (Object instance , JsonBuilder .ObjectBuilder objectBuilder , RecursiveSerializer serializer ) throws IOException {
834821 Register register = (Register ) instance ;
835822 objectBuilder .append ("number" , register .number );
823+ objectBuilder .append ("name" , register .name );
824+ objectBuilder .append ("encoding" , register .encoding );
825+ objectBuilder .append ("catName" , register .getRegisterCategory ().toString ());
826+ objectBuilder .append ("containsRef" , register .mayContainReference ());
836827 }
837828
838829 @ Override
839- public Object deserialize (EconomicMap <String , Object > json , RecursiveDeserializer deserializer , ProxyFactory proxyFactory ) throws DeserializationException {
830+ public Object deserialize (EconomicMap <String , Object > json , RecursiveDeserializer deserializer , ProxyFactory proxyFactory ) {
840831 int number = (int ) json .get ("number" );
841- for (Register register : deserializer .getArchitecture ().getRegisters ()) {
842- if (register .number == number ) {
843- return register ;
844- }
845- }
846- throw new DeserializationException (this , json , "Register not found" );
832+ String name = (String ) json .get ("name" );
833+ int encoding = (int ) json .get ("encoding" );
834+ String catName = (String ) json .get ("catName" );
835+ boolean containsRef = (boolean ) json .get ("containsRef" );
836+ return new Register (number , encoding , name , new Register .RegisterCategory (catName , containsRef ));
847837 }
848838 }
849839
@@ -1697,14 +1687,12 @@ public void serialize(Object instance, JsonBuilder.ObjectBuilder objectBuilder,
16971687 public Object deserialize (EconomicMap <String , Object > json , RecursiveDeserializer deserializer , ProxyFactory proxyFactory ) throws DeserializationException {
16981688 String name = (String ) json .get ("name" );
16991689 EnumSet <?> features = (EnumSet <?>) deserializer .deserialize (json .get ("features" ), proxyFactory );
1700- Architecture architecture = switch (name ) {
1690+ return switch (name ) {
17011691 case "AMD64" -> new AMD64 ((EnumSet <AMD64 .CPUFeature >) features );
17021692 case "riscv64" -> new RISCV64 ((EnumSet <RISCV64 .CPUFeature >) features );
17031693 case "aarch64" -> new AArch64 ((EnumSet <AArch64 .CPUFeature >) features );
17041694 default -> throw new IllegalStateException ("Unexpected value: " + name );
17051695 };
1706- deserializer .setArchitecture (architecture );
1707- return architecture ;
17081696 }
17091697 }
17101698
@@ -1944,55 +1932,41 @@ public void dump(RecordedCompilationUnit compilationUnit, JsonWriter writer) thr
19441932 recursiveSerializer .serialize (compilationUnit , writer .valueBuilder (), RecordedCompilationUnitSerializer .TAG );
19451933 }
19461934
1947- private RecursiveDeserializer createRecursiveDeserializer () {
1948- return new RecursiveDeserializer () {
1949- @ Override
1950- @ SuppressWarnings ("unchecked" )
1951- public Object deserialize (Object json , ProxyFactory proxyFactory ) throws DeserializationException {
1952- if (json instanceof EconomicMap <?, ?>) {
1953- EconomicMap <String , Object > map = (EconomicMap <String , Object >) json ;
1954- String tag = (String ) map .get ("tag" );
1955- if (tag == null ) {
1956- throw new IllegalArgumentException ("The JSON map does not contain a tag: " + map );
1957- }
1958- ObjectSerializer deserializer = tagSerializers .get (tag );
1959- if (deserializer == null ) {
1960- throw new IllegalArgumentException ("No deserializer registered for tag " + tag );
1961- }
1962- return deserializer .deserialize (map , this , proxyFactory );
1963- } else {
1964- return json ;
1935+ private final RecursiveDeserializer recursiveDeserializer = new RecursiveDeserializer () {
1936+ @ Override
1937+ @ SuppressWarnings ("unchecked" )
1938+ public Object deserialize (Object json , ProxyFactory proxyFactory ) throws DeserializationException {
1939+ if (json instanceof EconomicMap <?, ?>) {
1940+ EconomicMap <String , Object > map = (EconomicMap <String , Object >) json ;
1941+ String tag = (String ) map .get ("tag" );
1942+ if (tag == null ) {
1943+ throw new IllegalArgumentException ("The JSON map does not contain a tag: " + map );
19651944 }
1966- }
1967-
1968- @ Override
1969- @ SuppressWarnings ("unchecked" )
1970- public Object deserialize (Object json , ProxyFactory proxyFactory , String tag ) throws DeserializationException {
1971- if (json instanceof EconomicMap <?, ?>) {
1972- EconomicMap <String , Object > map = (EconomicMap <String , Object >) json ;
1973- ObjectSerializer deserializer = tagSerializers .get (tag );
1974- if (deserializer == null ) {
1975- throw new IllegalArgumentException ("No deserializer registered for tag " + tag );
1976- }
1977- return deserializer .deserialize (map , this , proxyFactory );
1978- } else {
1979- throw new IllegalArgumentException ("Expected a map." );
1945+ ObjectSerializer deserializer = tagSerializers .get (tag );
1946+ if (deserializer == null ) {
1947+ throw new IllegalArgumentException ("No deserializer registered for tag " + tag );
19801948 }
1949+ return deserializer .deserialize (map , this , proxyFactory );
1950+ } else {
1951+ return json ;
19811952 }
1953+ }
19821954
1983- private Architecture architecture ;
1984-
1985- @ Override
1986- public void setArchitecture (Architecture arch ) {
1987- architecture = arch ;
1988- }
1989-
1990- @ Override
1991- public Architecture getArchitecture () {
1992- return architecture ;
1955+ @ Override
1956+ @ SuppressWarnings ("unchecked" )
1957+ public Object deserialize (Object json , ProxyFactory proxyFactory , String tag ) throws DeserializationException {
1958+ if (json instanceof EconomicMap <?, ?>) {
1959+ EconomicMap <String , Object > map = (EconomicMap <String , Object >) json ;
1960+ ObjectSerializer deserializer = tagSerializers .get (tag );
1961+ if (deserializer == null ) {
1962+ throw new IllegalArgumentException ("No deserializer registered for tag " + tag );
1963+ }
1964+ return deserializer .deserialize (map , this , proxyFactory );
1965+ } else {
1966+ throw new IllegalArgumentException ("Expected a map." );
19931967 }
1994- };
1995- }
1968+ }
1969+ };
19961970
19971971 /**
19981972 * Loads a recorded compilation unit from the given reader.
@@ -2005,6 +1979,6 @@ public Architecture getArchitecture() {
20051979 */
20061980 public RecordedCompilationUnit load (Reader source , ProxyFactory proxyFactory ) throws IOException , DeserializationException {
20071981 JsonParser parser = new JsonParser (source );
2008- return (RecordedCompilationUnit ) createRecursiveDeserializer () .deserialize (parser .parse (), proxyFactory , RecordedCompilationUnitSerializer .TAG );
1982+ return (RecordedCompilationUnit ) recursiveDeserializer .deserialize (parser .parse (), proxyFactory , RecordedCompilationUnitSerializer .TAG );
20091983 }
20101984}
0 commit comments