diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
index a1b125d..ab03ded 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
@@ -6045,6 +6045,61 @@ void cJSON_DeleteHasOwnProperty(struct HasOwnProperty * x) {
     }
 }
 
+struct HashCode * cJSON_ParseHashCode(const char * s) {
+    struct HashCode * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetHashCodeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct HashCode * cJSON_GetHashCodeValue(const cJSON * j) {
+    struct HashCode * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct HashCode)))) {
+            memset(x, 0, sizeof(struct HashCode));
+            if (!cJSON_HasObjectItem(j, "hashCode")) { cJSON_DeleteHashCode(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "hashCode")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "hashCode"))) { cJSON_DeleteHashCode(x); return NULL; }
+                x->hash_code = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "hashCode"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateHashCode(const struct HashCode * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "hashCode", x->hash_code);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintHashCode(const struct HashCode * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateHashCode(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteHashCode(struct HashCode * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Id * cJSON_ParseId(const char * s) {
     struct Id * x = NULL;
     if (NULL != s) {
@@ -8074,6 +8129,12 @@ struct Obj2 * cJSON_GetObj2Value(const cJSON * j) {
                 x->has_own_property = cJSON_GetHasOwnPropertyValue(cJSON_GetObjectItemCaseSensitive(j, "hasOwnProperty"));
                 if (NULL == x->has_own_property) { cJSON_DeleteObj2(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "hashCode")) { cJSON_DeleteObj2(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "hashCode")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "hashCode"))) { cJSON_DeleteObj2(x); return NULL; }
+                x->hash_code = cJSON_GetHashCodeValue(cJSON_GetObjectItemCaseSensitive(j, "hashCode"));
+                if (NULL == x->hash_code) { cJSON_DeleteObj2(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "id")) { cJSON_DeleteObj2(x); return NULL; }
             if (cJSON_HasObjectItem(j, "id")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "id"))) { cJSON_DeleteObj2(x); return NULL; }
@@ -8314,6 +8375,7 @@ cJSON * cJSON_CreateObj2(const struct Obj2 * x) {
             cJSON_AddItemToObject(j, "go", cJSON_CreateGo(x->go));
             cJSON_AddItemToObject(j, "guard", cJSON_CreateGuard(x->guard));
             cJSON_AddItemToObject(j, "hasOwnProperty", cJSON_CreateHasOwnProperty(x->has_own_property));
+            cJSON_AddItemToObject(j, "hashCode", cJSON_CreateHashCode(x->hash_code));
             cJSON_AddItemToObject(j, "id", cJSON_CreateId(x->id));
             cJSON_AddItemToObject(j, "IMP", cJSON_CreateImp(x->imp));
             cJSON_AddItemToObject(j, "implements", cJSON_CreateImplements(x->implements));
@@ -8462,6 +8524,9 @@ void cJSON_DeleteObj2(struct Obj2 * x) {
         if (NULL != x->has_own_property) {
             cJSON_DeleteHasOwnProperty(x->has_own_property);
         }
+        if (NULL != x->hash_code) {
+            cJSON_DeleteHashCode(x->hash_code);
+        }
         if (NULL != x->id) {
             cJSON_DeleteId(x->id);
         }
@@ -9830,6 +9895,61 @@ void cJSON_DeleteNo(struct No * x) {
     }
 }
 
+struct NoSuchMethod * cJSON_ParseNoSuchMethod(const char * s) {
+    struct NoSuchMethod * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetNoSuchMethodValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct NoSuchMethod * cJSON_GetNoSuchMethodValue(const cJSON * j) {
+    struct NoSuchMethod * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct NoSuchMethod)))) {
+            memset(x, 0, sizeof(struct NoSuchMethod));
+            if (!cJSON_HasObjectItem(j, "noSuchMethod")) { cJSON_DeleteNoSuchMethod(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "noSuchMethod")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "noSuchMethod"))) { cJSON_DeleteNoSuchMethod(x); return NULL; }
+                x->no_such_method = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "noSuchMethod"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateNoSuchMethod(const struct NoSuchMethod * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "noSuchMethod", x->no_such_method);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintNoSuchMethod(const struct NoSuchMethod * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateNoSuchMethod(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteNoSuchMethod(struct NoSuchMethod * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Nonatomic * cJSON_ParseNonatomic(const char * s) {
     struct Nonatomic * x = NULL;
     if (NULL != s) {
@@ -12300,6 +12420,12 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->no = cJSON_GetNoValue(cJSON_GetObjectItemCaseSensitive(j, "NO"));
                 if (NULL == x->no) { cJSON_DeleteObj3(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "noSuchMethod")) { cJSON_DeleteObj3(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "noSuchMethod")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "noSuchMethod"))) { cJSON_DeleteObj3(x); return NULL; }
+                x->no_such_method = cJSON_GetNoSuchMethodValue(cJSON_GetObjectItemCaseSensitive(j, "noSuchMethod"));
+                if (NULL == x->no_such_method) { cJSON_DeleteObj3(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "nonatomic")) { cJSON_DeleteObj3(x); return NULL; }
             if (cJSON_HasObjectItem(j, "nonatomic")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "nonatomic"))) { cJSON_DeleteObj3(x); return NULL; }
@@ -12585,6 +12711,7 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "newtonsoft", cJSON_CreateNewtonsoft(x->newtonsoft));
             cJSON_AddItemToObject(j, "nil", cJSON_CreateNil(x->nil));
             cJSON_AddItemToObject(j, "NO", cJSON_CreateNo(x->no));
+            cJSON_AddItemToObject(j, "noSuchMethod", cJSON_CreateNoSuchMethod(x->no_such_method));
             cJSON_AddItemToObject(j, "nonatomic", cJSON_CreateNonatomic(x->nonatomic));
             cJSON_AddItemToObject(j, "None", cJSON_CreateNone(x->none));
             cJSON_AddItemToObject(j, "nonlocal", cJSON_CreateNonlocal(x->nonlocal));
@@ -12715,6 +12842,9 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->no) {
             cJSON_DeleteNo(x->no);
         }
+        if (NULL != x->no_such_method) {
+            cJSON_DeleteNoSuchMethod(x->no_such_method);
+        }
         if (NULL != x->nonatomic) {
             cJSON_DeleteNonatomic(x->nonatomic);
         }
@@ -14990,6 +15120,61 @@ void cJSON_DeleteRight(struct Right * x) {
     }
 }
 
+struct RuntimeType * cJSON_ParseRuntimeType(const char * s) {
+    struct RuntimeType * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetRuntimeTypeValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct RuntimeType * cJSON_GetRuntimeTypeValue(const cJSON * j) {
+    struct RuntimeType * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct RuntimeType)))) {
+            memset(x, 0, sizeof(struct RuntimeType));
+            if (!cJSON_HasObjectItem(j, "runtimeType")) { cJSON_DeleteRuntimeType(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "runtimeType")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "runtimeType"))) { cJSON_DeleteRuntimeType(x); return NULL; }
+                x->runtime_type = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "runtimeType"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateRuntimeType(const struct RuntimeType * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "runtimeType", x->runtime_type);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintRuntimeType(const struct RuntimeType * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateRuntimeType(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteRuntimeType(struct RuntimeType * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct S * cJSON_ParseS(const char * s) {
     struct S * x = NULL;
     if (NULL != s) {
@@ -15980,6 +16165,61 @@ void cJSON_DeleteToJson(struct ToJson * x) {
     }
 }
 
+struct ToString * cJSON_ParseToString(const char * s) {
+    struct ToString * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetToStringValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct ToString * cJSON_GetToStringValue(const cJSON * j) {
+    struct ToString * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct ToString)))) {
+            memset(x, 0, sizeof(struct ToString));
+            if (!cJSON_HasObjectItem(j, "toString")) { cJSON_DeleteToString(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "toString")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "toString"))) { cJSON_DeleteToString(x); return NULL; }
+                x->to_string = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "toString"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateToString(const struct ToString * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "toString", x->to_string);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintToString(const struct ToString * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateToString(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteToString(struct ToString * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct TopLevelClass * cJSON_ParseTopLevelClass(const char * s) {
     struct TopLevelClass * x = NULL;
     if (NULL != s) {
@@ -16676,6 +16916,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->right = cJSON_GetRightValue(cJSON_GetObjectItemCaseSensitive(j, "right"));
                 if (NULL == x->right) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "runtimeType")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "runtimeType")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "runtimeType"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->runtime_type = cJSON_GetRuntimeTypeValue(cJSON_GetObjectItemCaseSensitive(j, "runtimeType"));
+                if (NULL == x->runtime_type) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "s")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "s")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "s"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16784,6 +17030,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->to_json = cJSON_GetToJsonValue(cJSON_GetObjectItemCaseSensitive(j, "to_json"));
                 if (NULL == x->to_json) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "toString")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "toString")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "toString"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->to_string = cJSON_GetToStringValue(cJSON_GetObjectItemCaseSensitive(j, "toString"));
+                if (NULL == x->to_string) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "top_level")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "top_level")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "top_level"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16881,6 +17133,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "retain", cJSON_CreateRetain(x->retain));
             cJSON_AddItemToObject(j, "rethrows", cJSON_CreateRethrows(x->rethrows));
             cJSON_AddItemToObject(j, "right", cJSON_CreateRight(x->right));
+            cJSON_AddItemToObject(j, "runtimeType", cJSON_CreateRuntimeType(x->runtime_type));
             cJSON_AddItemToObject(j, "s", cJSON_CreateS(x->s));
             cJSON_AddItemToObject(j, "sbyte", cJSON_CreateSbyte(x->sbyte));
             cJSON_AddItemToObject(j, "sealed", cJSON_CreateSealed(x->sealed));
@@ -16899,6 +17152,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "then", cJSON_CreateThen(x->then));
             cJSON_AddItemToObject(j, "throws", cJSON_CreateThrows(x->throws));
             cJSON_AddItemToObject(j, "to_json", cJSON_CreateToJson(x->to_json));
+            cJSON_AddItemToObject(j, "toString", cJSON_CreateToString(x->to_string));
             cJSON_AddItemToObject(j, "top_level", cJSON_CreateTopLevelClass(x->top_level));
             cJSON_AddItemToObject(j, "transient", cJSON_CreateTransient(x->transient));
             cJSON_AddItemToObject(j, "Type", cJSON_CreateType(x->type));
@@ -17043,6 +17297,9 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->right) {
             cJSON_DeleteRight(x->right);
         }
+        if (NULL != x->runtime_type) {
+            cJSON_DeleteRuntimeType(x->runtime_type);
+        }
         if (NULL != x->s) {
             cJSON_DeleteS(x->s);
         }
@@ -17097,6 +17354,9 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->to_json) {
             cJSON_DeleteToJson(x->to_json);
         }
+        if (NULL != x->to_string) {
+            cJSON_DeleteToString(x->to_string);
+        }
         if (NULL != x->top_level) {
             cJSON_DeleteTopLevelClass(x->top_level);
         }
diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
index a3eabe3..3c900e6 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
@@ -495,6 +495,10 @@ struct HasOwnProperty {
     int64_t has_own_property;
 };
 
+struct HashCode {
+    int64_t hash_code;
+};
+
 struct Id {
     int64_t id;
 };
@@ -661,6 +665,7 @@ struct Obj2 {
     struct Go * go;
     struct Guard * guard;
     struct HasOwnProperty * has_own_property;
+    struct HashCode * hash_code;
     struct Id * id;
     struct Imp * imp;
     struct Implements * implements;
@@ -788,6 +793,10 @@ struct No {
     int64_t no;
 };
 
+struct NoSuchMethod {
+    int64_t no_such_method;
+};
+
 struct Nonatomic {
     int64_t nonatomic;
 };
@@ -981,6 +990,7 @@ struct Obj3 {
     struct Newtonsoft * newtonsoft;
     struct Nil * nil;
     struct No * no;
+    struct NoSuchMethod * no_such_method;
     struct Nonatomic * nonatomic;
     struct None * none;
     struct Nonlocal * nonlocal;
@@ -1181,6 +1191,10 @@ struct Right {
     int64_t right;
 };
 
+struct RuntimeType {
+    int64_t runtime_type;
+};
+
 struct S {
     int64_t s;
 };
@@ -1253,6 +1267,10 @@ struct ToJson {
     int64_t to_json;
 };
 
+struct ToString {
+    int64_t to_string;
+};
+
 struct TopLevelClass {
     int64_t top_level;
 };
@@ -1326,6 +1344,7 @@ struct Obj4 {
     struct Retain * retain;
     struct Rethrows * rethrows;
     struct Right * right;
+    struct RuntimeType * runtime_type;
     struct S * s;
     struct Sbyte * sbyte;
     struct Sealed * sealed;
@@ -1344,6 +1363,7 @@ struct Obj4 {
     struct Then * then;
     struct Throws * throws;
     struct ToJson * to_json;
+    struct ToString * to_string;
     struct TopLevelClass * top_level;
     struct Transient * transient;
     struct Type * type;
@@ -2055,6 +2075,12 @@ cJSON * cJSON_CreateHasOwnProperty(const struct HasOwnProperty * x);
 char * cJSON_PrintHasOwnProperty(const struct HasOwnProperty * x);
 void cJSON_DeleteHasOwnProperty(struct HasOwnProperty * x);
 
+struct HashCode * cJSON_ParseHashCode(const char * s);
+struct HashCode * cJSON_GetHashCodeValue(const cJSON * j);
+cJSON * cJSON_CreateHashCode(const struct HashCode * x);
+char * cJSON_PrintHashCode(const struct HashCode * x);
+void cJSON_DeleteHashCode(struct HashCode * x);
+
 struct Id * cJSON_ParseId(const char * s);
 struct Id * cJSON_GetIdValue(const cJSON * j);
 cJSON * cJSON_CreateId(const struct Id * x);
@@ -2397,6 +2423,12 @@ cJSON * cJSON_CreateNo(const struct No * x);
 char * cJSON_PrintNo(const struct No * x);
 void cJSON_DeleteNo(struct No * x);
 
+struct NoSuchMethod * cJSON_ParseNoSuchMethod(const char * s);
+struct NoSuchMethod * cJSON_GetNoSuchMethodValue(const cJSON * j);
+cJSON * cJSON_CreateNoSuchMethod(const struct NoSuchMethod * x);
+char * cJSON_PrintNoSuchMethod(const struct NoSuchMethod * x);
+void cJSON_DeleteNoSuchMethod(struct NoSuchMethod * x);
+
 struct Nonatomic * cJSON_ParseNonatomic(const char * s);
 struct Nonatomic * cJSON_GetNonatomicValue(const cJSON * j);
 cJSON * cJSON_CreateNonatomic(const struct Nonatomic * x);
@@ -2889,6 +2921,12 @@ cJSON * cJSON_CreateRight(const struct Right * x);
 char * cJSON_PrintRight(const struct Right * x);
 void cJSON_DeleteRight(struct Right * x);
 
+struct RuntimeType * cJSON_ParseRuntimeType(const char * s);
+struct RuntimeType * cJSON_GetRuntimeTypeValue(const cJSON * j);
+cJSON * cJSON_CreateRuntimeType(const struct RuntimeType * x);
+char * cJSON_PrintRuntimeType(const struct RuntimeType * x);
+void cJSON_DeleteRuntimeType(struct RuntimeType * x);
+
 struct S * cJSON_ParseS(const char * s);
 struct S * cJSON_GetSValue(const cJSON * j);
 cJSON * cJSON_CreateS(const struct S * x);
@@ -2997,6 +3035,12 @@ cJSON * cJSON_CreateToJson(const struct ToJson * x);
 char * cJSON_PrintToJson(const struct ToJson * x);
 void cJSON_DeleteToJson(struct ToJson * x);
 
+struct ToString * cJSON_ParseToString(const char * s);
+struct ToString * cJSON_GetToStringValue(const cJSON * j);
+cJSON * cJSON_CreateToString(const struct ToString * x);
+char * cJSON_PrintToString(const struct ToString * x);
+void cJSON_DeleteToString(struct ToString * x);
+
 struct TopLevelClass * cJSON_ParseTopLevelClass(const char * s);
 struct TopLevelClass * cJSON_GetTopLevelClassValue(const cJSON * j);
 cJSON * cJSON_CreateTopLevelClass(const struct TopLevelClass * x);
diff --git a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
index 07becbf..bf15eb9 100644
--- a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
+++ b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
@@ -1728,6 +1728,20 @@ namespace quicktype {
         void set_has_own_property(const int64_t & value) { this->has_own_property = value; }
     };
 
+    class HashCode {
+        public:
+        HashCode() = default;
+        virtual ~HashCode() = default;
+
+        private:
+        int64_t hash_code;
+
+        public:
+        const int64_t & get_hash_code() const { return hash_code; }
+        int64_t & get_mutable_hash_code() { return hash_code; }
+        void set_hash_code(const int64_t & value) { this->hash_code = value; }
+    };
+
     class Id {
         public:
         Id() = default;
@@ -2229,6 +2243,7 @@ namespace quicktype {
         Go go;
         Guard guard;
         HasOwnProperty has_own_property;
+        HashCode hash_code;
         Id id;
         Imp imp;
         Implements implements;
@@ -2396,6 +2411,10 @@ namespace quicktype {
         HasOwnProperty & get_mutable_has_own_property() { return has_own_property; }
         void set_has_own_property(const HasOwnProperty & value) { this->has_own_property = value; }
 
+        const HashCode & get_hash_code() const { return hash_code; }
+        HashCode & get_mutable_hash_code() { return hash_code; }
+        void set_hash_code(const HashCode & value) { this->hash_code = value; }
+
         const Id & get_id() const { return id; }
         Id & get_mutable_id() { return id; }
         void set_id(const Id & value) { this->id = value; }
@@ -2851,6 +2870,20 @@ namespace quicktype {
         void set_no(const int64_t & value) { this->no = value; }
     };
 
+    class NoSuchMethod {
+        public:
+        NoSuchMethod() = default;
+        virtual ~NoSuchMethod() = default;
+
+        private:
+        int64_t no_such_method;
+
+        public:
+        const int64_t & get_no_such_method() const { return no_such_method; }
+        int64_t & get_mutable_no_such_method() { return no_such_method; }
+        void set_no_such_method(const int64_t & value) { this->no_such_method = value; }
+    };
+
     class Nonatomic {
         public:
         Nonatomic() = default;
@@ -3469,6 +3502,7 @@ namespace quicktype {
         Newtonsoft newtonsoft;
         Nil nil;
         No no;
+        NoSuchMethod no_such_method;
         Nonatomic nonatomic;
         None none;
         Nonlocal nonlocal;
@@ -3609,6 +3643,10 @@ namespace quicktype {
         No & get_mutable_no() { return no; }
         void set_no(const No & value) { this->no = value; }
 
+        const NoSuchMethod & get_no_such_method() const { return no_such_method; }
+        NoSuchMethod & get_mutable_no_such_method() { return no_such_method; }
+        void set_no_such_method(const NoSuchMethod & value) { this->no_such_method = value; }
+
         const Nonatomic & get_nonatomic() const { return nonatomic; }
         Nonatomic & get_mutable_nonatomic() { return nonatomic; }
         void set_nonatomic(const Nonatomic & value) { this->nonatomic = value; }
@@ -4310,6 +4348,20 @@ namespace quicktype {
         void set_right(const int64_t & value) { this->right = value; }
     };
 
+    class RuntimeType {
+        public:
+        RuntimeType() = default;
+        virtual ~RuntimeType() = default;
+
+        private:
+        int64_t runtime_type;
+
+        public:
+        const int64_t & get_runtime_type() const { return runtime_type; }
+        int64_t & get_mutable_runtime_type() { return runtime_type; }
+        void set_runtime_type(const int64_t & value) { this->runtime_type = value; }
+    };
+
     class S {
         public:
         S() = default;
@@ -4562,6 +4614,20 @@ namespace quicktype {
         void set_to_json(const int64_t & value) { this->to_json = value; }
     };
 
+    class ToString {
+        public:
+        ToString() = default;
+        virtual ~ToString() = default;
+
+        private:
+        int64_t to_string;
+
+        public:
+        const int64_t & get_to_string() const { return to_string; }
+        int64_t & get_mutable_to_string() { return to_string; }
+        void set_to_string(const int64_t & value) { this->to_string = value; }
+    };
+
     class TopLevelClass {
         public:
         TopLevelClass() = default;
@@ -4733,6 +4799,7 @@ namespace quicktype {
         Retain retain;
         Rethrows rethrows;
         Right right;
+        RuntimeType runtime_type;
         S s;
         Sbyte sbyte;
         Sealed sealed;
@@ -4751,6 +4818,7 @@ namespace quicktype {
         Then then;
         Throws throws;
         ToJson to_json;
+        ToString to_string;
         TopLevelClass top_level;
         Transient transient;
         Type type;
@@ -4918,6 +4986,10 @@ namespace quicktype {
         Right & get_mutable_right() { return right; }
         void set_right(const Right & value) { this->right = value; }
 
+        const RuntimeType & get_runtime_type() const { return runtime_type; }
+        RuntimeType & get_mutable_runtime_type() { return runtime_type; }
+        void set_runtime_type(const RuntimeType & value) { this->runtime_type = value; }
+
         const S & get_s() const { return s; }
         S & get_mutable_s() { return s; }
         void set_s(const S & value) { this->s = value; }
@@ -4990,6 +5062,10 @@ namespace quicktype {
         ToJson & get_mutable_to_json() { return to_json; }
         void set_to_json(const ToJson & value) { this->to_json = value; }
 
+        const ToString & get_to_string() const { return to_string; }
+        ToString & get_mutable_to_string() { return to_string; }
+        void set_to_string(const ToString & value) { this->to_string = value; }
+
         const TopLevelClass & get_top_level() const { return top_level; }
         TopLevelClass & get_mutable_top_level() { return top_level; }
         void set_top_level(const TopLevelClass & value) { this->top_level = value; }
@@ -5756,6 +5832,9 @@ namespace quicktype {
     void from_json(const json & j, HasOwnProperty & x);
     void to_json(json & j, const HasOwnProperty & x);
 
+    void from_json(const json & j, HashCode & x);
+    void to_json(json & j, const HashCode & x);
+
     void from_json(const json & j, Id & x);
     void to_json(json & j, const Id & x);
 
@@ -5927,6 +6006,9 @@ namespace quicktype {
     void from_json(const json & j, No & x);
     void to_json(json & j, const No & x);
 
+    void from_json(const json & j, NoSuchMethod & x);
+    void to_json(json & j, const NoSuchMethod & x);
+
     void from_json(const json & j, Nonatomic & x);
     void to_json(json & j, const Nonatomic & x);
 
@@ -6170,6 +6252,9 @@ namespace quicktype {
     void from_json(const json & j, Right & x);
     void to_json(json & j, const Right & x);
 
+    void from_json(const json & j, RuntimeType & x);
+    void to_json(json & j, const RuntimeType & x);
+
     void from_json(const json & j, S & x);
     void to_json(json & j, const S & x);
 
@@ -6224,6 +6309,9 @@ namespace quicktype {
     void from_json(const json & j, ToJson & x);
     void to_json(json & j, const ToJson & x);
 
+    void from_json(const json & j, ToString & x);
+    void to_json(json & j, const ToString & x);
+
     void from_json(const json & j, TopLevelClass & x);
     void to_json(json & j, const TopLevelClass & x);
 
@@ -7528,6 +7616,17 @@ namespace quicktype {
         j["hasOwnProperty"] = x.get_has_own_property();
     }
 
+    inline void from_json(const json & j, HashCode& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("hashCode") != j.end() && !j.at("hashCode").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_hash_code(j.at("hashCode").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const HashCode & x) {
+        j = json::object();
+        j["hashCode"] = x.get_hash_code();
+    }
+
     inline void from_json(const json & j, Id& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("id") != j.end() && !j.at("id").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -7927,6 +8026,7 @@ namespace quicktype {
         x.set_go(j.at("go").get<Go>());
         x.set_guard(j.at("guard").get<Guard>());
         x.set_has_own_property(j.at("hasOwnProperty").get<HasOwnProperty>());
+        x.set_hash_code(j.at("hashCode").get<HashCode>());
         x.set_id(j.at("id").get<Id>());
         x.set_imp(j.at("IMP").get<Imp>());
         x.set_implements(j.at("implements").get<Implements>());
@@ -7997,6 +8097,7 @@ namespace quicktype {
         j["go"] = x.get_go();
         j["guard"] = x.get_guard();
         j["hasOwnProperty"] = x.get_has_own_property();
+        j["hashCode"] = x.get_hash_code();
         j["id"] = x.get_id();
         j["IMP"] = x.get_imp();
         j["implements"] = x.get_implements();
@@ -8285,6 +8386,17 @@ namespace quicktype {
         j["NO"] = x.get_no();
     }
 
+    inline void from_json(const json & j, NoSuchMethod& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("noSuchMethod") != j.end() && !j.at("noSuchMethod").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_no_such_method(j.at("noSuchMethod").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const NoSuchMethod & x) {
+        j = json::object();
+        j["noSuchMethod"] = x.get_no_such_method();
+    }
+
     inline void from_json(const json & j, Nonatomic& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("nonatomic") != j.end() && !j.at("nonatomic").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -8774,6 +8886,7 @@ namespace quicktype {
         x.set_newtonsoft(j.at("newtonsoft").get<Newtonsoft>());
         x.set_nil(j.at("nil").get<Nil>());
         x.set_no(j.at("NO").get<No>());
+        x.set_no_such_method(j.at("noSuchMethod").get<NoSuchMethod>());
         x.set_nonatomic(j.at("nonatomic").get<Nonatomic>());
         x.set_none(j.at("None").get<None>());
         x.set_nonlocal(j.at("nonlocal").get<Nonlocal>());
@@ -8844,6 +8957,7 @@ namespace quicktype {
         j["newtonsoft"] = x.get_newtonsoft();
         j["nil"] = x.get_nil();
         j["NO"] = x.get_no();
+        j["noSuchMethod"] = x.get_no_such_method();
         j["nonatomic"] = x.get_nonatomic();
         j["None"] = x.get_none();
         j["nonlocal"] = x.get_nonlocal();
@@ -9306,6 +9420,17 @@ namespace quicktype {
         j["right"] = x.get_right();
     }
 
+    inline void from_json(const json & j, RuntimeType& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("runtimeType") != j.end() && !j.at("runtimeType").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_runtime_type(j.at("runtimeType").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const RuntimeType & x) {
+        j = json::object();
+        j["runtimeType"] = x.get_runtime_type();
+    }
+
     inline void from_json(const json & j, S& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("s") != j.end() && !j.at("s").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9504,6 +9629,17 @@ namespace quicktype {
         j["to_json"] = x.get_to_json();
     }
 
+    inline void from_json(const json & j, ToString& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("toString") != j.end() && !j.at("toString").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_to_string(j.at("toString").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const ToString & x) {
+        j = json::object();
+        j["toString"] = x.get_to_string();
+    }
+
     inline void from_json(const json & j, TopLevelClass& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("top_level") != j.end() && !j.at("top_level").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9645,6 +9781,7 @@ namespace quicktype {
         x.set_retain(j.at("retain").get<Retain>());
         x.set_rethrows(j.at("rethrows").get<Rethrows>());
         x.set_right(j.at("right").get<Right>());
+        x.set_runtime_type(j.at("runtimeType").get<RuntimeType>());
         x.set_s(j.at("s").get<S>());
         x.set_sbyte(j.at("sbyte").get<Sbyte>());
         x.set_sealed(j.at("sealed").get<Sealed>());
@@ -9663,6 +9800,7 @@ namespace quicktype {
         x.set_then(j.at("then").get<Then>());
         x.set_throws(j.at("throws").get<Throws>());
         x.set_to_json(j.at("to_json").get<ToJson>());
+        x.set_to_string(j.at("toString").get<ToString>());
         x.set_top_level(j.at("top_level").get<TopLevelClass>());
         x.set_transient(j.at("transient").get<Transient>());
         x.set_type(j.at("Type").get<Type>());
@@ -9715,6 +9853,7 @@ namespace quicktype {
         j["retain"] = x.get_retain();
         j["rethrows"] = x.get_rethrows();
         j["right"] = x.get_right();
+        j["runtimeType"] = x.get_runtime_type();
         j["s"] = x.get_s();
         j["sbyte"] = x.get_sbyte();
         j["sealed"] = x.get_sealed();
@@ -9733,6 +9872,7 @@ namespace quicktype {
         j["then"] = x.get_then();
         j["throws"] = x.get_throws();
         j["to_json"] = x.get_to_json();
+        j["toString"] = x.get_to_string();
         j["top_level"] = x.get_top_level();
         j["transient"] = x.get_transient();
         j["Type"] = x.get_type();
diff --git a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
index 2667c39..4ce7be3 100644
--- a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
+++ b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
@@ -662,6 +662,9 @@ class Obj2
   @[JSON::Field(key: "hasOwnProperty")]
   property has_own_property : HasOwnProperty
 
+  @[JSON::Field(key: "hashCode")]
+  property hash_code : HashCode
+
   property id : Id
 
   @[JSON::Field(key: "IMP")]
@@ -974,6 +977,13 @@ class HasOwnProperty
   property has_own_property : Int64
 end
 
+class HashCode
+  include JSON::Serializable
+
+  @[JSON::Field(key: "hashCode")]
+  property hash_code : Int64
+end
+
 class Id
   include JSON::Serializable
 
@@ -1180,6 +1190,9 @@ class Obj3
   @[JSON::Field(key: "NO")]
   property no : No
 
+  @[JSON::Field(key: "noSuchMethod")]
+  property no_such_method : NoSuchMethod
+
   property noexcept : Noexcept
 
   property nonatomic : Nonatomic
@@ -1430,6 +1443,13 @@ class No
   property no : Int64
 end
 
+class NoSuchMethod
+  include JSON::Serializable
+
+  @[JSON::Field(key: "noSuchMethod")]
+  property no_such_method : Int64
+end
+
 class Noexcept
   include JSON::Serializable
 
@@ -1755,6 +1775,9 @@ class Obj4
 
   property right : Right
 
+  @[JSON::Field(key: "runtimeType")]
+  property runtime_type : RuntimeType
+
   property s : S
 
   property sbyte : Sbyte
@@ -1804,6 +1827,9 @@ class Obj4
 
   property throws : Throws
 
+  @[JSON::Field(key: "toString")]
+  property to_string : ToString
+
   property top_level : TopLevelClass
 
   property transient : Transient
@@ -2022,6 +2048,13 @@ class Right
   property right : Int64
 end
 
+class RuntimeType
+  include JSON::Serializable
+
+  @[JSON::Field(key: "runtimeType")]
+  property runtime_type : Int64
+end
+
 class S
   include JSON::Serializable
 
@@ -2167,6 +2200,13 @@ class Throws
   property throws : Int64
 end
 
+class ToString
+  include JSON::Serializable
+
+  @[JSON::Field(key: "toString")]
+  property to_string : Int64
+end
+
 class TopLevelClass
   include JSON::Serializable
 
diff --git a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
index d88524a..a324a8a 100644
--- a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -781,6 +781,9 @@ namespace QuickType
         [JsonProperty("hasOwnProperty", Required = Required.Always)]
         public HasOwnProperty HasOwnProperty { get; set; }
 
+        [JsonProperty("hashCode", Required = Required.Always)]
+        public HashCode HashCode { get; set; }
+
         [JsonProperty("id", Required = Required.Always)]
         public Id Id { get; set; }
 
@@ -1118,6 +1121,12 @@ namespace QuickType
         public long HasOwnPropertyHasOwnProperty { get; set; }
     }
 
+    public partial class HashCode
+    {
+        [JsonProperty("hashCode", Required = Required.Always)]
+        public long HashCodeHashCode { get; set; }
+    }
+
     public partial class Id
     {
         [JsonProperty("id", Required = Required.Always)]
@@ -1315,6 +1324,9 @@ namespace QuickType
         [JsonProperty("NO", Required = Required.Always)]
         public No No { get; set; }
 
+        [JsonProperty("noSuchMethod", Required = Required.Always)]
+        public NoSuchMethod NoSuchMethod { get; set; }
+
         [JsonProperty("noexcept", Required = Required.Always)]
         public Noexcept Noexcept { get; set; }
 
@@ -1595,6 +1607,12 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
+    public partial class NoSuchMethod
+    {
+        [JsonProperty("noSuchMethod", Required = Required.Always)]
+        public long NoSuchMethodNoSuchMethod { get; set; }
+    }
+
     public partial class Noexcept
     {
         [JsonProperty("noexcept", Required = Required.Always)]
@@ -1831,6 +1849,9 @@ namespace QuickType
         [JsonProperty("to_json", Required = Required.Always)]
         public ToJson Obj4ToJson { get; set; }
 
+        [JsonProperty("toString", Required = Required.Always)]
+        public ToString Obj4ToString { get; set; }
+
         [JsonProperty("true", Required = Required.Always)]
         public TrueClass Obj4True { get; set; }
 
@@ -1885,6 +1906,9 @@ namespace QuickType
         [JsonProperty("right", Required = Required.Always)]
         public Right Right { get; set; }
 
+        [JsonProperty("runtimeType", Required = Required.Always)]
+        public RuntimeType RuntimeType { get; set; }
+
         [JsonProperty("s", Required = Required.Always)]
         public S S { get; set; }
 
@@ -2036,6 +2060,12 @@ namespace QuickType
         public long ToJsonToJson { get; set; }
     }
 
+    public partial class ToString
+    {
+        [JsonProperty("toString", Required = Required.Always)]
+        public long ToStringToString { get; set; }
+    }
+
     public partial class TrueClass
     {
         [JsonProperty("true", Required = Required.Always)]
@@ -2144,6 +2174,12 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial class RuntimeType
+    {
+        [JsonProperty("runtimeType", Required = Required.Always)]
+        public long RuntimeTypeRuntimeType { get; set; }
+    }
+
     public partial class S
     {
         [JsonProperty("s", Required = Required.Always)]
diff --git a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
index 1e333ba..f75d6e7 100644
--- a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -963,6 +963,10 @@ namespace QuickType
         [JsonPropertyName("hasOwnProperty")]
         public HasOwnProperty HasOwnProperty { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("hashCode")]
+        public HashCode HashCode { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("id")]
         public Id Id { get; set; }
@@ -1365,6 +1369,13 @@ namespace QuickType
         public long HasOwnPropertyHasOwnProperty { get; set; }
     }
 
+    public partial class HashCode
+    {
+        [JsonRequired]
+        [JsonPropertyName("hashCode")]
+        public long HashCodeHashCode { get; set; }
+    }
+
     public partial class Id
     {
         [JsonRequired]
@@ -1609,6 +1620,10 @@ namespace QuickType
         [JsonPropertyName("NO")]
         public No No { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("noSuchMethod")]
+        public NoSuchMethod NoSuchMethod { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("noexcept")]
         public Noexcept Noexcept { get; set; }
@@ -1954,6 +1969,13 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
+    public partial class NoSuchMethod
+    {
+        [JsonRequired]
+        [JsonPropertyName("noSuchMethod")]
+        public long NoSuchMethodNoSuchMethod { get; set; }
+    }
+
     public partial class Noexcept
     {
         [JsonRequired]
@@ -2231,6 +2253,10 @@ namespace QuickType
         [JsonPropertyName("to_json")]
         public ToJson Obj4ToJson { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("toString")]
+        public ToString Obj4ToString { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("true")]
         public TrueClass Obj4True { get; set; }
@@ -2303,6 +2329,10 @@ namespace QuickType
         [JsonPropertyName("right")]
         public Right Right { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("runtimeType")]
+        public RuntimeType RuntimeType { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("s")]
         public S S { get; set; }
@@ -2501,6 +2531,13 @@ namespace QuickType
         public long ToJsonToJson { get; set; }
     }
 
+    public partial class ToString
+    {
+        [JsonRequired]
+        [JsonPropertyName("toString")]
+        public long ToStringToString { get; set; }
+    }
+
     public partial class TrueClass
     {
         [JsonRequired]
@@ -2627,6 +2664,13 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial class RuntimeType
+    {
+        [JsonRequired]
+        [JsonPropertyName("runtimeType")]
+        public long RuntimeTypeRuntimeType { get; set; }
+    }
+
     public partial class S
     {
         [JsonRequired]
diff --git a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
index eec1680..2fd53c4 100644
--- a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -778,6 +778,9 @@ namespace QuickType
         [JsonProperty("hasOwnProperty", Required = Required.Always)]
         public HasOwnProperty HasOwnProperty { get; set; }
 
+        [JsonProperty("hashCode", Required = Required.Always)]
+        public HashCode HashCode { get; set; }
+
         [JsonProperty("id", Required = Required.Always)]
         public Id Id { get; set; }
 
@@ -1112,6 +1115,12 @@ namespace QuickType
         public long HasOwnPropertyHasOwnProperty { get; set; }
     }
 
+    public partial record HashCode
+    {
+        [JsonProperty("hashCode", Required = Required.Always)]
+        public long HashCodeHashCode { get; set; }
+    }
+
     public partial record Id
     {
         [JsonProperty("id", Required = Required.Always)]
@@ -1315,6 +1324,9 @@ namespace QuickType
         [JsonProperty("NO", Required = Required.Always)]
         public No No { get; set; }
 
+        [JsonProperty("noSuchMethod", Required = Required.Always)]
+        public NoSuchMethod NoSuchMethod { get; set; }
+
         [JsonProperty("noexcept", Required = Required.Always)]
         public Noexcept Noexcept { get; set; }
 
@@ -1595,6 +1607,12 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
+    public partial record NoSuchMethod
+    {
+        [JsonProperty("noSuchMethod", Required = Required.Always)]
+        public long NoSuchMethodNoSuchMethod { get; set; }
+    }
+
     public partial record Noexcept
     {
         [JsonProperty("noexcept", Required = Required.Always)]
@@ -1831,6 +1849,9 @@ namespace QuickType
         [JsonProperty("to_json", Required = Required.Always)]
         public ToJson Obj4ToJson { get; set; }
 
+        [JsonProperty("toString", Required = Required.Always)]
+        public ToString Obj4ToString { get; set; }
+
         [JsonProperty("true", Required = Required.Always)]
         public TrueClass Obj4True { get; set; }
 
@@ -1885,6 +1906,9 @@ namespace QuickType
         [JsonProperty("right", Required = Required.Always)]
         public Right Right { get; set; }
 
+        [JsonProperty("runtimeType", Required = Required.Always)]
+        public RuntimeType RuntimeType { get; set; }
+
         [JsonProperty("s", Required = Required.Always)]
         public S S { get; set; }
 
@@ -2036,6 +2060,12 @@ namespace QuickType
         public long ToJsonToJson { get; set; }
     }
 
+    public partial record ToString
+    {
+        [JsonProperty("toString", Required = Required.Always)]
+        public long ToStringToString { get; set; }
+    }
+
     public partial record TrueClass
     {
         [JsonProperty("true", Required = Required.Always)]
@@ -2144,6 +2174,12 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial record RuntimeType
+    {
+        [JsonProperty("runtimeType", Required = Required.Always)]
+        public long RuntimeTypeRuntimeType { get; set; }
+    }
+
     public partial record S
     {
         [JsonProperty("s", Required = Required.Always)]
diff --git a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
index 5d004bc..e112847 100644
--- a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
@@ -1420,6 +1420,7 @@ class Obj2 {
     final For obj2For;
     final FromJson obj2FromJson;
     final Get obj2Get;
+    final HashCode obj2HashCode;
     final If obj2If;
     final Implements obj2Implements;
     final Import obj2Import;
@@ -1488,6 +1489,7 @@ class Obj2 {
         required this.obj2For,
         required this.obj2FromJson,
         required this.obj2Get,
+        required this.obj2HashCode,
         required this.obj2If,
         required this.obj2Implements,
         required this.obj2Import,
@@ -1557,6 +1559,7 @@ class Obj2 {
         obj2For: For.fromJson(json["for"]),
         obj2FromJson: FromJson.fromJson(json["from_json"]),
         obj2Get: Get.fromJson(json["get"]),
+        obj2HashCode: HashCode.fromJson(json["hashCode"]),
         obj2If: If.fromJson(json["if"]),
         obj2Implements: Implements.fromJson(json["implements"]),
         obj2Import: Import.fromJson(json["import"]),
@@ -1626,6 +1629,7 @@ class Obj2 {
         "for": obj2For.toJson(),
         "from_json": obj2FromJson.toJson(),
         "get": obj2Get.toJson(),
+        "hashCode": obj2HashCode.toJson(),
         "if": obj2If.toJson(),
         "implements": obj2Implements.toJson(),
         "import": obj2Import.toJson(),
@@ -2564,6 +2568,22 @@ class Get {
     };
 }
 
+class HashCode {
+    final int hashCodeHashCode;
+
+    HashCode({
+        required this.hashCodeHashCode,
+    });
+
+    factory HashCode.fromJson(Map<String, dynamic> json) => HashCode(
+        hashCodeHashCode: json["hashCode"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "hashCode": hashCodeHashCode,
+    };
+}
+
 class If {
     final int ifIf;
 
@@ -2716,6 +2736,7 @@ class Obj3 {
     final Number number;
     final Is obj3Is;
     final New obj3New;
+    final NoSuchMethod obj3NoSuchMethod;
     final NoneClass obj3None;
     final Null obj3Null;
     final Operator obj3Operator;
@@ -2784,6 +2805,7 @@ class Obj3 {
         required this.number,
         required this.obj3Is,
         required this.obj3New,
+        required this.obj3NoSuchMethod,
         required this.obj3None,
         required this.obj3Null,
         required this.obj3Operator,
@@ -2853,6 +2875,7 @@ class Obj3 {
         number: Number.fromJson(json["number"]),
         obj3Is: Is.fromJson(json["is"]),
         obj3New: New.fromJson(json["new"]),
+        obj3NoSuchMethod: NoSuchMethod.fromJson(json["noSuchMethod"]),
         obj3None: NoneClass.fromJson(json["none"]),
         obj3Null: Null.fromJson(json["NULL"]),
         obj3Operator: Operator.fromJson(json["operator"]),
@@ -2922,6 +2945,7 @@ class Obj3 {
         "number": number.toJson(),
         "is": obj3Is.toJson(),
         "new": obj3New.toJson(),
+        "noSuchMethod": obj3NoSuchMethod.toJson(),
         "none": obj3None.toJson(),
         "NULL": obj3Null.toJson(),
         "operator": obj3Operator.toJson(),
@@ -3560,6 +3584,22 @@ class New {
     };
 }
 
+class NoSuchMethod {
+    final int noSuchMethodNoSuchMethod;
+
+    NoSuchMethod({
+        required this.noSuchMethodNoSuchMethod,
+    });
+
+    factory NoSuchMethod.fromJson(Map<String, dynamic> json) => NoSuchMethod(
+        noSuchMethodNoSuchMethod: json["noSuchMethod"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "noSuchMethod": noSuchMethodNoSuchMethod,
+    };
+}
+
 class NoneClass {
     final int none;
 
@@ -3995,6 +4035,7 @@ class NullClass {
 class Obj4 {
     final int dummy;
     final Return obj4Return;
+    final RuntimeType obj4RuntimeType;
     final SelfClass obj4Self;
     final Set obj4Set;
     final Static obj4Static;
@@ -4003,6 +4044,7 @@ class Obj4 {
     final This obj4This;
     final Throw obj4Throw;
     final ToJson obj4ToJson;
+    final ToString obj4ToString;
     final True obj4True;
     final Try obj4Try;
     final TypeClass obj4Type;
@@ -4063,6 +4105,7 @@ class Obj4 {
     Obj4({
         required this.dummy,
         required this.obj4Return,
+        required this.obj4RuntimeType,
         required this.obj4Self,
         required this.obj4Set,
         required this.obj4Static,
@@ -4071,6 +4114,7 @@ class Obj4 {
         required this.obj4This,
         required this.obj4Throw,
         required this.obj4ToJson,
+        required this.obj4ToString,
         required this.obj4True,
         required this.obj4Try,
         required this.obj4Type,
@@ -4132,6 +4176,7 @@ class Obj4 {
     factory Obj4.fromJson(Map<String, dynamic> json) => Obj4(
         dummy: json["dummy"],
         obj4Return: Return.fromJson(json["return"]),
+        obj4RuntimeType: RuntimeType.fromJson(json["runtimeType"]),
         obj4Self: SelfClass.fromJson(json["self"]),
         obj4Set: Set.fromJson(json["set"]),
         obj4Static: Static.fromJson(json["static"]),
@@ -4140,6 +4185,7 @@ class Obj4 {
         obj4This: This.fromJson(json["this"]),
         obj4Throw: Throw.fromJson(json["throw"]),
         obj4ToJson: ToJson.fromJson(json["to_json"]),
+        obj4ToString: ToString.fromJson(json["toString"]),
         obj4True: True.fromJson(json["True"]),
         obj4Try: Try.fromJson(json["try"]),
         obj4Type: TypeClass.fromJson(json["type"]),
@@ -4201,6 +4247,7 @@ class Obj4 {
     Map<String, dynamic> toJson() => {
         "dummy": dummy,
         "return": obj4Return.toJson(),
+        "runtimeType": obj4RuntimeType.toJson(),
         "self": obj4Self.toJson(),
         "set": obj4Set.toJson(),
         "static": obj4Static.toJson(),
@@ -4209,6 +4256,7 @@ class Obj4 {
         "this": obj4This.toJson(),
         "throw": obj4Throw.toJson(),
         "to_json": obj4ToJson.toJson(),
+        "toString": obj4ToString.toJson(),
         "True": obj4True.toJson(),
         "try": obj4Try.toJson(),
         "type": obj4Type.toJson(),
@@ -4284,6 +4332,22 @@ class Return {
     };
 }
 
+class RuntimeType {
+    final int runtimeTypeRuntimeType;
+
+    RuntimeType({
+        required this.runtimeTypeRuntimeType,
+    });
+
+    factory RuntimeType.fromJson(Map<String, dynamic> json) => RuntimeType(
+        runtimeTypeRuntimeType: json["runtimeType"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "runtimeType": runtimeTypeRuntimeType,
+    };
+}
+
 class SelfClass {
     final int self;
 
@@ -4412,6 +4476,22 @@ class ToJson {
     };
 }
 
+class ToString {
+    final int toStringToString;
+
+    ToString({
+        required this.toStringToString,
+    });
+
+    factory ToString.fromJson(Map<String, dynamic> json) => ToString(
+        toStringToString: json["toString"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "toString": toStringToString,
+    };
+}
+
 class True {
     final int trueTrue;
 
diff --git a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
index 1947dee..05e7521 100644
--- a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
@@ -4529,6 +4529,45 @@ defmodule HasOwnProperty do
   end
 end
 
+defmodule HashCode do
+  @enforce_keys [:hash_code]
+  defstruct [:hash_code]
+
+  @type t :: %__MODULE__{
+          hash_code: integer()
+        }
+
+  def decode_hash_code(value) when is_integer(value), do: value
+  def decode_hash_code(_), do: {:error, "Unexpected type when decoding HashCode.hash_code"}
+
+  def encode_hash_code(value) when is_integer(value), do: value
+  def encode_hash_code(_), do: {:error, "Unexpected type when encoding HashCode.hash_code"}
+
+  def from_map(m) do
+    %HashCode{
+      hash_code: decode_hash_code(m["hashCode"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "hashCode" => struct.hash_code,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule ID do
   @enforce_keys [:id]
   defstruct [:id]
@@ -5310,8 +5349,8 @@ defmodule InClass do
 end
 
 defmodule Obj2 do
-  @enforce_keys [:default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :enum, :equality_contract, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :has_own_property, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :obj2_def, :obj2_do, :obj2_else, :obj2_false, :obj2_import, :obj2_in]
-  defstruct [:default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :enum, :equality_contract, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :has_own_property, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :obj2_def, :obj2_do, :obj2_else, :obj2_false, :obj2_import, :obj2_in]
+  @enforce_keys [:default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :enum, :equality_contract, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :obj2_def, :obj2_do, :obj2_else, :obj2_false, :obj2_import, :obj2_in]
+  defstruct [:default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :enum, :equality_contract, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :has_own_property, :hash_code, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :obj2_def, :obj2_do, :obj2_else, :obj2_false, :obj2_import, :obj2_in]
 
   @type t :: %__MODULE__{
           default: Default.t(),
@@ -5360,6 +5399,7 @@ defmodule Obj2 do
           goto: Goto.t(),
           guard: Guard.t(),
           has_own_property: HasOwnProperty.t(),
+          hash_code: HashCode.t(),
           id: ID.t(),
           if: If.t(),
           imp: Imp.t(),
@@ -5436,6 +5476,7 @@ defmodule Obj2 do
       goto: Goto.from_map(m["goto"]),
       guard: Guard.from_map(m["guard"]),
       has_own_property: HasOwnProperty.from_map(m["hasOwnProperty"]),
+      hash_code: HashCode.from_map(m["hashCode"]),
       id: ID.from_map(m["id"]),
       if: If.from_map(m["if"]),
       imp: Imp.from_map(m["IMP"]),
@@ -5513,6 +5554,7 @@ defmodule Obj2 do
       "goto" => Goto.to_map(struct.goto),
       "guard" => Guard.to_map(struct.guard),
       "hasOwnProperty" => HasOwnProperty.to_map(struct.has_own_property),
+      "hashCode" => HashCode.to_map(struct.hash_code),
       "id" => ID.to_map(struct.id),
       "if" => If.to_map(struct.if),
       "IMP" => Imp.to_map(struct.imp),
@@ -6596,6 +6638,45 @@ defmodule No do
   end
 end
 
+defmodule NoSuchMethod do
+  @enforce_keys [:no_such_method]
+  defstruct [:no_such_method]
+
+  @type t :: %__MODULE__{
+          no_such_method: integer()
+        }
+
+  def decode_no_such_method(value) when is_integer(value), do: value
+  def decode_no_such_method(_), do: {:error, "Unexpected type when decoding NoSuchMethod.no_such_method"}
+
+  def encode_no_such_method(value) when is_integer(value), do: value
+  def encode_no_such_method(_), do: {:error, "Unexpected type when encoding NoSuchMethod.no_such_method"}
+
+  def from_map(m) do
+    %NoSuchMethod{
+      no_such_method: decode_no_such_method(m["noSuchMethod"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "noSuchMethod" => struct.no_such_method,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Noexcept do
   @enforce_keys [:noexcept]
   defstruct [:noexcept]
@@ -8079,8 +8160,8 @@ defmodule ProtocolClass do
 end
 
 defmodule Obj3 do
-  @enforce_keys [:dummy, :is, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :lambda, :lazy, :left, :let, :list, :lock, :long, :map, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_string, :null, :nullptr, :number, :obj3_nil, :obj3_none, :obj3_not, :obj3_null, :obj3_or, :obj3_protocol, :object, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol]
-  defstruct [:dummy, :is, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :lambda, :lazy, :left, :let, :list, :lock, :long, :map, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_string, :null, :nullptr, :number, :obj3_nil, :obj3_none, :obj3_not, :obj3_null, :obj3_or, :obj3_protocol, :object, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol]
+  @enforce_keys [:dummy, :is, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :lambda, :lazy, :left, :let, :list, :lock, :long, :map, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_string, :null, :nullptr, :number, :obj3_nil, :obj3_none, :obj3_not, :obj3_null, :obj3_or, :obj3_protocol, :object, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol]
+  defstruct [:dummy, :is, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :lambda, :lazy, :left, :let, :list, :lock, :long, :map, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_string, :null, :nullptr, :number, :obj3_nil, :obj3_none, :obj3_not, :obj3_null, :obj3_or, :obj3_protocol, :object, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol]
 
   @type t :: %__MODULE__{
           dummy: integer(),
@@ -8111,6 +8192,7 @@ defmodule Obj3 do
           new: New.t(),
           newtonsoft: Newtonsoft.t(),
           no: No.t(),
+          no_such_method: NoSuchMethod.t(),
           noexcept: Noexcept.t(),
           nonatomic: Nonatomic.t(),
           none: None.t(),
@@ -8187,6 +8269,7 @@ defmodule Obj3 do
       new: New.from_map(m["new"]),
       newtonsoft: Newtonsoft.from_map(m["newtonsoft"]),
       no: No.from_map(m["NO"]),
+      no_such_method: NoSuchMethod.from_map(m["noSuchMethod"]),
       noexcept: Noexcept.from_map(m["noexcept"]),
       nonatomic: Nonatomic.from_map(m["nonatomic"]),
       none: None.from_map(m["None"]),
@@ -8264,6 +8347,7 @@ defmodule Obj3 do
       "new" => New.to_map(struct.new),
       "newtonsoft" => Newtonsoft.to_map(struct.newtonsoft),
       "NO" => No.to_map(struct.no),
+      "noSuchMethod" => NoSuchMethod.to_map(struct.no_such_method),
       "noexcept" => Noexcept.to_map(struct.noexcept),
       "nonatomic" => Nonatomic.to_map(struct.nonatomic),
       "None" => None.to_map(struct.none),
@@ -9092,6 +9176,45 @@ defmodule Right do
   end
 end
 
+defmodule RuntimeType do
+  @enforce_keys [:runtime_type]
+  defstruct [:runtime_type]
+
+  @type t :: %__MODULE__{
+          runtime_type: integer()
+        }
+
+  def decode_runtime_type(value) when is_integer(value), do: value
+  def decode_runtime_type(_), do: {:error, "Unexpected type when decoding RuntimeType.runtime_type"}
+
+  def encode_runtime_type(value) when is_integer(value), do: value
+  def encode_runtime_type(_), do: {:error, "Unexpected type when encoding RuntimeType.runtime_type"}
+
+  def from_map(m) do
+    %RuntimeType{
+      runtime_type: decode_runtime_type(m["runtimeType"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "runtimeType" => struct.runtime_type,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule S do
   @enforce_keys [:s]
   defstruct [:s]
@@ -10301,6 +10424,45 @@ defmodule ToJSON do
   end
 end
 
+defmodule ToString do
+  @enforce_keys [:to_string]
+  defstruct [:to_string]
+
+  @type t :: %__MODULE__{
+          to_string: integer()
+        }
+
+  def decode_to_string(value) when is_integer(value), do: value
+  def decode_to_string(_), do: {:error, "Unexpected type when decoding ToString.to_string"}
+
+  def encode_to_string(value) when is_integer(value), do: value
+  def encode_to_string(_), do: {:error, "Unexpected type when encoding ToString.to_string"}
+
+  def from_map(m) do
+    %ToString{
+      to_string: decode_to_string(m["toString"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "toString" => struct.to_string,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule TopLevelClass do
   @enforce_keys [:top_level]
   defstruct [:top_level]
@@ -10848,8 +11010,8 @@ defmodule Undefined do
 end
 
 defmodule Obj4 do
-  @enforce_keys [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
-  defstruct [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
+  @enforce_keys [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
+  defstruct [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
 
   @type t :: %__MODULE__{
           dummy: integer(),
@@ -10873,6 +11035,7 @@ defmodule Obj4 do
           rethrows: Rethrows.t(),
           return: Return.t(),
           right: Right.t(),
+          runtime_type: RuntimeType.t(),
           s: S.t(),
           sbyte: Sbyte.t(),
           sealed: Sealed.t(),
@@ -10904,6 +11067,7 @@ defmodule Obj4 do
           throw: Throw.t(),
           throws: Throws.t(),
           to_json: ToJSON.t(),
+          to_string: ToString.t(),
           top_level: TopLevelClass.t(),
           transient: Transient.t(),
           true_1: Obj4True.t(),
@@ -10949,6 +11113,7 @@ defmodule Obj4 do
       rethrows: Rethrows.from_map(m["rethrows"]),
       return: Return.from_map(m["return"]),
       right: Right.from_map(m["right"]),
+      runtime_type: RuntimeType.from_map(m["runtimeType"]),
       s: S.from_map(m["s"]),
       sbyte: Sbyte.from_map(m["sbyte"]),
       sealed: Sealed.from_map(m["sealed"]),
@@ -10980,6 +11145,7 @@ defmodule Obj4 do
       throw: Throw.from_map(m["throw"]),
       throws: Throws.from_map(m["throws"]),
       to_json: ToJSON.from_map(m["to_json"]),
+      to_string: ToString.from_map(m["toString"]),
       top_level: TopLevelClass.from_map(m["top_level"]),
       transient: Transient.from_map(m["transient"]),
       true_1: Obj4True.from_map(m["true"]),
@@ -11026,6 +11192,7 @@ defmodule Obj4 do
       "rethrows" => Rethrows.to_map(struct.rethrows),
       "return" => Return.to_map(struct.return),
       "right" => Right.to_map(struct.right),
+      "runtimeType" => RuntimeType.to_map(struct.runtime_type),
       "s" => S.to_map(struct.s),
       "sbyte" => Sbyte.to_map(struct.sbyte),
       "sealed" => Sealed.to_map(struct.sealed),
@@ -11057,6 +11224,7 @@ defmodule Obj4 do
       "throw" => Throw.to_map(struct.throw),
       "throws" => Throws.to_map(struct.throws),
       "to_json" => ToJSON.to_map(struct.to_json),
+      "toString" => ToString.to_map(struct.to_string),
       "top_level" => TopLevelClass.to_map(struct.top_level),
       "transient" => Transient.to_map(struct.transient),
       "true" => Obj4True.to_map(struct.true_1),
diff --git a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
index 7df6f5d..1a723e7 100644
--- a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
@@ -127,6 +127,7 @@ module QuickType exposing
     , Goto
     , Guard
     , HasOwnProperty
+    , HashCode
     , ID
     , Imp
     , Implements
@@ -174,6 +175,7 @@ module QuickType exposing
     , Newtonsoft
     , Nil
     , No
+    , NoSuchMethod
     , Noexcept
     , Nonatomic
     , None
@@ -237,6 +239,7 @@ module QuickType exposing
     , Rethrows
     , Return
     , Right
+    , RuntimeType
     , S
     , Sbyte
     , Sealed
@@ -266,6 +269,7 @@ module QuickType exposing
     , Throw
     , Throws
     , ToJSON
+    , ToString
     , TopLevel
     , Transient
     , TrueClass
@@ -692,6 +696,7 @@ type alias Obj2 =
     , goto : Goto
     , guard : Guard
     , hasOwnProperty : HasOwnProperty
+    , hashCode : HashCode
     , id : ID
     , imp : Imp
     , implements : Implements
@@ -894,6 +899,10 @@ type alias HasOwnProperty =
     { hasOwnProperty : Int
     }
 
+type alias HashCode =
+    { hashCode : Int
+    }
+
 type alias ID =
     { id : Int
     }
@@ -1002,6 +1011,7 @@ type alias Obj3 =
     , newtonsoft : Newtonsoft
     , nil : Nil
     , no : No
+    , noSuchMethod : NoSuchMethod
     , noexcept : Noexcept
     , nonatomic : Nonatomic
     , none : None
@@ -1147,6 +1157,10 @@ type alias No =
     { no : Int
     }
 
+type alias NoSuchMethod =
+    { noSuchMethod : Int
+    }
+
 type alias Noexcept =
     { noexcept : Int
     }
@@ -1328,6 +1342,7 @@ type alias Obj4 =
     , rethrows : Rethrows
     , return : Return
     , right : Right
+    , runtimeType : RuntimeType
     , s : S
     , sbyte : Sbyte
     , sealed : Sealed
@@ -1357,6 +1372,7 @@ type alias Obj4 =
     , throw : Throw
     , throws : Throws
     , toJSON : ToJSON
+    , toString : ToString
     , topLevel : TopLevel
     , transient : Transient
     , true : TrueClass
@@ -1464,6 +1480,10 @@ type alias Right =
     { right : Int
     }
 
+type alias RuntimeType =
+    { runtimeType : Int
+    }
+
 type alias S =
     { s : Int
     }
@@ -1580,6 +1600,10 @@ type alias ToJSON =
     { toJSON : Int
     }
 
+type alias ToString =
+    { toString : Int
+    }
+
 type alias TopLevel =
     { topLevel : Int
     }
@@ -2673,6 +2697,7 @@ obj2 =
         |> Jpipe.required "goto" goto
         |> Jpipe.required "guard" guard
         |> Jpipe.required "hasOwnProperty" hasOwnProperty
+        |> Jpipe.required "hashCode" hashCode
         |> Jpipe.required "id" id
         |> Jpipe.required "IMP" imp
         |> Jpipe.required "implements" implements
@@ -2743,6 +2768,7 @@ encodeObj2 x =
         , ("goto", encodeGoto x.goto)
         , ("guard", encodeGuard x.guard)
         , ("hasOwnProperty", encodeHasOwnProperty x.hasOwnProperty)
+        , ("hashCode", encodeHashCode x.hashCode)
         , ("id", encodeID x.id)
         , ("IMP", encodeImp x.imp)
         , ("implements", encodeImplements x.implements)
@@ -3260,6 +3286,17 @@ encodeHasOwnProperty x =
         [ ("hasOwnProperty", Jenc.int x.hasOwnProperty)
         ]
 
+hashCode : Jdec.Decoder HashCode
+hashCode =
+    Jdec.succeed HashCode
+        |> Jpipe.required "hashCode" Jdec.int
+
+encodeHashCode : HashCode -> Jenc.Value
+encodeHashCode x =
+    Jenc.object
+        [ ("hashCode", Jenc.int x.hashCode)
+        ]
+
 id : Jdec.Decoder ID
 id =
     Jdec.succeed ID
@@ -3510,6 +3547,7 @@ obj3 =
         |> Jpipe.required "newtonsoft" newtonsoft
         |> Jpipe.required "nil" nil
         |> Jpipe.required "NO" no
+        |> Jpipe.required "noSuchMethod" noSuchMethod
         |> Jpipe.required "noexcept" noexcept
         |> Jpipe.required "nonatomic" nonatomic
         |> Jpipe.required "None" none
@@ -3580,6 +3618,7 @@ encodeObj3 x =
         , ("newtonsoft", encodeNewtonsoft x.newtonsoft)
         , ("nil", encodeNil x.nil)
         , ("NO", encodeNo x.no)
+        , ("noSuchMethod", encodeNoSuchMethod x.noSuchMethod)
         , ("noexcept", encodeNoexcept x.noexcept)
         , ("nonatomic", encodeNonatomic x.nonatomic)
         , ("None", encodeNone x.none)
@@ -3907,6 +3946,17 @@ encodeNo x =
         [ ("NO", Jenc.int x.no)
         ]
 
+noSuchMethod : Jdec.Decoder NoSuchMethod
+noSuchMethod =
+    Jdec.succeed NoSuchMethod
+        |> Jpipe.required "noSuchMethod" Jdec.int
+
+encodeNoSuchMethod : NoSuchMethod -> Jenc.Value
+encodeNoSuchMethod x =
+    Jenc.object
+        [ ("noSuchMethod", Jenc.int x.noSuchMethod)
+        ]
+
 noexcept : Jdec.Decoder Noexcept
 noexcept =
     Jdec.succeed Noexcept
@@ -4363,6 +4413,7 @@ obj4 =
         |> Jpipe.required "rethrows" rethrows
         |> Jpipe.required "return" return
         |> Jpipe.required "right" right
+        |> Jpipe.required "runtimeType" runtimeType
         |> Jpipe.required "s" s
         |> Jpipe.required "sbyte" sbyte
         |> Jpipe.required "sealed" sealed
@@ -4392,6 +4443,7 @@ obj4 =
         |> Jpipe.required "throw" throw
         |> Jpipe.required "throws" throws
         |> Jpipe.required "to_json" toJSON
+        |> Jpipe.required "toString" toString
         |> Jpipe.required "top_level" topLevel
         |> Jpipe.required "transient" transient
         |> Jpipe.required "True" trueClass
@@ -4433,6 +4485,7 @@ encodeObj4 x =
         , ("rethrows", encodeRethrows x.rethrows)
         , ("return", encodeReturn x.return)
         , ("right", encodeRight x.right)
+        , ("runtimeType", encodeRuntimeType x.runtimeType)
         , ("s", encodeS x.s)
         , ("sbyte", encodeSbyte x.sbyte)
         , ("sealed", encodeSealed x.sealed)
@@ -4462,6 +4515,7 @@ encodeObj4 x =
         , ("throw", encodeThrow x.throw)
         , ("throws", encodeThrows x.throws)
         , ("to_json", encodeToJSON x.toJSON)
+        , ("toString", encodeToString x.toString)
         , ("top_level", encodeTopLevel x.topLevel)
         , ("transient", encodeTransient x.transient)
         , ("True", encodeTrueClass x.true)
@@ -4730,6 +4784,17 @@ encodeRight x =
         [ ("right", Jenc.int x.right)
         ]
 
+runtimeType : Jdec.Decoder RuntimeType
+runtimeType =
+    Jdec.succeed RuntimeType
+        |> Jpipe.required "runtimeType" Jdec.int
+
+encodeRuntimeType : RuntimeType -> Jenc.Value
+encodeRuntimeType x =
+    Jenc.object
+        [ ("runtimeType", Jenc.int x.runtimeType)
+        ]
+
 s : Jdec.Decoder S
 s =
     Jdec.succeed S
@@ -5049,6 +5114,17 @@ encodeToJSON x =
         [ ("to_json", Jenc.int x.toJSON)
         ]
 
+toString : Jdec.Decoder ToString
+toString =
+    Jdec.succeed ToString
+        |> Jpipe.required "toString" Jdec.int
+
+encodeToString : ToString -> Jenc.Value
+encodeToString x =
+    Jenc.object
+        [ ("toString", Jenc.int x.toString)
+        ]
+
 topLevel : Jdec.Decoder TopLevel
 topLevel =
     Jdec.succeed TopLevel
diff --git a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
index 5bb0301..308bc2a 100644
--- a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -399,6 +399,7 @@ export type Obj2 = {
     goto:              Goto;
     guard:             Guard;
     hasOwnProperty:    HasOwnProperty;
+    hashCode:          HashCode;
     id:                ID;
     if:                If;
     implements:        Implements;
@@ -616,6 +617,10 @@ export type HasOwnProperty = {
     hasOwnProperty: number;
 };
 
+export type HashCode = {
+    hashCode: number;
+};
+
 export type ID = {
     id: number;
 };
@@ -710,6 +715,7 @@ export type Obj3 = {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
+    noSuchMethod:               NoSuchMethod;
     noexcept:                   Noexcept;
     nonatomic:                  Nonatomic;
     none:                       NoneClass;
@@ -873,6 +879,10 @@ export type Nil = {
     nil: number;
 };
 
+export type NoSuchMethod = {
+    noSuchMethod: number;
+};
+
 export type Noexcept = {
     noexcept: number;
 };
@@ -1028,6 +1038,7 @@ export type Obj4 = {
     rethrows:         Rethrows;
     return:           Return;
     right:            Right;
+    runtimeType:      RuntimeType;
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
@@ -1057,6 +1068,7 @@ export type Obj4 = {
     thread_local:     ThreadLocal;
     throw:            Throw;
     throws:           Throws;
+    toString:         ToString;
     to_json:          ToJSON;
     top_level:        TopLevelClass;
     transient:        Transient;
@@ -1158,6 +1170,10 @@ export type Right = {
     right: number;
 };
 
+export type RuntimeType = {
+    runtimeType: number;
+};
+
 export type S = {
     s: number;
 };
@@ -1274,6 +1290,10 @@ export type Throws = {
     throws: number;
 };
 
+export type ToString = {
+    toString: number;
+};
+
 export type ToJSON = {
     to_json: number;
 };
@@ -1946,6 +1966,7 @@ const typeMap: any = {
         { json: "goto", js: "goto", typ: r("Goto") },
         { json: "guard", js: "guard", typ: r("Guard") },
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: r("HasOwnProperty") },
+        { json: "hashCode", js: "hashCode", typ: r("HashCode") },
         { json: "id", js: "id", typ: r("ID") },
         { json: "if", js: "if", typ: r("If") },
         { json: "implements", js: "implements", typ: r("Implements") },
@@ -2112,6 +2133,9 @@ const typeMap: any = {
     "HasOwnProperty": o([
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: i(0) },
     ], false),
+    "HashCode": o([
+        { json: "hashCode", js: "hashCode", typ: i(0) },
+    ], false),
     "ID": o([
         { json: "id", js: "id", typ: i(0) },
     ], false),
@@ -2191,6 +2215,7 @@ const typeMap: any = {
         { json: "new", js: "new", typ: r("New") },
         { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
         { json: "nil", js: "nil", typ: r("Nil") },
+        { json: "noSuchMethod", js: "noSuchMethod", typ: r("NoSuchMethod") },
         { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
         { json: "nonatomic", js: "nonatomic", typ: r("Nonatomic") },
         { json: "none", js: "none", typ: r("NoneClass") },
@@ -2321,6 +2346,9 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
+    "NoSuchMethod": o([
+        { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
+    ], false),
     "Noexcept": o([
         { json: "noexcept", js: "noexcept", typ: i(0) },
     ], false),
@@ -2443,6 +2471,7 @@ const typeMap: any = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "runtimeType", js: "runtimeType", typ: r("RuntimeType") },
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
@@ -2472,6 +2501,7 @@ const typeMap: any = {
         { json: "thread_local", js: "thread_local", typ: r("ThreadLocal") },
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
+        { json: "toString", js: "toString", typ: r("ToString") },
         { json: "to_json", js: "to_json", typ: r("ToJSON") },
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
@@ -2551,6 +2581,9 @@ const typeMap: any = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "RuntimeType": o([
+        { json: "runtimeType", js: "runtimeType", typ: i(0) },
+    ], false),
     "S": o([
         { json: "s", js: "s", typ: i(0) },
     ], false),
@@ -2638,6 +2671,9 @@ const typeMap: any = {
     "Throws": o([
         { json: "throws", js: "throws", typ: i(0) },
     ], false),
+    "ToString": o([
+        { json: "toString", js: "toString", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
diff --git a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
index 260e9db..ae69ee4 100644
--- a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
+++ b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
@@ -406,6 +406,7 @@ type Obj2 struct {
 	Goto             Goto             `json:"goto"`
 	Guard            Guard            `json:"guard"`
 	HasOwnProperty   HasOwnProperty   `json:"hasOwnProperty"`
+	HashCode         HashCode         `json:"hashCode"`
 	ID               ID               `json:"id"`
 	If               If               `json:"if"`
 	Imp              Imp              `json:"IMP"`
@@ -617,6 +618,10 @@ type HasOwnProperty struct {
 	HasOwnProperty int64 `json:"hasOwnProperty"`
 }
 
+type HashCode struct {
+	HashCode int64 `json:"hashCode"`
+}
+
 type ID struct {
 	ID int64 `json:"id"`
 }
@@ -716,6 +721,7 @@ type Obj3 struct {
 	Newtonsoft               Newtonsoft               `json:"newtonsoft"`
 	Nil                      Nil                      `json:"nil"`
 	No                       No                       `json:"NO"`
+	NoSuchMethod             NoSuchMethod             `json:"noSuchMethod"`
 	Noexcept                 Noexcept                 `json:"noexcept"`
 	Nonatomic                Nonatomic                `json:"nonatomic"`
 	None                     None                     `json:"None"`
@@ -870,6 +876,10 @@ type No struct {
 	No int64 `json:"NO"`
 }
 
+type NoSuchMethod struct {
+	NoSuchMethod int64 `json:"noSuchMethod"`
+}
+
 type Noexcept struct {
 	Noexcept int64 `json:"noexcept"`
 }
@@ -1036,6 +1046,7 @@ type Obj4 struct {
 	Rethrows        Rethrows        `json:"rethrows"`
 	Return          Return          `json:"return"`
 	Right           Right           `json:"right"`
+	RuntimeType     RuntimeType     `json:"runtimeType"`
 	S               S               `json:"s"`
 	Sbyte           Sbyte           `json:"sbyte"`
 	Sealed          Sealed          `json:"sealed"`
@@ -1067,6 +1078,7 @@ type Obj4 struct {
 	Throw           Throw           `json:"throw"`
 	Throws          Throws          `json:"throws"`
 	ToJSON          ToJSON          `json:"to_json"`
+	ToString        ToString        `json:"toString"`
 	TopLevel        TopLevelClass   `json:"top_level"`
 	Transient       Transient       `json:"transient"`
 	True            True            `json:"True"`
@@ -1163,6 +1175,10 @@ type Right struct {
 	Right int64 `json:"right"`
 }
 
+type RuntimeType struct {
+	RuntimeType int64 `json:"runtimeType"`
+}
+
 type S struct {
 	S int64 `json:"s"`
 }
@@ -1287,6 +1303,10 @@ type ToJSON struct {
 	ToJSON int64 `json:"to_json"`
 }
 
+type ToString struct {
+	ToString int64 `json:"toString"`
+}
+
 type TopLevelClass struct {
 	TopLevel int64 `json:"top_level"`
 }
diff --git a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
index 7c9af54..fe8d196 100644
--- a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
+++ b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
@@ -115,6 +115,7 @@ module QuickType
     , Goto (..)
     , Guard (..)
     , HasOwnProperty (..)
+    , HashCode (..)
     , Imp (..)
     , Implements (..)
     , Implicit (..)
@@ -162,6 +163,7 @@ module QuickType
     , Newtonsoft (..)
     , Nil (..)
     , No (..)
+    , NoSuchMethod (..)
     , Noexcept (..)
     , Nonatomic (..)
     , None (..)
@@ -224,6 +226,7 @@ module QuickType
     , Rethrows (..)
     , Return (..)
     , RightClass (..)
+    , RuntimeType (..)
     , S (..)
     , Sbyte (..)
     , Sealed (..)
@@ -254,6 +257,7 @@ module QuickType
     , Throw (..)
     , Throws (..)
     , ToJSONClass (..)
+    , ToString (..)
     , TopLevel (..)
     , Transient (..)
     , TrueClass (..)
@@ -682,6 +686,7 @@ data Obj2 = Obj2
     , gotoObj2 :: Goto
     , guardObj2 :: Guard
     , hasOwnPropertyObj2 :: HasOwnProperty
+    , hashCodeObj2 :: HashCode
     , impObj2 :: Imp
     , implementsObj2 :: Implements
     , implicitObj2 :: Implicit
@@ -884,6 +889,10 @@ data HasOwnProperty = HasOwnProperty
     { hasOwnPropertyHasOwnProperty :: Int
     } deriving (Show)
 
+data HashCode = HashCode
+    { hashCodeHashCode :: Int
+    } deriving (Show)
+
 data Imp = Imp
     { impImp :: Int
     } deriving (Show)
@@ -992,6 +1001,7 @@ data Obj3 = Obj3
     , newtonsoftObj3 :: Newtonsoft
     , nilObj3 :: Nil
     , noObj3 :: No
+    , noSuchMethodObj3 :: NoSuchMethod
     , noexceptObj3 :: Noexcept
     , nonatomicObj3 :: Nonatomic
     , noneObj3 :: None
@@ -1137,6 +1147,10 @@ data No = No
     { noNo :: Int
     } deriving (Show)
 
+data NoSuchMethod = NoSuchMethod
+    { noSuchMethodNoSuchMethod :: Int
+    } deriving (Show)
+
 data Noexcept = Noexcept
     { noexceptNoexcept :: Int
     } deriving (Show)
@@ -1317,6 +1331,7 @@ data Obj4 = Obj4
     , rethrowsObj4 :: Rethrows
     , returnObj4 :: Return
     , rightObj4 :: RightClass
+    , runtimeTypeObj4 :: RuntimeType
     , sObj4 :: S
     , sbyteObj4 :: Sbyte
     , sealedObj4 :: Sealed
@@ -1347,6 +1362,7 @@ data Obj4 = Obj4
     , throwObj4 :: Throw
     , throwsObj4 :: Throws
     , toJSONObj4 :: ToJSONClass
+    , toStringObj4 :: ToString
     , topLevelObj4 :: TopLevel
     , transientObj4 :: Transient
     , trueObj4 :: TrueClass
@@ -1450,6 +1466,10 @@ data RightClass = RightClass
     { rightRightClass :: Int
     } deriving (Show)
 
+data RuntimeType = RuntimeType
+    { runtimeTypeRuntimeType :: Int
+    } deriving (Show)
+
 data S = S
     { sS :: Int
     } deriving (Show)
@@ -1570,6 +1590,10 @@ data ToJSONClass = ToJSONClass
     { toJSONToJSONClass :: Int
     } deriving (Show)
 
+data ToString = ToString
+    { toStringToString :: Int
+    } deriving (Show)
+
 data TopLevel = TopLevel
     { topLevelTopLevel :: Int
     } deriving (Show)
@@ -2540,7 +2564,7 @@ instance FromJSON ClassClass where
         <$> v .: "class"
 
 instance ToJSON Obj2 where
-    toJSON (Obj2 defObj2 deferObj2 deinitObj2 delObj2 delegateObj2 deleteObj2 dictObj2 dictionaryObj2 didSetObj2 doubleObj2 dummyObj2 dynamicObj2 dynamicCastObj2 elifObj2 encodeQuickTypeObj2 enumObj2 equalityContractObj2 eventObj2 exceptObj2 exceptionObj2 explicitObj2 exportObj2 exposingObj2 extendsObj2 extensionObj2 externObj2 fallthroughObj2 falseObj2 fileprivateObj2 finalObj2 finallyObj2 fixedObj2 floatObj2 forObj2 foreachObj2 friendObj2 fromObj2 fromJSONObj2 funcObj2 functionObj2 getObj2 globalObj2 goObj2 gotoObj2 guardObj2 hasOwnPropertyObj2 impObj2 implementsObj2 implicitObj2 indirectObj2 initObj2 inlineObj2 inoutObj2 instanceofObj2 intObj2 interfaceObj2 internalObj2 obj2DefaultObj2 obj2DoObj2 obj2ElseObj2 obj2FalseObj2 obj2IDObj2 obj2IfObj2 obj2ImportObj2 obj2InObj2 obj2InfixObj2) =
+    toJSON (Obj2 defObj2 deferObj2 deinitObj2 delObj2 delegateObj2 deleteObj2 dictObj2 dictionaryObj2 didSetObj2 doubleObj2 dummyObj2 dynamicObj2 dynamicCastObj2 elifObj2 encodeQuickTypeObj2 enumObj2 equalityContractObj2 eventObj2 exceptObj2 exceptionObj2 explicitObj2 exportObj2 exposingObj2 extendsObj2 extensionObj2 externObj2 fallthroughObj2 falseObj2 fileprivateObj2 finalObj2 finallyObj2 fixedObj2 floatObj2 forObj2 foreachObj2 friendObj2 fromObj2 fromJSONObj2 funcObj2 functionObj2 getObj2 globalObj2 goObj2 gotoObj2 guardObj2 hasOwnPropertyObj2 hashCodeObj2 impObj2 implementsObj2 implicitObj2 indirectObj2 initObj2 inlineObj2 inoutObj2 instanceofObj2 intObj2 interfaceObj2 internalObj2 obj2DefaultObj2 obj2DoObj2 obj2ElseObj2 obj2FalseObj2 obj2IDObj2 obj2IfObj2 obj2ImportObj2 obj2InObj2 obj2InfixObj2) =
         object
         [ "def" .= defObj2
         , "defer" .= deferObj2
@@ -2588,6 +2612,7 @@ instance ToJSON Obj2 where
         , "goto" .= gotoObj2
         , "guard" .= guardObj2
         , "hasOwnProperty" .= hasOwnPropertyObj2
+        , "hashCode" .= hashCodeObj2
         , "IMP" .= impObj2
         , "implements" .= implementsObj2
         , "implicit" .= implicitObj2
@@ -2658,6 +2683,7 @@ instance FromJSON Obj2 where
         <*> v .: "goto"
         <*> v .: "guard"
         <*> v .: "hasOwnProperty"
+        <*> v .: "hashCode"
         <*> v .: "IMP"
         <*> v .: "implements"
         <*> v .: "implicit"
@@ -3129,6 +3155,16 @@ instance FromJSON HasOwnProperty where
     parseJSON (Object v) = HasOwnProperty
         <$> v .: "hasOwnProperty"
 
+instance ToJSON HashCode where
+    toJSON (HashCode hashCodeHashCode) =
+        object
+        [ "hashCode" .= hashCodeHashCode
+        ]
+
+instance FromJSON HashCode where
+    parseJSON (Object v) = HashCode
+        <$> v .: "hashCode"
+
 instance ToJSON Imp where
     toJSON (Imp impImp) =
         object
@@ -3330,7 +3366,7 @@ instance FromJSON Infix where
         <$> v .: "infix"
 
 instance ToJSON Obj3 where
-    toJSON (Obj3 dummyObj3 isObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonConverterObj3 jsonSerializerObj3 jsonTokenObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 lockObj3 longObj3 mapObj3 metadataPropertyHandlingObj3 mutableObj3 mutatingObj3 namespaceObj3 nativeObj3 newObj3 newtonsoftObj3 nilObj3 noObj3 noexceptObj3 nonatomicObj3 noneObj3 nonlocalObj3 nonmutatingObj3 notObj3 notEqObj3 nsStringObj3 nullObj3 nullptrObj3 numberObj3 obj3LetObj3 obj3ModuleObj3 obj3NoneObj3 obj3NullObj3 obj3OfObj3 obj3ProtocolObj3 objectObj3 onewayObj3 openObj3 operatorObj3 optionalObj3 orObj3 orEqObj3 outObj3 overrideObj3 packageObj3 paramsObj3 passObj3 portObj3 postfixObj3 precedenceObj3 prefixObj3 printObj3 printMembersObj3 printfObj3 privateObj3 protectedObj3 protocolObj3) =
+    toJSON (Obj3 dummyObj3 isObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonConverterObj3 jsonSerializerObj3 jsonTokenObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 lockObj3 longObj3 mapObj3 metadataPropertyHandlingObj3 mutableObj3 mutatingObj3 namespaceObj3 nativeObj3 newObj3 newtonsoftObj3 nilObj3 noObj3 noSuchMethodObj3 noexceptObj3 nonatomicObj3 noneObj3 nonlocalObj3 nonmutatingObj3 notObj3 notEqObj3 nsStringObj3 nullObj3 nullptrObj3 numberObj3 obj3LetObj3 obj3ModuleObj3 obj3NoneObj3 obj3NullObj3 obj3OfObj3 obj3ProtocolObj3 objectObj3 onewayObj3 openObj3 operatorObj3 optionalObj3 orObj3 orEqObj3 outObj3 overrideObj3 packageObj3 paramsObj3 passObj3 portObj3 postfixObj3 precedenceObj3 prefixObj3 printObj3 printMembersObj3 printfObj3 privateObj3 protectedObj3 protocolObj3) =
         object
         [ "dummy" .= dummyObj3
         , "is" .= isObj3
@@ -3359,6 +3395,7 @@ instance ToJSON Obj3 where
         , "newtonsoft" .= newtonsoftObj3
         , "nil" .= nilObj3
         , "NO" .= noObj3
+        , "noSuchMethod" .= noSuchMethodObj3
         , "noexcept" .= noexceptObj3
         , "nonatomic" .= nonatomicObj3
         , "None" .= noneObj3
@@ -3429,6 +3466,7 @@ instance FromJSON Obj3 where
         <*> v .: "newtonsoft"
         <*> v .: "nil"
         <*> v .: "NO"
+        <*> v .: "noSuchMethod"
         <*> v .: "noexcept"
         <*> v .: "nonatomic"
         <*> v .: "None"
@@ -3729,6 +3767,16 @@ instance FromJSON No where
     parseJSON (Object v) = No
         <$> v .: "NO"
 
+instance ToJSON NoSuchMethod where
+    toJSON (NoSuchMethod noSuchMethodNoSuchMethod) =
+        object
+        [ "noSuchMethod" .= noSuchMethodNoSuchMethod
+        ]
+
+instance FromJSON NoSuchMethod where
+    parseJSON (Object v) = NoSuchMethod
+        <$> v .: "noSuchMethod"
+
 instance ToJSON Noexcept where
     toJSON (Noexcept noexceptNoexcept) =
         object
@@ -4120,7 +4168,7 @@ instance FromJSON Protocol where
         <$> v .: "Protocol"
 
 instance ToJSON Obj4 where
-    toJSON (Obj4 dummyObj4 obj4SelfObj4 obj4ThenObj4 obj4TrueObj4 obj4TypeObj4 publicObj4 purpleTypeObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 sObj4 sbyteObj4 sealedObj4 selObj4 selectObj4 selfObj4 serializeObj4 setObj4 shortObj4 signedObj4 sizeofObj4 stackallocObj4 staticObj4 staticAssertObj4 staticCastObj4 strictfpObj4 stringObj4 structObj4 subscriptObj4 superObj4 switchObj4 symbolObj4 synchronizedObj4 systemObj4 templateObj4 thisObj4 threadLocalObj4 throwObj4 throwsObj4 toJSONObj4 topLevelObj4 transientObj4 trueObj4 tryObj4 typealiasObj4 typedefObj4 typeidObj4 typenameObj4 typeofObj4 uintObj4 ulongObj4 uncheckedObj4 undefinedObj4) =
+    toJSON (Obj4 dummyObj4 obj4SelfObj4 obj4ThenObj4 obj4TrueObj4 obj4TypeObj4 publicObj4 purpleTypeObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 runtimeTypeObj4 sObj4 sbyteObj4 sealedObj4 selObj4 selectObj4 selfObj4 serializeObj4 setObj4 shortObj4 signedObj4 sizeofObj4 stackallocObj4 staticObj4 staticAssertObj4 staticCastObj4 strictfpObj4 stringObj4 structObj4 subscriptObj4 superObj4 switchObj4 symbolObj4 synchronizedObj4 systemObj4 templateObj4 thisObj4 threadLocalObj4 throwObj4 throwsObj4 toJSONObj4 toStringObj4 topLevelObj4 transientObj4 trueObj4 tryObj4 typealiasObj4 typedefObj4 typeidObj4 typenameObj4 typeofObj4 uintObj4 ulongObj4 uncheckedObj4 undefinedObj4) =
         object
         [ "dummy" .= dummyObj4
         , "self" .= obj4SelfObj4
@@ -4145,6 +4193,7 @@ instance ToJSON Obj4 where
         , "rethrows" .= rethrowsObj4
         , "return" .= returnObj4
         , "right" .= rightObj4
+        , "runtimeType" .= runtimeTypeObj4
         , "s" .= sObj4
         , "sbyte" .= sbyteObj4
         , "sealed" .= sealedObj4
@@ -4175,6 +4224,7 @@ instance ToJSON Obj4 where
         , "throw" .= throwObj4
         , "throws" .= throwsObj4
         , "to_json" .= toJSONObj4
+        , "toString" .= toStringObj4
         , "top_level" .= topLevelObj4
         , "transient" .= transientObj4
         , "True" .= trueObj4
@@ -4215,6 +4265,7 @@ instance FromJSON Obj4 where
         <*> v .: "rethrows"
         <*> v .: "return"
         <*> v .: "right"
+        <*> v .: "runtimeType"
         <*> v .: "s"
         <*> v .: "sbyte"
         <*> v .: "sealed"
@@ -4245,6 +4296,7 @@ instance FromJSON Obj4 where
         <*> v .: "throw"
         <*> v .: "throws"
         <*> v .: "to_json"
+        <*> v .: "toString"
         <*> v .: "top_level"
         <*> v .: "transient"
         <*> v .: "True"
@@ -4479,6 +4531,16 @@ instance FromJSON RightClass where
     parseJSON (Object v) = RightClass
         <$> v .: "right"
 
+instance ToJSON RuntimeType where
+    toJSON (RuntimeType runtimeTypeRuntimeType) =
+        object
+        [ "runtimeType" .= runtimeTypeRuntimeType
+        ]
+
+instance FromJSON RuntimeType where
+    parseJSON (Object v) = RuntimeType
+        <$> v .: "runtimeType"
+
 instance ToJSON S where
     toJSON (S sS) =
         object
@@ -4779,6 +4841,16 @@ instance FromJSON ToJSONClass where
     parseJSON (Object v) = ToJSONClass
         <$> v .: "to_json"
 
+instance ToJSON ToString where
+    toJSON (ToString toStringToString) =
+        object
+        [ "toString" .= toStringToString
+        ]
+
+instance FromJSON ToString where
+    parseJSON (Object v) = ToString
+        <$> v .: "toString"
+
 instance ToJSON TopLevel where
     toJSON (TopLevel topLevelTopLevel) =
         object
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
new file mode 100644
index 0000000..3902c02
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class HashCode {
+    private long hashCode;
+
+    @JsonProperty("hashCode")
+    public long getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(long value) { this.hashCode = value; }
+}
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
new file mode 100644
index 0000000..c5521d4
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class NoSuchMethod {
+    private long noSuchMethod;
+
+    @JsonProperty("noSuchMethod")
+    public long getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(long value) { this.noSuchMethod = value; }
+}
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
index ee9d1d0..312ffd2 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
@@ -40,6 +40,7 @@ public class Obj2 {
     private Go go;
     private Guard guard;
     private HasOwnProperty hasOwnProperty;
+    private HashCode hashCode;
     private ID id;
     private Imp imp;
     private Implicit implicit;
@@ -255,6 +256,11 @@ public class Obj2 {
     @JsonProperty("hasOwnProperty")
     public void setHasOwnProperty(HasOwnProperty value) { this.hasOwnProperty = value; }
 
+    @JsonProperty("hashCode")
+    public HashCode getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(HashCode value) { this.hashCode = value; }
+
     @JsonProperty("id")
     public ID getID() { return id; }
     @JsonProperty("id")
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index 1075406..1212e63 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -29,6 +29,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
+    private NoSuchMethod noSuchMethod;
     private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
@@ -200,6 +201,11 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
+    @JsonProperty("noSuchMethod")
+    public NoSuchMethod getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
+
     @JsonProperty("noexcept")
     public Noexcept getNoexcept() { return noexcept; }
     @JsonProperty("noexcept")
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index d8860f6..3382aa8 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private RuntimeType runtimeType;
     private S s;
     private Sbyte sbyte;
     private Sealed sealed;
@@ -58,6 +59,7 @@ public class Obj4 {
     private Then then;
     private ThreadLocal threadLocal;
     private ToJSON toJSON;
+    private ToString toString;
     private TopLevelClass topLevel;
     private Type type;
     private Typealias typealias;
@@ -235,6 +237,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("runtimeType")
+    public RuntimeType getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(RuntimeType value) { this.runtimeType = value; }
+
     @JsonProperty("s")
     public S getS() { return s; }
     @JsonProperty("s")
@@ -345,6 +352,11 @@ public class Obj4 {
     @JsonProperty("to_json")
     public void setToJSON(ToJSON value) { this.toJSON = value; }
 
+    @JsonProperty("toString")
+    public ToString getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(ToString value) { this.toString = value; }
+
     @JsonProperty("top_level")
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
new file mode 100644
index 0000000..10f379d
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class RuntimeType {
+    private long runtimeType;
+
+    @JsonProperty("runtimeType")
+    public long getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(long value) { this.runtimeType = value; }
+}
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
new file mode 100644
index 0000000..1a9c4c4
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToString {
+    private long toString;
+
+    @JsonProperty("toString")
+    public long getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(long value) { this.toString = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
new file mode 100644
index 0000000..3902c02
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class HashCode {
+    private long hashCode;
+
+    @JsonProperty("hashCode")
+    public long getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(long value) { this.hashCode = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
new file mode 100644
index 0000000..c5521d4
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class NoSuchMethod {
+    private long noSuchMethod;
+
+    @JsonProperty("noSuchMethod")
+    public long getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(long value) { this.noSuchMethod = value; }
+}
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
index ee9d1d0..312ffd2 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
@@ -40,6 +40,7 @@ public class Obj2 {
     private Go go;
     private Guard guard;
     private HasOwnProperty hasOwnProperty;
+    private HashCode hashCode;
     private ID id;
     private Imp imp;
     private Implicit implicit;
@@ -255,6 +256,11 @@ public class Obj2 {
     @JsonProperty("hasOwnProperty")
     public void setHasOwnProperty(HasOwnProperty value) { this.hasOwnProperty = value; }
 
+    @JsonProperty("hashCode")
+    public HashCode getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(HashCode value) { this.hashCode = value; }
+
     @JsonProperty("id")
     public ID getID() { return id; }
     @JsonProperty("id")
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index 1075406..1212e63 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -29,6 +29,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
+    private NoSuchMethod noSuchMethod;
     private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
@@ -200,6 +201,11 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
+    @JsonProperty("noSuchMethod")
+    public NoSuchMethod getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
+
     @JsonProperty("noexcept")
     public Noexcept getNoexcept() { return noexcept; }
     @JsonProperty("noexcept")
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index d8860f6..3382aa8 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private RuntimeType runtimeType;
     private S s;
     private Sbyte sbyte;
     private Sealed sealed;
@@ -58,6 +59,7 @@ public class Obj4 {
     private Then then;
     private ThreadLocal threadLocal;
     private ToJSON toJSON;
+    private ToString toString;
     private TopLevelClass topLevel;
     private Type type;
     private Typealias typealias;
@@ -235,6 +237,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("runtimeType")
+    public RuntimeType getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(RuntimeType value) { this.runtimeType = value; }
+
     @JsonProperty("s")
     public S getS() { return s; }
     @JsonProperty("s")
@@ -345,6 +352,11 @@ public class Obj4 {
     @JsonProperty("to_json")
     public void setToJSON(ToJSON value) { this.toJSON = value; }
 
+    @JsonProperty("toString")
+    public ToString getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(ToString value) { this.toString = value; }
+
     @JsonProperty("top_level")
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
new file mode 100644
index 0000000..10f379d
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class RuntimeType {
+    private long runtimeType;
+
+    @JsonProperty("runtimeType")
+    public long getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(long value) { this.runtimeType = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
new file mode 100644
index 0000000..1a9c4c4
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToString {
+    private long toString;
+
+    @JsonProperty("toString")
+    public long getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(long value) { this.toString = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
new file mode 100644
index 0000000..3902c02
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/HashCode.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class HashCode {
+    private long hashCode;
+
+    @JsonProperty("hashCode")
+    public long getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(long value) { this.hashCode = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
new file mode 100644
index 0000000..c5521d4
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/NoSuchMethod.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class NoSuchMethod {
+    private long noSuchMethod;
+
+    @JsonProperty("noSuchMethod")
+    public long getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(long value) { this.noSuchMethod = value; }
+}
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
index ee9d1d0..312ffd2 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj2.java
@@ -40,6 +40,7 @@ public class Obj2 {
     private Go go;
     private Guard guard;
     private HasOwnProperty hasOwnProperty;
+    private HashCode hashCode;
     private ID id;
     private Imp imp;
     private Implicit implicit;
@@ -255,6 +256,11 @@ public class Obj2 {
     @JsonProperty("hasOwnProperty")
     public void setHasOwnProperty(HasOwnProperty value) { this.hasOwnProperty = value; }
 
+    @JsonProperty("hashCode")
+    public HashCode getHashCode() { return hashCode; }
+    @JsonProperty("hashCode")
+    public void setHashCode(HashCode value) { this.hashCode = value; }
+
     @JsonProperty("id")
     public ID getID() { return id; }
     @JsonProperty("id")
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
index 1075406..1212e63 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj3.java
@@ -29,6 +29,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
+    private NoSuchMethod noSuchMethod;
     private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
@@ -200,6 +201,11 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
+    @JsonProperty("noSuchMethod")
+    public NoSuchMethod getNoSuchMethod() { return noSuchMethod; }
+    @JsonProperty("noSuchMethod")
+    public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
+
     @JsonProperty("noexcept")
     public Noexcept getNoexcept() { return noexcept; }
     @JsonProperty("noexcept")
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index d8860f6..3382aa8 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private RuntimeType runtimeType;
     private S s;
     private Sbyte sbyte;
     private Sealed sealed;
@@ -58,6 +59,7 @@ public class Obj4 {
     private Then then;
     private ThreadLocal threadLocal;
     private ToJSON toJSON;
+    private ToString toString;
     private TopLevelClass topLevel;
     private Type type;
     private Typealias typealias;
@@ -235,6 +237,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("runtimeType")
+    public RuntimeType getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(RuntimeType value) { this.runtimeType = value; }
+
     @JsonProperty("s")
     public S getS() { return s; }
     @JsonProperty("s")
@@ -345,6 +352,11 @@ public class Obj4 {
     @JsonProperty("to_json")
     public void setToJSON(ToJSON value) { this.toJSON = value; }
 
+    @JsonProperty("toString")
+    public ToString getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(ToString value) { this.toString = value; }
+
     @JsonProperty("top_level")
     public TopLevelClass getTopLevel() { return topLevel; }
     @JsonProperty("top_level")
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
new file mode 100644
index 0000000..10f379d
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/RuntimeType.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class RuntimeType {
+    private long runtimeType;
+
+    @JsonProperty("runtimeType")
+    public long getRuntimeType() { return runtimeType; }
+    @JsonProperty("runtimeType")
+    public void setRuntimeType(long value) { this.runtimeType = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
new file mode 100644
index 0000000..1a9c4c4
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToString.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToString {
+    private long toString;
+
+    @JsonProperty("toString")
+    public long getToString() { return toString; }
+    @JsonProperty("toString")
+    public void setToString(long value) { this.toString = value; }
+}
diff --git a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
index 1f5ef6b..6750166 100644
--- a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -515,6 +515,7 @@ const typeMap = {
         { json: "goto", js: "goto", typ: r("Goto") },
         { json: "guard", js: "guard", typ: r("Guard") },
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: r("HasOwnProperty") },
+        { json: "hashCode", js: "hashCode", typ: r("HashCode") },
         { json: "id", js: "id", typ: r("ID") },
         { json: "if", js: "if", typ: r("If") },
         { json: "implements", js: "implements", typ: r("Implements") },
@@ -681,6 +682,9 @@ const typeMap = {
     "HasOwnProperty": o([
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: i(0) },
     ], false),
+    "HashCode": o([
+        { json: "hashCode", js: "hashCode", typ: i(0) },
+    ], false),
     "ID": o([
         { json: "id", js: "id", typ: i(0) },
     ], false),
@@ -760,6 +764,7 @@ const typeMap = {
         { json: "new", js: "new", typ: r("New") },
         { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
         { json: "nil", js: "nil", typ: r("Nil") },
+        { json: "noSuchMethod", js: "noSuchMethod", typ: r("NoSuchMethod") },
         { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
         { json: "nonatomic", js: "nonatomic", typ: r("Nonatomic") },
         { json: "none", js: "none", typ: r("NoneClass") },
@@ -890,6 +895,9 @@ const typeMap = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
+    "NoSuchMethod": o([
+        { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
+    ], false),
     "Noexcept": o([
         { json: "noexcept", js: "noexcept", typ: i(0) },
     ], false),
@@ -1012,6 +1020,7 @@ const typeMap = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "runtimeType", js: "runtimeType", typ: r("RuntimeType") },
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
@@ -1041,6 +1050,7 @@ const typeMap = {
         { json: "thread_local", js: "thread_local", typ: r("ThreadLocal") },
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
+        { json: "toString", js: "toString", typ: r("ToString") },
         { json: "to_json", js: "to_json", typ: r("ToJSON") },
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
@@ -1120,6 +1130,9 @@ const typeMap = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "RuntimeType": o([
+        { json: "runtimeType", js: "runtimeType", typ: i(0) },
+    ], false),
     "S": o([
         { json: "s", js: "s", typ: i(0) },
     ], false),
@@ -1207,6 +1220,9 @@ const typeMap = {
     "Throws": o([
         { json: "throws", js: "throws", typ: i(0) },
     ], false),
+    "ToString": o([
+        { json: "toString", js: "toString", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
diff --git a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
index e00479f..3a8d0b1 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
@@ -131,6 +131,7 @@ let _Go;
 let _Goto;
 let _Guard;
 let _HasOwnProperty;
+let _HashCode;
 let _ID;
 let _If;
 let _Implements;
@@ -179,6 +180,7 @@ let _Native;
 let _New;
 let _Newtonsoft;
 let _Nil;
+let _NoSuchMethod;
 let _Noexcept;
 let _Nonatomic;
 let _NoneClass;
@@ -234,6 +236,7 @@ let _Retain;
 let _Rethrows;
 let _Return;
 let _Right;
+let _RuntimeType;
 let _S;
 let _Sbyte;
 let _Sealed;
@@ -263,6 +266,7 @@ let _This;
 let _ThreadLocal;
 let _Throw;
 let _Throws;
+let _ToString;
 let _ToJSON;
 let _TopLevelClass;
 let _Transient;
@@ -712,6 +716,9 @@ _Guard = PropTypes.shape({
 _HasOwnProperty = PropTypes.shape({
     "hasOwnProperty": PropTypes.oneOfType([Integer]).isRequired,
 });
+_HashCode = PropTypes.shape({
+    "hashCode": PropTypes.oneOfType([Integer]).isRequired,
+});
 _ID = PropTypes.shape({
     "id": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -809,6 +816,7 @@ _Obj2 = PropTypes.shape({
     "goto": _Goto,
     "guard": _Guard,
     "hasOwnProperty": _HasOwnProperty,
+    "hashCode": _HashCode,
     "id": _ID,
     "if": _If,
     "implements": _Implements,
@@ -921,6 +929,9 @@ _Newtonsoft = PropTypes.shape({
 _Nil = PropTypes.shape({
     "nil": PropTypes.oneOfType([Integer]).isRequired,
 });
+_NoSuchMethod = PropTypes.shape({
+    "noSuchMethod": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Noexcept = PropTypes.shape({
     "noexcept": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1054,6 +1065,7 @@ _Obj3 = PropTypes.shape({
     "new": _New,
     "newtonsoft": _Newtonsoft,
     "nil": _Nil,
+    "noSuchMethod": _NoSuchMethod,
     "noexcept": _Noexcept,
     "nonatomic": _Nonatomic,
     "none": _NoneClass,
@@ -1151,6 +1163,9 @@ _Return = PropTypes.shape({
 _Right = PropTypes.shape({
     "right": PropTypes.oneOfType([Integer]).isRequired,
 });
+_RuntimeType = PropTypes.shape({
+    "runtimeType": PropTypes.oneOfType([Integer]).isRequired,
+});
 _S = PropTypes.shape({
     "s": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1238,6 +1253,9 @@ _Throw = PropTypes.shape({
 _Throws = PropTypes.shape({
     "throws": PropTypes.oneOfType([Integer]).isRequired,
 });
+_ToString = PropTypes.shape({
+    "toString": PropTypes.oneOfType([Integer]).isRequired,
+});
 _ToJSON = PropTypes.shape({
     "to_json": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1306,6 +1324,7 @@ _Obj4 = PropTypes.shape({
     "rethrows": _Rethrows,
     "return": _Return,
     "right": _Right,
+    "runtimeType": _RuntimeType,
     "s": _S,
     "sbyte": _Sbyte,
     "sealed": _Sealed,
@@ -1335,6 +1354,7 @@ _Obj4 = PropTypes.shape({
     "thread_local": _ThreadLocal,
     "throw": _Throw,
     "throws": _Throws,
+    "toString": _ToString,
     "to_json": _ToJSON,
     "top_level": _TopLevelClass,
     "transient": _Transient,
diff --git a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index 250ed16..7a052fa 100644
--- a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -489,6 +489,7 @@ data class Obj2 (
     val goto: Goto,
     val guard: Guard,
     val hasOwnProperty: HasOwnProperty,
+    val hashCode: HashCode,
     val id: ID,
 
     @Json(name = "IMP")
@@ -710,6 +711,10 @@ data class HasOwnProperty (
     val hasOwnProperty: Long
 )
 
+data class HashCode (
+    val hashCode: Long
+)
+
 data class ID (
     val id: Long
 )
@@ -847,6 +852,7 @@ data class Obj3 (
     @Json(name = "NO")
     val no: No,
 
+    val noSuchMethod: NoSuchMethod,
     val noexcept: Noexcept,
     val nonatomic: Nonatomic,
 
@@ -1029,6 +1035,10 @@ data class No (
     val no: Long
 )
 
+data class NoSuchMethod (
+    val noSuchMethod: Long
+)
+
 data class Noexcept (
     val noexcept: Long
 )
@@ -1247,6 +1257,7 @@ data class Obj4 (
     val retain: Retain,
     val rethrows: Rethrows,
     val right: Right,
+    val runtimeType: RuntimeType,
     val s: S,
     val sbyte: Sbyte,
     val sealed: Sealed,
@@ -1292,6 +1303,8 @@ data class Obj4 (
     @Json(name = "to_json")
     val toJSON: ToJSON,
 
+    val toString: ToString,
+
     @Json(name = "top_level")
     val topLevel: TopLevelClass,
 
@@ -1427,6 +1440,10 @@ data class Right (
     val right: Long
 )
 
+data class RuntimeType (
+    val runtimeType: Long
+)
+
 data class S (
     val s: Long
 )
@@ -1545,6 +1562,10 @@ data class ToJSON (
     val toJSON: Long
 )
 
+data class ToString (
+    val toString: Long
+)
+
 data class TopLevelClass (
     @Json(name = "top_level")
     val topLevel: Long
diff --git a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index d41f7a7..5849a2d 100644
--- a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -706,6 +706,9 @@ data class Obj2 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val hasOwnProperty: HasOwnProperty,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val hashCode: HashCode,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val id: ID,
 
@@ -990,6 +993,11 @@ data class HasOwnProperty (
     val hasOwnProperty: Long
 )
 
+data class HashCode (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val hashCode: Long
+)
+
 data class ID (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val id: Long
@@ -1180,6 +1188,9 @@ data class Obj3 (
     @get:JsonProperty("NO", required=true)@field:JsonProperty("NO", required=true)
     val no: No,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val noSuchMethod: NoSuchMethod,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val noexcept: Noexcept,
 
@@ -1430,6 +1441,11 @@ data class No (
     val no: Long
 )
 
+data class NoSuchMethod (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val noSuchMethod: Long
+)
+
 data class Noexcept (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val noexcept: Long
@@ -1705,6 +1721,9 @@ data class Obj4 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val right: Right,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val runtimeType: RuntimeType,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val s: S,
 
@@ -1789,6 +1808,9 @@ data class Obj4 (
     @get:JsonProperty("to_json", required=true)@field:JsonProperty("to_json", required=true)
     val toJSON: ToJSON,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val toString: ToString,
+
     @get:JsonProperty("top_level", required=true)@field:JsonProperty("top_level", required=true)
     val topLevel: TopLevelClass,
 
@@ -1955,6 +1977,11 @@ data class Right (
     val right: Long
 )
 
+data class RuntimeType (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val runtimeType: Long
+)
+
 data class S (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val s: Long
@@ -2095,6 +2122,11 @@ data class ToJSON (
     val toJSON: Long
 )
 
+data class ToString (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val toString: Long
+)
+
 data class TopLevelClass (
     @get:JsonProperty("top_level", required=true)@field:JsonProperty("top_level", required=true)
     val topLevel: Long
diff --git a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index c0ac134..7b6e799 100644
--- a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -553,6 +553,7 @@ data class Obj2 (
     val goto: Goto,
     val guard: Guard,
     val hasOwnProperty: HasOwnProperty,
+    val hashCode: HashCode,
     val id: ID,
 
     @SerialName("IMP")
@@ -818,6 +819,11 @@ data class HasOwnProperty (
     val hasOwnProperty: Long
 )
 
+@Serializable
+data class HashCode (
+    val hashCode: Long
+)
+
 @Serializable
 data class ID (
     val id: Long
@@ -977,6 +983,7 @@ data class Obj3 (
     @SerialName("NO")
     val no: No,
 
+    val noSuchMethod: NoSuchMethod,
     val noexcept: Noexcept,
     val nonatomic: Nonatomic,
 
@@ -1186,6 +1193,11 @@ data class No (
     val no: Long
 )
 
+@Serializable
+data class NoSuchMethod (
+    val noSuchMethod: Long
+)
+
 @Serializable
 data class Noexcept (
     val noexcept: Long
@@ -1443,6 +1455,7 @@ data class Obj4 (
     val retain: Retain,
     val rethrows: Rethrows,
     val right: Right,
+    val runtimeType: RuntimeType,
     val s: S,
     val sbyte: Sbyte,
     val sealed: Sealed,
@@ -1488,6 +1501,8 @@ data class Obj4 (
     @SerialName("to_json")
     val toJSON: ToJSON,
 
+    val toString: ToString,
+
     @SerialName("top_level")
     val topLevel: TopLevelClass,
 
@@ -1650,6 +1665,11 @@ data class Right (
     val right: Long
 )
 
+@Serializable
+data class RuntimeType (
+    val runtimeType: Long
+)
+
 @Serializable
 data class S (
     val s: Long
@@ -1796,6 +1816,11 @@ data class ToJSON (
     val toJSON: Long
 )
 
+@Serializable
+data class ToString (
+    val toString: Long
+)
+
 @Serializable
 data class TopLevelClass (
     @SerialName("top_level")
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
index 9c4b79d..bda9459 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
@@ -137,6 +137,7 @@
 @class QTInline;
 @class QTInt;
 @class QTFalseClass;
+@class QTHashCode;
 @class QTInit;
 @class QTObj3;
 @class QTIs;
@@ -164,6 +165,7 @@
 @class QTNative;
 @class QTNewtonsoft;
 @class QTNo;
+@class QTNoSuchMethod;
 @class QTNoexcept;
 @class QTNone;
 @class QTNonlocal;
@@ -233,6 +235,7 @@
 @class QTRequires;
 @class QTRethrows;
 @class QTRight;
+@class QTRuntimeType;
 @class QTS;
 @class QTSbyte;
 @class QTSealed;
@@ -259,6 +262,7 @@
 @class QTThrow;
 @class QTThrows;
 @class QTToJSON;
+@class QTToString;
 @class QTTopLevelClass;
 @class QTTransient;
 @class QTTry;
@@ -712,6 +716,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTInline *obj2Inline;
 @property (nonatomic, strong) QTInt *obj2Int;
 @property (nonatomic, strong) QTFalseClass *theFalse;
+@property (nonatomic, strong) QTHashCode *theHashCode;
 @property (nonatomic, strong) QTInit *theInit;
 @end
 
@@ -971,6 +976,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger falseFalse;
 @end
 
+@interface QTHashCode : NSObject
+@property (nonatomic, assign) NSInteger theHashCode;
+@end
+
 @interface QTInit : NSObject
 @property (nonatomic, assign) NSInteger theInit;
 @end
@@ -1002,6 +1011,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTNative *native;
 @property (nonatomic, strong) QTNewtonsoft *newtonsoft;
 @property (nonatomic, strong) QTNo *no;
+@property (nonatomic, strong) QTNoSuchMethod *noSuchMethod;
 @property (nonatomic, strong) QTNoexcept *noexcept;
 @property (nonatomic, strong) QTNone *none;
 @property (nonatomic, strong) QTNonlocal *nonlocal;
@@ -1144,6 +1154,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger no;
 @end
 
+@interface QTNoSuchMethod : NSObject
+@property (nonatomic, assign) NSInteger noSuchMethod;
+@end
+
 @interface QTNoexcept : NSObject
 @property (nonatomic, assign) NSInteger noexcept;
 @end
@@ -1334,6 +1348,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTRequires *requires;
 @property (nonatomic, strong) QTRethrows *rethrows;
 @property (nonatomic, strong) QTRight *right;
+@property (nonatomic, strong) QTRuntimeType *runtimeType;
 @property (nonatomic, strong) QTS *s;
 @property (nonatomic, strong) QTSbyte *sbyte;
 @property (nonatomic, strong) QTSealed *sealed;
@@ -1360,6 +1375,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTThrow *throw;
 @property (nonatomic, strong) QTThrows *throws;
 @property (nonatomic, strong) QTToJSON *toJSON;
+@property (nonatomic, strong) QTToString *toString;
 @property (nonatomic, strong) QTTopLevelClass *topLevel;
 @property (nonatomic, strong) QTTransient *transient;
 @property (nonatomic, strong) QTTry *try;
@@ -1485,6 +1501,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger right;
 @end
 
+@interface QTRuntimeType : NSObject
+@property (nonatomic, assign) NSInteger runtimeType;
+@end
+
 @interface QTS : NSObject
 @property (nonatomic, assign) NSInteger s;
 @end
@@ -1589,6 +1609,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger toJSON;
 @end
 
+@interface QTToString : NSObject
+@property (nonatomic, assign) NSInteger toString;
+@end
+
 @interface QTTopLevelClass : NSObject
 @property (nonatomic, assign) NSInteger topLevel;
 @end
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
index 4e4d813..84f5f02 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
@@ -668,6 +668,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTHashCode (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTInit (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -803,6 +808,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTNoSuchMethod (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTNoexcept (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1148,6 +1158,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTRuntimeType (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTS (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1278,6 +1293,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTToString (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTTopLevelClass (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -5026,6 +5046,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"inline": @"obj2Inline",
         @"int": @"obj2Int",
         @"false": @"theFalse",
+        @"hashCode": @"theHashCode",
         @"init": @"theInit",
     };
 }
@@ -5104,6 +5125,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"inline"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"int"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"false"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"hashCode"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"init"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
         _def = [QTDef fromJSONDictionary:(id)_def];
@@ -5234,6 +5256,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_obj2Int && dict[@"int"] && ![dict[@"int"] isKindOfClass:NSNull.class]) return nil;
         _theFalse = [QTFalseClass fromJSONDictionary:(id)_theFalse];
         if (!_theFalse && dict[@"false"] && ![dict[@"false"] isKindOfClass:NSNull.class]) return nil;
+        _theHashCode = [QTHashCode fromJSONDictionary:(id)_theHashCode];
+        if (!_theHashCode && dict[@"hashCode"] && ![dict[@"hashCode"] isKindOfClass:NSNull.class]) return nil;
         _theInit = [QTInit fromJSONDictionary:(id)_theInit];
         if (!_theInit && dict[@"init"] && ![dict[@"init"] isKindOfClass:NSNull.class]) return nil;
     }
@@ -5329,6 +5353,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"inline": [_obj2Inline JSONDictionary],
         @"int": [_obj2Int JSONDictionary],
         @"false": [_theFalse JSONDictionary],
+        @"hashCode": [_theHashCode JSONDictionary],
         @"init": [_theInit JSONDictionary],
     }];
 
@@ -8214,6 +8239,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTHashCode
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"hashCode": @"theHashCode",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTHashCode alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"hashCode"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"hashCode"] doubleValue] != [dict[@"hashCode"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTHashCode.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTHashCode.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTHashCode.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTHashCode.properties) {
+        id propertyName = QTHashCode.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTInit
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -8297,6 +8374,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"native": @"native",
         @"newtonsoft": @"newtonsoft",
         @"NO": @"no",
+        @"noSuchMethod": @"noSuchMethod",
         @"noexcept": @"noexcept",
         @"None": @"none",
         @"nonlocal": @"nonlocal",
@@ -8375,6 +8453,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"native"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"newtonsoft"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"NO"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"noSuchMethod"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"noexcept"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"None"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"nonlocal"] isKindOfClass:NSDictionary.class]) return nil;
@@ -8466,6 +8545,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_newtonsoft && dict[@"newtonsoft"] && ![dict[@"newtonsoft"] isKindOfClass:NSNull.class]) return nil;
         _no = [QTNo fromJSONDictionary:(id)_no];
         if (!_no && dict[@"NO"] && ![dict[@"NO"] isKindOfClass:NSNull.class]) return nil;
+        _noSuchMethod = [QTNoSuchMethod fromJSONDictionary:(id)_noSuchMethod];
+        if (!_noSuchMethod && dict[@"noSuchMethod"] && ![dict[@"noSuchMethod"] isKindOfClass:NSNull.class]) return nil;
         _noexcept = [QTNoexcept fromJSONDictionary:(id)_noexcept];
         if (!_noexcept && dict[@"noexcept"] && ![dict[@"noexcept"] isKindOfClass:NSNull.class]) return nil;
         _none = [QTNone fromJSONDictionary:(id)_none];
@@ -8600,6 +8681,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"native": [_native JSONDictionary],
         @"newtonsoft": [_newtonsoft JSONDictionary],
         @"NO": [_no JSONDictionary],
+        @"noSuchMethod": [_noSuchMethod JSONDictionary],
         @"noexcept": [_noexcept JSONDictionary],
         @"None": [_none JSONDictionary],
         @"nonlocal": [_nonlocal JSONDictionary],
@@ -9756,6 +9838,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTNoSuchMethod
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"noSuchMethod": @"noSuchMethod",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTNoSuchMethod alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"noSuchMethod"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"noSuchMethod"] doubleValue] != [dict[@"noSuchMethod"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTNoSuchMethod.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTNoSuchMethod.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTNoSuchMethod.properties.allValues];
+}
+@end
+
 @implementation QTNoexcept
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -11570,6 +11694,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"requires": @"requires",
         @"rethrows": @"rethrows",
         @"right": @"right",
+        @"runtimeType": @"runtimeType",
         @"s": @"s",
         @"sbyte": @"sbyte",
         @"sealed": @"sealed",
@@ -11596,6 +11721,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"throw": @"throw",
         @"throws": @"throws",
         @"to_json": @"toJSON",
+        @"toString": @"toString",
         @"top_level": @"topLevel",
         @"transient": @"transient",
         @"try": @"try",
@@ -11648,6 +11774,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"requires"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"rethrows"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"right"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"runtimeType"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"s"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"sbyte"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"sealed"] isKindOfClass:NSDictionary.class]) return nil;
@@ -11674,6 +11801,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"throw"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"throws"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"to_json"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"toString"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"top_level"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"transient"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"try"] isKindOfClass:NSDictionary.class]) return nil;
@@ -11742,6 +11870,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_rethrows && dict[@"rethrows"] && ![dict[@"rethrows"] isKindOfClass:NSNull.class]) return nil;
         _right = [QTRight fromJSONDictionary:(id)_right];
         if (!_right && dict[@"right"] && ![dict[@"right"] isKindOfClass:NSNull.class]) return nil;
+        _runtimeType = [QTRuntimeType fromJSONDictionary:(id)_runtimeType];
+        if (!_runtimeType && dict[@"runtimeType"] && ![dict[@"runtimeType"] isKindOfClass:NSNull.class]) return nil;
         _s = [QTS fromJSONDictionary:(id)_s];
         if (!_s && dict[@"s"] && ![dict[@"s"] isKindOfClass:NSNull.class]) return nil;
         _sbyte = [QTSbyte fromJSONDictionary:(id)_sbyte];
@@ -11794,6 +11924,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_throws && dict[@"throws"] && ![dict[@"throws"] isKindOfClass:NSNull.class]) return nil;
         _toJSON = [QTToJSON fromJSONDictionary:(id)_toJSON];
         if (!_toJSON && dict[@"to_json"] && ![dict[@"to_json"] isKindOfClass:NSNull.class]) return nil;
+        _toString = [QTToString fromJSONDictionary:(id)_toString];
+        if (!_toString && dict[@"toString"] && ![dict[@"toString"] isKindOfClass:NSNull.class]) return nil;
         _topLevel = [QTTopLevelClass fromJSONDictionary:(id)_topLevel];
         if (!_topLevel && dict[@"top_level"] && ![dict[@"top_level"] isKindOfClass:NSNull.class]) return nil;
         _transient = [QTTransient fromJSONDictionary:(id)_transient];
@@ -11873,6 +12005,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"requires": [_requires JSONDictionary],
         @"rethrows": [_rethrows JSONDictionary],
         @"right": [_right JSONDictionary],
+        @"runtimeType": [_runtimeType JSONDictionary],
         @"s": [_s JSONDictionary],
         @"sbyte": [_sbyte JSONDictionary],
         @"sealed": [_sealed JSONDictionary],
@@ -11899,6 +12032,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"throw": [_throw JSONDictionary],
         @"throws": [_throws JSONDictionary],
         @"to_json": [_toJSON JSONDictionary],
+        @"toString": [_toString JSONDictionary],
         @"top_level": [_topLevel JSONDictionary],
         @"transient": [_transient JSONDictionary],
         @"try": [_try JSONDictionary],
@@ -13232,6 +13366,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTRuntimeType
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"runtimeType": @"runtimeType",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTRuntimeType alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"runtimeType"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"runtimeType"] doubleValue] != [dict[@"runtimeType"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTRuntimeType.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTRuntimeType.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTRuntimeType.properties.allValues];
+}
+@end
+
 @implementation QTS
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -14394,6 +14570,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTToString
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"toString": @"toString",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTToString alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"toString"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"toString"] doubleValue] != [dict[@"toString"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTToString.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTToString.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTToString.properties.allValues];
+}
+@end
+
 @implementation QTTopLevelClass
 + (NSDictionary<NSString *, NSString *> *)properties
 {
diff --git a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
index 2d52bc4..e1ca8b8 100644
--- a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
@@ -10880,6 +10880,7 @@ class Obj2 {
     private GotoClass $goto; // json:goto Required
     private Guard $guard; // json:guard Required
     private HasOwnProperty $hasOwnProperty; // json:hasOwnProperty Required
+    private HashCode $hashCode; // json:hashCode Required
     private ID $id; // json:id Required
     private IfClass $if; // json:if Required
     private Imp $imp; // json:IMP Required
@@ -10948,6 +10949,7 @@ class Obj2 {
      * @param GotoClass $goto
      * @param Guard $guard
      * @param HasOwnProperty $hasOwnProperty
+     * @param HashCode $hashCode
      * @param ID $id
      * @param IfClass $if
      * @param Imp $imp
@@ -10966,7 +10968,7 @@ class Obj2 {
      * @param Internal $internal
      * @param Obj2False $obj2False
      */
-    public function __construct(Def $def, DefaultClass $default, Defer $defer, Deinit $deinit, Del $del, Delegate $delegate, Delete $delete, Dict $dict, Dictionary $dictionary, DidSet $didSet, DoClass $do, Double $double, int $dummy, Dynamic $dynamic, DynamicCast $dynamicCast, Elif $elif, ElseClass $else, EncodeQuickType $encodeQuickType, EnumClass $enum, EqualityContract $equalityContract, Event $event, Except $except, ExceptionClass $exception, Explicit $explicit, Export $export, Exposing $exposing, ExtendsClass $extends, Extension $extension, Extern $extern, Fallthrough $fallthrough, FalseClass $false, Fileprivate $fileprivate, FinalClass $final, FinallyClass $finally, Fixed $fixed, FloatClass $float, ForClass $for, ForeachClass $foreach, Friend $friend, From $from, FromJSON $fromJSON, Func $func, FunctionClass $function, Get $get, GlobalClass $global, Go $go, GotoClass $goto, Guard $guard, HasOwnProperty $hasOwnProperty, ID $id, IfClass $if, Imp $imp, ImplementsClass $implements, Implicit $implicit, Import $import, In $in, Indirect $indirect, Infix $infix, Init $init, Inline $inline, Inout $inout, InstanceofClass $instanceof, IntClass $int, InterfaceClass $interface, Internal $internal, Obj2False $obj2False) {
+    public function __construct(Def $def, DefaultClass $default, Defer $defer, Deinit $deinit, Del $del, Delegate $delegate, Delete $delete, Dict $dict, Dictionary $dictionary, DidSet $didSet, DoClass $do, Double $double, int $dummy, Dynamic $dynamic, DynamicCast $dynamicCast, Elif $elif, ElseClass $else, EncodeQuickType $encodeQuickType, EnumClass $enum, EqualityContract $equalityContract, Event $event, Except $except, ExceptionClass $exception, Explicit $explicit, Export $export, Exposing $exposing, ExtendsClass $extends, Extension $extension, Extern $extern, Fallthrough $fallthrough, FalseClass $false, Fileprivate $fileprivate, FinalClass $final, FinallyClass $finally, Fixed $fixed, FloatClass $float, ForClass $for, ForeachClass $foreach, Friend $friend, From $from, FromJSON $fromJSON, Func $func, FunctionClass $function, Get $get, GlobalClass $global, Go $go, GotoClass $goto, Guard $guard, HasOwnProperty $hasOwnProperty, HashCode $hashCode, ID $id, IfClass $if, Imp $imp, ImplementsClass $implements, Implicit $implicit, Import $import, In $in, Indirect $indirect, Infix $infix, Init $init, Inline $inline, Inout $inout, InstanceofClass $instanceof, IntClass $int, InterfaceClass $interface, Internal $internal, Obj2False $obj2False) {
         $this->def = $def;
         $this->default = $default;
         $this->defer = $defer;
@@ -11016,6 +11018,7 @@ class Obj2 {
         $this->goto = $goto;
         $this->guard = $guard;
         $this->hasOwnProperty = $hasOwnProperty;
+        $this->hashCode = $hashCode;
         $this->id = $id;
         $this->if = $if;
         $this->imp = $imp;
@@ -13386,6 +13389,54 @@ class Obj2 {
         return HasOwnProperty::sample(); /*79:hasOwnProperty*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return HashCode
+     */
+    public static function fromHashCode(stdClass $value): HashCode {
+        return HashCode::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toHashCode(): stdClass {
+        if (Obj2::validateHashCode($this->hashCode))  {
+            return $this->hashCode->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj2::hashCode');
+    }
+
+    /**
+     * @param HashCode
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateHashCode(HashCode $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return HashCode
+     */
+    public function getHashCode(): HashCode {
+        if (Obj2::validateHashCode($this->hashCode))  {
+            return $this->hashCode;
+        }
+        throw new Exception('never get to getHashCode Obj2::hashCode');
+    }
+
+    /**
+     * @return HashCode
+     */
+    public static function sampleHashCode(): HashCode {
+        return HashCode::sample(); /*80:hashCode*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -13431,7 +13482,7 @@ class Obj2 {
      * @return ID
      */
     public static function sampleID(): ID {
-        return ID::sample(); /*80:id*/
+        return ID::sample(); /*81:id*/
     }
 
     /**
@@ -13479,7 +13530,7 @@ class Obj2 {
      * @return IfClass
      */
     public static function sampleIf(): IfClass {
-        return IfClass::sample(); /*81:if*/
+        return IfClass::sample(); /*82:if*/
     }
 
     /**
@@ -13527,7 +13578,7 @@ class Obj2 {
      * @return Imp
      */
     public static function sampleImp(): Imp {
-        return Imp::sample(); /*82:imp*/
+        return Imp::sample(); /*83:imp*/
     }
 
     /**
@@ -13575,7 +13626,7 @@ class Obj2 {
      * @return ImplementsClass
      */
     public static function sampleImplements(): ImplementsClass {
-        return ImplementsClass::sample(); /*83:implements*/
+        return ImplementsClass::sample(); /*84:implements*/
     }
 
     /**
@@ -13623,7 +13674,7 @@ class Obj2 {
      * @return Implicit
      */
     public static function sampleImplicit(): Implicit {
-        return Implicit::sample(); /*84:implicit*/
+        return Implicit::sample(); /*85:implicit*/
     }
 
     /**
@@ -13671,7 +13722,7 @@ class Obj2 {
      * @return Import
      */
     public static function sampleImport(): Import {
-        return Import::sample(); /*85:import*/
+        return Import::sample(); /*86:import*/
     }
 
     /**
@@ -13719,7 +13770,7 @@ class Obj2 {
      * @return In
      */
     public static function sampleIn(): In {
-        return In::sample(); /*86:in*/
+        return In::sample(); /*87:in*/
     }
 
     /**
@@ -13767,7 +13818,7 @@ class Obj2 {
      * @return Indirect
      */
     public static function sampleIndirect(): Indirect {
-        return Indirect::sample(); /*87:indirect*/
+        return Indirect::sample(); /*88:indirect*/
     }
 
     /**
@@ -13815,7 +13866,7 @@ class Obj2 {
      * @return Infix
      */
     public static function sampleInfix(): Infix {
-        return Infix::sample(); /*88:infix*/
+        return Infix::sample(); /*89:infix*/
     }
 
     /**
@@ -13863,7 +13914,7 @@ class Obj2 {
      * @return Init
      */
     public static function sampleInit(): Init {
-        return Init::sample(); /*89:init*/
+        return Init::sample(); /*90:init*/
     }
 
     /**
@@ -13911,7 +13962,7 @@ class Obj2 {
      * @return Inline
      */
     public static function sampleInline(): Inline {
-        return Inline::sample(); /*90:inline*/
+        return Inline::sample(); /*91:inline*/
     }
 
     /**
@@ -13959,7 +14010,7 @@ class Obj2 {
      * @return Inout
      */
     public static function sampleInout(): Inout {
-        return Inout::sample(); /*91:inout*/
+        return Inout::sample(); /*92:inout*/
     }
 
     /**
@@ -14007,7 +14058,7 @@ class Obj2 {
      * @return InstanceofClass
      */
     public static function sampleInstanceof(): InstanceofClass {
-        return InstanceofClass::sample(); /*92:instanceof*/
+        return InstanceofClass::sample(); /*93:instanceof*/
     }
 
     /**
@@ -14055,7 +14106,7 @@ class Obj2 {
      * @return IntClass
      */
     public static function sampleInt(): IntClass {
-        return IntClass::sample(); /*93:int*/
+        return IntClass::sample(); /*94:int*/
     }
 
     /**
@@ -14103,7 +14154,7 @@ class Obj2 {
      * @return InterfaceClass
      */
     public static function sampleInterface(): InterfaceClass {
-        return InterfaceClass::sample(); /*94:interface*/
+        return InterfaceClass::sample(); /*95:interface*/
     }
 
     /**
@@ -14151,7 +14202,7 @@ class Obj2 {
      * @return Internal
      */
     public static function sampleInternal(): Internal {
-        return Internal::sample(); /*95:internal*/
+        return Internal::sample(); /*96:internal*/
     }
 
     /**
@@ -14199,7 +14250,7 @@ class Obj2 {
      * @return Obj2False
      */
     public static function sampleObj2False(): Obj2False {
-        return Obj2False::sample(); /*96:obj2False*/
+        return Obj2False::sample(); /*97:obj2False*/
     }
 
     /**
@@ -14256,6 +14307,7 @@ class Obj2 {
         || Obj2::validateGoto($this->goto)
         || Obj2::validateGuard($this->guard)
         || Obj2::validateHasOwnProperty($this->hasOwnProperty)
+        || Obj2::validateHashCode($this->hashCode)
         || Obj2::validateID($this->id)
         || Obj2::validateIf($this->if)
         || Obj2::validateImp($this->imp)
@@ -14330,6 +14382,7 @@ class Obj2 {
         $out->{'goto'} = $this->toGoto();
         $out->{'guard'} = $this->toGuard();
         $out->{'hasOwnProperty'} = $this->toHasOwnProperty();
+        $out->{'hashCode'} = $this->toHashCode();
         $out->{'id'} = $this->toID();
         $out->{'if'} = $this->toIf();
         $out->{'IMP'} = $this->toImp();
@@ -14503,6 +14556,9 @@ class Obj2 {
         if (!property_exists($obj, 'hasOwnProperty')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'hashCode')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'id')) {
             throw new Exception("Missing required property");
         }
@@ -14604,6 +14660,7 @@ class Obj2 {
         ,Obj2::fromGoto($obj->{'goto'})
         ,Obj2::fromGuard($obj->{'guard'})
         ,Obj2::fromHasOwnProperty($obj->{'hasOwnProperty'})
+        ,Obj2::fromHashCode($obj->{'hashCode'})
         ,Obj2::fromID($obj->{'id'})
         ,Obj2::fromIf($obj->{'if'})
         ,Obj2::fromImp($obj->{'IMP'})
@@ -14678,6 +14735,7 @@ class Obj2 {
         ,Obj2::sampleGoto()
         ,Obj2::sampleGuard()
         ,Obj2::sampleHasOwnProperty()
+        ,Obj2::sampleHashCode()
         ,Obj2::sampleID()
         ,Obj2::sampleIf()
         ,Obj2::sampleImp()
@@ -19547,6 +19605,107 @@ class HasOwnProperty {
     }
 }
 
+// This is an autogenerated file:HashCode
+
+class HashCode {
+    private int $hashCode; // json:hashCode Required
+
+    /**
+     * @param int $hashCode
+     */
+    public function __construct(int $hashCode) {
+        $this->hashCode = $hashCode;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromHashCode(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toHashCode(): int {
+        if (HashCode::validateHashCode($this->hashCode))  {
+            return $this->hashCode; /*int*/
+        }
+        throw new Exception('never get to this HashCode::hashCode');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateHashCode(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getHashCode(): int {
+        if (HashCode::validateHashCode($this->hashCode))  {
+            return $this->hashCode;
+        }
+        throw new Exception('never get to getHashCode HashCode::hashCode');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleHashCode(): int {
+        return 31; /*31:hashCode*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return HashCode::validateHashCode($this->hashCode);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'hashCode'} = $this->toHashCode();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return HashCode
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): HashCode {
+        if (!property_exists($obj, 'hashCode')) {
+            throw new Exception("Missing required property");
+        }
+        return new HashCode(
+         HashCode::fromHashCode($obj->{'hashCode'})
+        );
+    }
+
+    /**
+     * @return HashCode
+     */
+    public static function sample(): HashCode {
+        return new HashCode(
+         HashCode::sampleHashCode()
+        );
+    }
+}
+
 // This is an autogenerated file:ID
 
 class ID {
@@ -21296,6 +21455,7 @@ class Obj3 {
     private Newtonsoft $newtonsoft; // json:newtonsoft Required
     private Nil $nil; // json:nil Required
     private No $no; // json:NO Required
+    private NoSuchMethod $noSuchMethod; // json:noSuchMethod Required
     private Noexcept $noexcept; // json:noexcept Required
     private Nonatomic $nonatomic; // json:nonatomic Required
     private None $none; // json:None Required
@@ -21364,6 +21524,7 @@ class Obj3 {
      * @param Newtonsoft $newtonsoft
      * @param Nil $nil
      * @param No $no
+     * @param NoSuchMethod $noSuchMethod
      * @param Noexcept $noexcept
      * @param Nonatomic $nonatomic
      * @param None $none
@@ -21402,7 +21563,7 @@ class Obj3 {
      * @param ProtectedClass $protected
      * @param Protocol $protocol
      */
-    public function __construct(int $dummy, Is $is, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONConverter $jsonConverter, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, Lock $lock, Long $long, Map $map, MetadataPropertyHandling $metadataPropertyHandling, Module $module, Mutable $mutable, Mutating $mutating, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no, Noexcept $noexcept, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSString $nsString, NULLClass $null, Nullptr $nullptr, Number $number, NoneClass $obj3None, Obj3Null $obj3Null, ProtocolClass $obj3Protocol, ObjectClass $object, Of $of, Oneway $oneway, Open $open, Operator $operator, Optional $optional, OrClass $or, OrEq $orEq, Out $out, OverrideClass $override, Package $package, Params $params, Pass $pass, Port $port, Postfix $postfix, Precedence $precedence, Prefix $prefix, PrintClass $print, PrintMembers $printMembers, Printf $printf, PrivateClass $private, ProtectedClass $protected, Protocol $protocol) {
+    public function __construct(int $dummy, Is $is, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONConverter $jsonConverter, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, Lock $lock, Long $long, Map $map, MetadataPropertyHandling $metadataPropertyHandling, Module $module, Mutable $mutable, Mutating $mutating, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no, NoSuchMethod $noSuchMethod, Noexcept $noexcept, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSString $nsString, NULLClass $null, Nullptr $nullptr, Number $number, NoneClass $obj3None, Obj3Null $obj3Null, ProtocolClass $obj3Protocol, ObjectClass $object, Of $of, Oneway $oneway, Open $open, Operator $operator, Optional $optional, OrClass $or, OrEq $orEq, Out $out, OverrideClass $override, Package $package, Params $params, Pass $pass, Port $port, Postfix $postfix, Precedence $precedence, Prefix $prefix, PrintClass $print, PrintMembers $printMembers, Printf $printf, PrivateClass $private, ProtectedClass $protected, Protocol $protocol) {
         $this->dummy = $dummy;
         $this->is = $is;
         $this->iterable = $iterable;
@@ -21432,6 +21593,7 @@ class Obj3 {
         $this->newtonsoft = $newtonsoft;
         $this->nil = $nil;
         $this->no = $no;
+        $this->noSuchMethod = $noSuchMethod;
         $this->noexcept = $noexcept;
         $this->nonatomic = $nonatomic;
         $this->none = $none;
@@ -22862,6 +23024,54 @@ class Obj3 {
         return No::sample(); /*59:no*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return NoSuchMethod
+     */
+    public static function fromNoSuchMethod(stdClass $value): NoSuchMethod {
+        return NoSuchMethod::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toNoSuchMethod(): stdClass {
+        if (Obj3::validateNoSuchMethod($this->noSuchMethod))  {
+            return $this->noSuchMethod->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj3::noSuchMethod');
+    }
+
+    /**
+     * @param NoSuchMethod
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateNoSuchMethod(NoSuchMethod $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return NoSuchMethod
+     */
+    public function getNoSuchMethod(): NoSuchMethod {
+        if (Obj3::validateNoSuchMethod($this->noSuchMethod))  {
+            return $this->noSuchMethod;
+        }
+        throw new Exception('never get to getNoSuchMethod Obj3::noSuchMethod');
+    }
+
+    /**
+     * @return NoSuchMethod
+     */
+    public static function sampleNoSuchMethod(): NoSuchMethod {
+        return NoSuchMethod::sample(); /*60:noSuchMethod*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -22907,7 +23117,7 @@ class Obj3 {
      * @return Noexcept
      */
     public static function sampleNoexcept(): Noexcept {
-        return Noexcept::sample(); /*60:noexcept*/
+        return Noexcept::sample(); /*61:noexcept*/
     }
 
     /**
@@ -22955,7 +23165,7 @@ class Obj3 {
      * @return Nonatomic
      */
     public static function sampleNonatomic(): Nonatomic {
-        return Nonatomic::sample(); /*61:nonatomic*/
+        return Nonatomic::sample(); /*62:nonatomic*/
     }
 
     /**
@@ -23003,7 +23213,7 @@ class Obj3 {
      * @return None
      */
     public static function sampleNone(): None {
-        return None::sample(); /*62:none*/
+        return None::sample(); /*63:none*/
     }
 
     /**
@@ -23051,7 +23261,7 @@ class Obj3 {
      * @return Nonlocal
      */
     public static function sampleNonlocal(): Nonlocal {
-        return Nonlocal::sample(); /*63:nonlocal*/
+        return Nonlocal::sample(); /*64:nonlocal*/
     }
 
     /**
@@ -23099,7 +23309,7 @@ class Obj3 {
      * @return Nonmutating
      */
     public static function sampleNonmutating(): Nonmutating {
-        return Nonmutating::sample(); /*64:nonmutating*/
+        return Nonmutating::sample(); /*65:nonmutating*/
     }
 
     /**
@@ -23147,7 +23357,7 @@ class Obj3 {
      * @return Not
      */
     public static function sampleNot(): Not {
-        return Not::sample(); /*65:not*/
+        return Not::sample(); /*66:not*/
     }
 
     /**
@@ -23195,7 +23405,7 @@ class Obj3 {
      * @return NotEq
      */
     public static function sampleNotEq(): NotEq {
-        return NotEq::sample(); /*66:notEq*/
+        return NotEq::sample(); /*67:notEq*/
     }
 
     /**
@@ -23243,7 +23453,7 @@ class Obj3 {
      * @return NSString
      */
     public static function sampleNSString(): NSString {
-        return NSString::sample(); /*67:nsString*/
+        return NSString::sample(); /*68:nsString*/
     }
 
     /**
@@ -23291,7 +23501,7 @@ class Obj3 {
      * @return NULLClass
      */
     public static function sampleNull(): NULLClass {
-        return NULLClass::sample(); /*68:null*/
+        return NULLClass::sample(); /*69:null*/
     }
 
     /**
@@ -23339,7 +23549,7 @@ class Obj3 {
      * @return Nullptr
      */
     public static function sampleNullptr(): Nullptr {
-        return Nullptr::sample(); /*69:nullptr*/
+        return Nullptr::sample(); /*70:nullptr*/
     }
 
     /**
@@ -23387,7 +23597,7 @@ class Obj3 {
      * @return Number
      */
     public static function sampleNumber(): Number {
-        return Number::sample(); /*70:number*/
+        return Number::sample(); /*71:number*/
     }
 
     /**
@@ -23435,7 +23645,7 @@ class Obj3 {
      * @return NoneClass
      */
     public static function sampleObj3None(): NoneClass {
-        return NoneClass::sample(); /*71:obj3None*/
+        return NoneClass::sample(); /*72:obj3None*/
     }
 
     /**
@@ -23483,7 +23693,7 @@ class Obj3 {
      * @return Obj3Null
      */
     public static function sampleObj3Null(): Obj3Null {
-        return Obj3Null::sample(); /*72:obj3Null*/
+        return Obj3Null::sample(); /*73:obj3Null*/
     }
 
     /**
@@ -23531,7 +23741,7 @@ class Obj3 {
      * @return ProtocolClass
      */
     public static function sampleObj3Protocol(): ProtocolClass {
-        return ProtocolClass::sample(); /*73:obj3Protocol*/
+        return ProtocolClass::sample(); /*74:obj3Protocol*/
     }
 
     /**
@@ -23579,7 +23789,7 @@ class Obj3 {
      * @return ObjectClass
      */
     public static function sampleObject(): ObjectClass {
-        return ObjectClass::sample(); /*74:object*/
+        return ObjectClass::sample(); /*75:object*/
     }
 
     /**
@@ -23627,7 +23837,7 @@ class Obj3 {
      * @return Of
      */
     public static function sampleOf(): Of {
-        return Of::sample(); /*75:of*/
+        return Of::sample(); /*76:of*/
     }
 
     /**
@@ -23675,7 +23885,7 @@ class Obj3 {
      * @return Oneway
      */
     public static function sampleOneway(): Oneway {
-        return Oneway::sample(); /*76:oneway*/
+        return Oneway::sample(); /*77:oneway*/
     }
 
     /**
@@ -23723,7 +23933,7 @@ class Obj3 {
      * @return Open
      */
     public static function sampleOpen(): Open {
-        return Open::sample(); /*77:open*/
+        return Open::sample(); /*78:open*/
     }
 
     /**
@@ -23771,7 +23981,7 @@ class Obj3 {
      * @return Operator
      */
     public static function sampleOperator(): Operator {
-        return Operator::sample(); /*78:operator*/
+        return Operator::sample(); /*79:operator*/
     }
 
     /**
@@ -23819,7 +24029,7 @@ class Obj3 {
      * @return Optional
      */
     public static function sampleOptional(): Optional {
-        return Optional::sample(); /*79:optional*/
+        return Optional::sample(); /*80:optional*/
     }
 
     /**
@@ -23867,7 +24077,7 @@ class Obj3 {
      * @return OrClass
      */
     public static function sampleOr(): OrClass {
-        return OrClass::sample(); /*80:or*/
+        return OrClass::sample(); /*81:or*/
     }
 
     /**
@@ -23915,7 +24125,7 @@ class Obj3 {
      * @return OrEq
      */
     public static function sampleOrEq(): OrEq {
-        return OrEq::sample(); /*81:orEq*/
+        return OrEq::sample(); /*82:orEq*/
     }
 
     /**
@@ -23963,7 +24173,7 @@ class Obj3 {
      * @return Out
      */
     public static function sampleOut(): Out {
-        return Out::sample(); /*82:out*/
+        return Out::sample(); /*83:out*/
     }
 
     /**
@@ -24011,7 +24221,7 @@ class Obj3 {
      * @return OverrideClass
      */
     public static function sampleOverride(): OverrideClass {
-        return OverrideClass::sample(); /*83:override*/
+        return OverrideClass::sample(); /*84:override*/
     }
 
     /**
@@ -24059,7 +24269,7 @@ class Obj3 {
      * @return Package
      */
     public static function samplePackage(): Package {
-        return Package::sample(); /*84:package*/
+        return Package::sample(); /*85:package*/
     }
 
     /**
@@ -24107,7 +24317,7 @@ class Obj3 {
      * @return Params
      */
     public static function sampleParams(): Params {
-        return Params::sample(); /*85:params*/
+        return Params::sample(); /*86:params*/
     }
 
     /**
@@ -24155,7 +24365,7 @@ class Obj3 {
      * @return Pass
      */
     public static function samplePass(): Pass {
-        return Pass::sample(); /*86:pass*/
+        return Pass::sample(); /*87:pass*/
     }
 
     /**
@@ -24203,7 +24413,7 @@ class Obj3 {
      * @return Port
      */
     public static function samplePort(): Port {
-        return Port::sample(); /*87:port*/
+        return Port::sample(); /*88:port*/
     }
 
     /**
@@ -24251,7 +24461,7 @@ class Obj3 {
      * @return Postfix
      */
     public static function samplePostfix(): Postfix {
-        return Postfix::sample(); /*88:postfix*/
+        return Postfix::sample(); /*89:postfix*/
     }
 
     /**
@@ -24299,7 +24509,7 @@ class Obj3 {
      * @return Precedence
      */
     public static function samplePrecedence(): Precedence {
-        return Precedence::sample(); /*89:precedence*/
+        return Precedence::sample(); /*90:precedence*/
     }
 
     /**
@@ -24347,7 +24557,7 @@ class Obj3 {
      * @return Prefix
      */
     public static function samplePrefix(): Prefix {
-        return Prefix::sample(); /*90:prefix*/
+        return Prefix::sample(); /*91:prefix*/
     }
 
     /**
@@ -24395,7 +24605,7 @@ class Obj3 {
      * @return PrintClass
      */
     public static function samplePrint(): PrintClass {
-        return PrintClass::sample(); /*91:print*/
+        return PrintClass::sample(); /*92:print*/
     }
 
     /**
@@ -24443,7 +24653,7 @@ class Obj3 {
      * @return PrintMembers
      */
     public static function samplePrintMembers(): PrintMembers {
-        return PrintMembers::sample(); /*92:printMembers*/
+        return PrintMembers::sample(); /*93:printMembers*/
     }
 
     /**
@@ -24491,7 +24701,7 @@ class Obj3 {
      * @return Printf
      */
     public static function samplePrintf(): Printf {
-        return Printf::sample(); /*93:printf*/
+        return Printf::sample(); /*94:printf*/
     }
 
     /**
@@ -24539,7 +24749,7 @@ class Obj3 {
      * @return PrivateClass
      */
     public static function samplePrivate(): PrivateClass {
-        return PrivateClass::sample(); /*94:private*/
+        return PrivateClass::sample(); /*95:private*/
     }
 
     /**
@@ -24587,7 +24797,7 @@ class Obj3 {
      * @return ProtectedClass
      */
     public static function sampleProtected(): ProtectedClass {
-        return ProtectedClass::sample(); /*95:protected*/
+        return ProtectedClass::sample(); /*96:protected*/
     }
 
     /**
@@ -24635,7 +24845,7 @@ class Obj3 {
      * @return Protocol
      */
     public static function sampleProtocol(): Protocol {
-        return Protocol::sample(); /*96:protocol*/
+        return Protocol::sample(); /*97:protocol*/
     }
 
     /**
@@ -24672,6 +24882,7 @@ class Obj3 {
         || Obj3::validateNewtonsoft($this->newtonsoft)
         || Obj3::validateNil($this->nil)
         || Obj3::validateNo($this->no)
+        || Obj3::validateNoSuchMethod($this->noSuchMethod)
         || Obj3::validateNoexcept($this->noexcept)
         || Obj3::validateNonatomic($this->nonatomic)
         || Obj3::validateNone($this->none)
@@ -24746,6 +24957,7 @@ class Obj3 {
         $out->{'newtonsoft'} = $this->toNewtonsoft();
         $out->{'nil'} = $this->toNil();
         $out->{'NO'} = $this->toNo();
+        $out->{'noSuchMethod'} = $this->toNoSuchMethod();
         $out->{'noexcept'} = $this->toNoexcept();
         $out->{'nonatomic'} = $this->toNonatomic();
         $out->{'None'} = $this->toNone();
@@ -24879,6 +25091,9 @@ class Obj3 {
         if (!property_exists($obj, 'NO')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'noSuchMethod')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'noexcept')) {
             throw new Exception("Missing required property");
         }
@@ -25020,6 +25235,7 @@ class Obj3 {
         ,Obj3::fromNewtonsoft($obj->{'newtonsoft'})
         ,Obj3::fromNil($obj->{'nil'})
         ,Obj3::fromNo($obj->{'NO'})
+        ,Obj3::fromNoSuchMethod($obj->{'noSuchMethod'})
         ,Obj3::fromNoexcept($obj->{'noexcept'})
         ,Obj3::fromNonatomic($obj->{'nonatomic'})
         ,Obj3::fromNone($obj->{'None'})
@@ -25094,6 +25310,7 @@ class Obj3 {
         ,Obj3::sampleNewtonsoft()
         ,Obj3::sampleNil()
         ,Obj3::sampleNo()
+        ,Obj3::sampleNoSuchMethod()
         ,Obj3::sampleNoexcept()
         ,Obj3::sampleNonatomic()
         ,Obj3::sampleNone()
@@ -27963,6 +28180,107 @@ class No {
     }
 }
 
+// This is an autogenerated file:NoSuchMethod
+
+class NoSuchMethod {
+    private int $noSuchMethod; // json:noSuchMethod Required
+
+    /**
+     * @param int $noSuchMethod
+     */
+    public function __construct(int $noSuchMethod) {
+        $this->noSuchMethod = $noSuchMethod;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromNoSuchMethod(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toNoSuchMethod(): int {
+        if (NoSuchMethod::validateNoSuchMethod($this->noSuchMethod))  {
+            return $this->noSuchMethod; /*int*/
+        }
+        throw new Exception('never get to this NoSuchMethod::noSuchMethod');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateNoSuchMethod(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getNoSuchMethod(): int {
+        if (NoSuchMethod::validateNoSuchMethod($this->noSuchMethod))  {
+            return $this->noSuchMethod;
+        }
+        throw new Exception('never get to getNoSuchMethod NoSuchMethod::noSuchMethod');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleNoSuchMethod(): int {
+        return 31; /*31:noSuchMethod*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return NoSuchMethod::validateNoSuchMethod($this->noSuchMethod);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'noSuchMethod'} = $this->toNoSuchMethod();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return NoSuchMethod
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): NoSuchMethod {
+        if (!property_exists($obj, 'noSuchMethod')) {
+            throw new Exception("Missing required property");
+        }
+        return new NoSuchMethod(
+         NoSuchMethod::fromNoSuchMethod($obj->{'noSuchMethod'})
+        );
+    }
+
+    /**
+     * @return NoSuchMethod
+     */
+    public static function sample(): NoSuchMethod {
+        return new NoSuchMethod(
+         NoSuchMethod::sampleNoSuchMethod()
+        );
+    }
+}
+
 // This is an autogenerated file:Noexcept
 
 class Noexcept {
@@ -31725,6 +32043,7 @@ class Obj4 {
     private Rethrows $rethrows; // json:rethrows Required
     private ReturnClass $return; // json:return Required
     private Right $right; // json:right Required
+    private RuntimeType $runtimeType; // json:runtimeType Required
     private S $s; // json:s Required
     private Sbyte $sbyte; // json:sbyte Required
     private Sealed $sealed; // json:sealed Required
@@ -31755,6 +32074,7 @@ class Obj4 {
     private ThrowClass $throw; // json:throw Required
     private Throws $throws; // json:throws Required
     private ToJSON $toJSON; // json:to_json Required
+    private ToString $toString; // json:toString Required
     private TopLevelClass $topLevel; // json:top_level Required
     private Transient $transient; // json:transient Required
     private TrueClass $true; // json:True Required
@@ -31793,6 +32113,7 @@ class Obj4 {
      * @param Rethrows $rethrows
      * @param ReturnClass $return
      * @param Right $right
+     * @param RuntimeType $runtimeType
      * @param S $s
      * @param Sbyte $sbyte
      * @param Sealed $sealed
@@ -31823,6 +32144,7 @@ class Obj4 {
      * @param ThrowClass $throw
      * @param Throws $throws
      * @param ToJSON $toJSON
+     * @param ToString $toString
      * @param TopLevelClass $topLevel
      * @param Transient $transient
      * @param TrueClass $true
@@ -31838,7 +32160,7 @@ class Obj4 {
      * @param Unchecked $unchecked
      * @param Undefined $undefined
      */
-    public function __construct(int $dummy, Obj4Self $obj4Self, This $obj4This, Obj4True $obj4True, TypeClass $obj4Type, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, Register $register, ReinterpretCast $reinterpretCast, Repeat $repeat, RequireClass $require, Required $required, Requires $requires, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, S $s, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Serialize $serialize, Set $set, Short $short, Signed $signed, Sizeof $sizeof, Stackalloc $stackalloc, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, ToJSON $toJSON, TopLevelClass $topLevel, Transient $transient, TrueClass $true, TryClass $try, Type $type, Typealias $typealias, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined) {
+    public function __construct(int $dummy, Obj4Self $obj4Self, This $obj4This, Obj4True $obj4True, TypeClass $obj4Type, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, Register $register, ReinterpretCast $reinterpretCast, Repeat $repeat, RequireClass $require, Required $required, Requires $requires, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, RuntimeType $runtimeType, S $s, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Serialize $serialize, Set $set, Short $short, Signed $signed, Sizeof $sizeof, Stackalloc $stackalloc, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, ToJSON $toJSON, ToString $toString, TopLevelClass $topLevel, Transient $transient, TrueClass $true, TryClass $try, Type $type, Typealias $typealias, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined) {
         $this->dummy = $dummy;
         $this->obj4Self = $obj4Self;
         $this->obj4This = $obj4This;
@@ -31861,6 +32183,7 @@ class Obj4 {
         $this->rethrows = $rethrows;
         $this->return = $return;
         $this->right = $right;
+        $this->runtimeType = $runtimeType;
         $this->s = $s;
         $this->sbyte = $sbyte;
         $this->sealed = $sealed;
@@ -31891,6 +32214,7 @@ class Obj4 {
         $this->throw = $throw;
         $this->throws = $throws;
         $this->toJSON = $toJSON;
+        $this->toString = $toString;
         $this->topLevel = $topLevel;
         $this->transient = $transient;
         $this->true = $true;
@@ -32962,6 +33286,54 @@ class Obj4 {
         return Right::sample(); /*52:right*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return RuntimeType
+     */
+    public static function fromRuntimeType(stdClass $value): RuntimeType {
+        return RuntimeType::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toRuntimeType(): stdClass {
+        if (Obj4::validateRuntimeType($this->runtimeType))  {
+            return $this->runtimeType->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::runtimeType');
+    }
+
+    /**
+     * @param RuntimeType
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRuntimeType(RuntimeType $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return RuntimeType
+     */
+    public function getRuntimeType(): RuntimeType {
+        if (Obj4::validateRuntimeType($this->runtimeType))  {
+            return $this->runtimeType;
+        }
+        throw new Exception('never get to getRuntimeType Obj4::runtimeType');
+    }
+
+    /**
+     * @return RuntimeType
+     */
+    public static function sampleRuntimeType(): RuntimeType {
+        return RuntimeType::sample(); /*53:runtimeType*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -33007,7 +33379,7 @@ class Obj4 {
      * @return S
      */
     public static function sampleS(): S {
-        return S::sample(); /*53:s*/
+        return S::sample(); /*54:s*/
     }
 
     /**
@@ -33055,7 +33427,7 @@ class Obj4 {
      * @return Sbyte
      */
     public static function sampleSbyte(): Sbyte {
-        return Sbyte::sample(); /*54:sbyte*/
+        return Sbyte::sample(); /*55:sbyte*/
     }
 
     /**
@@ -33103,7 +33475,7 @@ class Obj4 {
      * @return Sealed
      */
     public static function sampleSealed(): Sealed {
-        return Sealed::sample(); /*55:sealed*/
+        return Sealed::sample(); /*56:sealed*/
     }
 
     /**
@@ -33151,7 +33523,7 @@ class Obj4 {
      * @return Sel
      */
     public static function sampleSel(): Sel {
-        return Sel::sample(); /*56:sel*/
+        return Sel::sample(); /*57:sel*/
     }
 
     /**
@@ -33199,7 +33571,7 @@ class Obj4 {
      * @return Select
      */
     public static function sampleSelect(): Select {
-        return Select::sample(); /*57:select*/
+        return Select::sample(); /*58:select*/
     }
 
     /**
@@ -33247,7 +33619,7 @@ class Obj4 {
      * @return SelfClass
      */
     public static function sampleSelf(): SelfClass {
-        return SelfClass::sample(); /*58:self*/
+        return SelfClass::sample(); /*59:self*/
     }
 
     /**
@@ -33295,7 +33667,7 @@ class Obj4 {
      * @return Serialize
      */
     public static function sampleSerialize(): Serialize {
-        return Serialize::sample(); /*59:serialize*/
+        return Serialize::sample(); /*60:serialize*/
     }
 
     /**
@@ -33343,7 +33715,7 @@ class Obj4 {
      * @return Set
      */
     public static function sampleSet(): Set {
-        return Set::sample(); /*60:set*/
+        return Set::sample(); /*61:set*/
     }
 
     /**
@@ -33391,7 +33763,7 @@ class Obj4 {
      * @return Short
      */
     public static function sampleShort(): Short {
-        return Short::sample(); /*61:short*/
+        return Short::sample(); /*62:short*/
     }
 
     /**
@@ -33439,7 +33811,7 @@ class Obj4 {
      * @return Signed
      */
     public static function sampleSigned(): Signed {
-        return Signed::sample(); /*62:signed*/
+        return Signed::sample(); /*63:signed*/
     }
 
     /**
@@ -33487,7 +33859,7 @@ class Obj4 {
      * @return Sizeof
      */
     public static function sampleSizeof(): Sizeof {
-        return Sizeof::sample(); /*63:sizeof*/
+        return Sizeof::sample(); /*64:sizeof*/
     }
 
     /**
@@ -33535,7 +33907,7 @@ class Obj4 {
      * @return Stackalloc
      */
     public static function sampleStackalloc(): Stackalloc {
-        return Stackalloc::sample(); /*64:stackalloc*/
+        return Stackalloc::sample(); /*65:stackalloc*/
     }
 
     /**
@@ -33583,7 +33955,7 @@ class Obj4 {
      * @return StaticClass
      */
     public static function sampleStatic(): StaticClass {
-        return StaticClass::sample(); /*65:static*/
+        return StaticClass::sample(); /*66:static*/
     }
 
     /**
@@ -33631,7 +34003,7 @@ class Obj4 {
      * @return StaticAssert
      */
     public static function sampleStaticAssert(): StaticAssert {
-        return StaticAssert::sample(); /*66:staticAssert*/
+        return StaticAssert::sample(); /*67:staticAssert*/
     }
 
     /**
@@ -33679,7 +34051,7 @@ class Obj4 {
      * @return StaticCast
      */
     public static function sampleStaticCast(): StaticCast {
-        return StaticCast::sample(); /*67:staticCast*/
+        return StaticCast::sample(); /*68:staticCast*/
     }
 
     /**
@@ -33727,7 +34099,7 @@ class Obj4 {
      * @return Strictfp
      */
     public static function sampleStrictfp(): Strictfp {
-        return Strictfp::sample(); /*68:strictfp*/
+        return Strictfp::sample(); /*69:strictfp*/
     }
 
     /**
@@ -33743,7 +34115,7 @@ class Obj4 {
      * @throws Exception
      * @return stdClass
      */
-    public function toString(): stdClass {
+    public function purpleToString(): stdClass {
         if (Obj4::validateString($this->string))  {
             return $this->string->to(); /*class*/
         }
@@ -33775,7 +34147,7 @@ class Obj4 {
      * @return StringClass
      */
     public static function sampleString(): StringClass {
-        return StringClass::sample(); /*69:string*/
+        return StringClass::sample(); /*70:string*/
     }
 
     /**
@@ -33823,7 +34195,7 @@ class Obj4 {
      * @return Struct
      */
     public static function sampleStruct(): Struct {
-        return Struct::sample(); /*70:struct*/
+        return Struct::sample(); /*71:struct*/
     }
 
     /**
@@ -33871,7 +34243,7 @@ class Obj4 {
      * @return Subscript
      */
     public static function sampleSubscript(): Subscript {
-        return Subscript::sample(); /*71:subscript*/
+        return Subscript::sample(); /*72:subscript*/
     }
 
     /**
@@ -33919,7 +34291,7 @@ class Obj4 {
      * @return Super
      */
     public static function sampleSuper(): Super {
-        return Super::sample(); /*72:super*/
+        return Super::sample(); /*73:super*/
     }
 
     /**
@@ -33967,7 +34339,7 @@ class Obj4 {
      * @return SwitchClass
      */
     public static function sampleSwitch(): SwitchClass {
-        return SwitchClass::sample(); /*73:switch*/
+        return SwitchClass::sample(); /*74:switch*/
     }
 
     /**
@@ -34015,7 +34387,7 @@ class Obj4 {
      * @return Symbol
      */
     public static function sampleSymbol(): Symbol {
-        return Symbol::sample(); /*74:symbol*/
+        return Symbol::sample(); /*75:symbol*/
     }
 
     /**
@@ -34063,7 +34435,7 @@ class Obj4 {
      * @return Synchronized
      */
     public static function sampleSynchronized(): Synchronized {
-        return Synchronized::sample(); /*75:synchronized*/
+        return Synchronized::sample(); /*76:synchronized*/
     }
 
     /**
@@ -34111,7 +34483,7 @@ class Obj4 {
      * @return System
      */
     public static function sampleSystem(): System {
-        return System::sample(); /*76:system*/
+        return System::sample(); /*77:system*/
     }
 
     /**
@@ -34159,7 +34531,7 @@ class Obj4 {
      * @return Template
      */
     public static function sampleTemplate(): Template {
-        return Template::sample(); /*77:template*/
+        return Template::sample(); /*78:template*/
     }
 
     /**
@@ -34207,7 +34579,7 @@ class Obj4 {
      * @return Then
      */
     public static function sampleThen(): Then {
-        return Then::sample(); /*78:then*/
+        return Then::sample(); /*79:then*/
     }
 
     /**
@@ -34255,7 +34627,7 @@ class Obj4 {
      * @return ThreadLocal
      */
     public static function sampleThreadLocal(): ThreadLocal {
-        return ThreadLocal::sample(); /*79:threadLocal*/
+        return ThreadLocal::sample(); /*80:threadLocal*/
     }
 
     /**
@@ -34303,7 +34675,7 @@ class Obj4 {
      * @return ThrowClass
      */
     public static function sampleThrow(): ThrowClass {
-        return ThrowClass::sample(); /*80:throw*/
+        return ThrowClass::sample(); /*81:throw*/
     }
 
     /**
@@ -34351,7 +34723,7 @@ class Obj4 {
      * @return Throws
      */
     public static function sampleThrows(): Throws {
-        return Throws::sample(); /*81:throws*/
+        return Throws::sample(); /*82:throws*/
     }
 
     /**
@@ -34399,7 +34771,55 @@ class Obj4 {
      * @return ToJSON
      */
     public static function sampleToJSON(): ToJSON {
-        return ToJSON::sample(); /*82:toJSON*/
+        return ToJSON::sample(); /*83:toJSON*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return ToString
+     */
+    public static function fromToString(stdClass $value): ToString {
+        return ToString::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toToString(): stdClass {
+        if (Obj4::validateToString($this->toString))  {
+            return $this->toString->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::toString');
+    }
+
+    /**
+     * @param ToString
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateToString(ToString $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ToString
+     */
+    public function getToString(): ToString {
+        if (Obj4::validateToString($this->toString))  {
+            return $this->toString;
+        }
+        throw new Exception('never get to getToString Obj4::toString');
+    }
+
+    /**
+     * @return ToString
+     */
+    public static function sampleToString(): ToString {
+        return ToString::sample(); /*84:toString*/
     }
 
     /**
@@ -34447,7 +34867,7 @@ class Obj4 {
      * @return TopLevelClass
      */
     public static function sampleTopLevel(): TopLevelClass {
-        return TopLevelClass::sample(); /*83:topLevel*/
+        return TopLevelClass::sample(); /*85:topLevel*/
     }
 
     /**
@@ -34495,7 +34915,7 @@ class Obj4 {
      * @return Transient
      */
     public static function sampleTransient(): Transient {
-        return Transient::sample(); /*84:transient*/
+        return Transient::sample(); /*86:transient*/
     }
 
     /**
@@ -34543,7 +34963,7 @@ class Obj4 {
      * @return TrueClass
      */
     public static function sampleTrue(): TrueClass {
-        return TrueClass::sample(); /*85:true*/
+        return TrueClass::sample(); /*87:true*/
     }
 
     /**
@@ -34591,7 +35011,7 @@ class Obj4 {
      * @return TryClass
      */
     public static function sampleTry(): TryClass {
-        return TryClass::sample(); /*86:try*/
+        return TryClass::sample(); /*88:try*/
     }
 
     /**
@@ -34639,7 +35059,7 @@ class Obj4 {
      * @return Type
      */
     public static function sampleType(): Type {
-        return Type::sample(); /*87:type*/
+        return Type::sample(); /*89:type*/
     }
 
     /**
@@ -34687,7 +35107,7 @@ class Obj4 {
      * @return Typealias
      */
     public static function sampleTypealias(): Typealias {
-        return Typealias::sample(); /*88:typealias*/
+        return Typealias::sample(); /*90:typealias*/
     }
 
     /**
@@ -34735,7 +35155,7 @@ class Obj4 {
      * @return Typedef
      */
     public static function sampleTypedef(): Typedef {
-        return Typedef::sample(); /*89:typedef*/
+        return Typedef::sample(); /*91:typedef*/
     }
 
     /**
@@ -34783,7 +35203,7 @@ class Obj4 {
      * @return Typeid
      */
     public static function sampleTypeid(): Typeid {
-        return Typeid::sample(); /*90:typeid*/
+        return Typeid::sample(); /*92:typeid*/
     }
 
     /**
@@ -34831,7 +35251,7 @@ class Obj4 {
      * @return Typename
      */
     public static function sampleTypename(): Typename {
-        return Typename::sample(); /*91:typename*/
+        return Typename::sample(); /*93:typename*/
     }
 
     /**
@@ -34879,7 +35299,7 @@ class Obj4 {
      * @return Typeof
      */
     public static function sampleTypeof(): Typeof {
-        return Typeof::sample(); /*92:typeof*/
+        return Typeof::sample(); /*94:typeof*/
     }
 
     /**
@@ -34927,7 +35347,7 @@ class Obj4 {
      * @return Uint
      */
     public static function sampleUint(): Uint {
-        return Uint::sample(); /*93:uint*/
+        return Uint::sample(); /*95:uint*/
     }
 
     /**
@@ -34975,7 +35395,7 @@ class Obj4 {
      * @return Ulong
      */
     public static function sampleUlong(): Ulong {
-        return Ulong::sample(); /*94:ulong*/
+        return Ulong::sample(); /*96:ulong*/
     }
 
     /**
@@ -35023,7 +35443,7 @@ class Obj4 {
      * @return Unchecked
      */
     public static function sampleUnchecked(): Unchecked {
-        return Unchecked::sample(); /*95:unchecked*/
+        return Unchecked::sample(); /*97:unchecked*/
     }
 
     /**
@@ -35071,7 +35491,7 @@ class Obj4 {
      * @return Undefined
      */
     public static function sampleUndefined(): Undefined {
-        return Undefined::sample(); /*96:undefined*/
+        return Undefined::sample(); /*98:undefined*/
     }
 
     /**
@@ -35101,6 +35521,7 @@ class Obj4 {
         || Obj4::validateRethrows($this->rethrows)
         || Obj4::validateReturn($this->return)
         || Obj4::validateRight($this->right)
+        || Obj4::validateRuntimeType($this->runtimeType)
         || Obj4::validateS($this->s)
         || Obj4::validateSbyte($this->sbyte)
         || Obj4::validateSealed($this->sealed)
@@ -35131,6 +35552,7 @@ class Obj4 {
         || Obj4::validateThrow($this->throw)
         || Obj4::validateThrows($this->throws)
         || Obj4::validateToJSON($this->toJSON)
+        || Obj4::validateToString($this->toString)
         || Obj4::validateTopLevel($this->topLevel)
         || Obj4::validateTransient($this->transient)
         || Obj4::validateTrue($this->true)
@@ -35175,6 +35597,7 @@ class Obj4 {
         $out->{'rethrows'} = $this->toRethrows();
         $out->{'return'} = $this->toReturn();
         $out->{'right'} = $this->toRight();
+        $out->{'runtimeType'} = $this->toRuntimeType();
         $out->{'s'} = $this->toS();
         $out->{'sbyte'} = $this->toSbyte();
         $out->{'sealed'} = $this->toSealed();
@@ -35191,7 +35614,7 @@ class Obj4 {
         $out->{'static_assert'} = $this->toStaticAssert();
         $out->{'static_cast'} = $this->toStaticCast();
         $out->{'strictfp'} = $this->toStrictfp();
-        $out->{'string'} = $this->toString();
+        $out->{'string'} = $this->purpleToString();
         $out->{'struct'} = $this->toStruct();
         $out->{'subscript'} = $this->toSubscript();
         $out->{'super'} = $this->toSuper();
@@ -35205,6 +35628,7 @@ class Obj4 {
         $out->{'throw'} = $this->toThrow();
         $out->{'throws'} = $this->toThrows();
         $out->{'to_json'} = $this->toToJSON();
+        $out->{'toString'} = $this->toToString();
         $out->{'top_level'} = $this->toTopLevel();
         $out->{'transient'} = $this->toTransient();
         $out->{'True'} = $this->toTrue();
@@ -35294,6 +35718,9 @@ class Obj4 {
         if (!property_exists($obj, 'right')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'runtimeType')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 's')) {
             throw new Exception("Missing required property");
         }
@@ -35384,6 +35811,9 @@ class Obj4 {
         if (!property_exists($obj, 'to_json')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'toString')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'top_level')) {
             throw new Exception("Missing required property");
         }
@@ -35449,6 +35879,7 @@ class Obj4 {
         ,Obj4::fromRethrows($obj->{'rethrows'})
         ,Obj4::fromReturn($obj->{'return'})
         ,Obj4::fromRight($obj->{'right'})
+        ,Obj4::fromRuntimeType($obj->{'runtimeType'})
         ,Obj4::fromS($obj->{'s'})
         ,Obj4::fromSbyte($obj->{'sbyte'})
         ,Obj4::fromSealed($obj->{'sealed'})
@@ -35479,6 +35910,7 @@ class Obj4 {
         ,Obj4::fromThrow($obj->{'throw'})
         ,Obj4::fromThrows($obj->{'throws'})
         ,Obj4::fromToJSON($obj->{'to_json'})
+        ,Obj4::fromToString($obj->{'toString'})
         ,Obj4::fromTopLevel($obj->{'top_level'})
         ,Obj4::fromTransient($obj->{'transient'})
         ,Obj4::fromTrue($obj->{'True'})
@@ -35523,6 +35955,7 @@ class Obj4 {
         ,Obj4::sampleRethrows()
         ,Obj4::sampleReturn()
         ,Obj4::sampleRight()
+        ,Obj4::sampleRuntimeType()
         ,Obj4::sampleS()
         ,Obj4::sampleSbyte()
         ,Obj4::sampleSealed()
@@ -35553,6 +35986,7 @@ class Obj4 {
         ,Obj4::sampleThrow()
         ,Obj4::sampleThrows()
         ,Obj4::sampleToJSON()
+        ,Obj4::sampleToString()
         ,Obj4::sampleTopLevel()
         ,Obj4::sampleTransient()
         ,Obj4::sampleTrue()
@@ -37692,6 +38126,107 @@ class Right {
     }
 }
 
+// This is an autogenerated file:RuntimeType
+
+class RuntimeType {
+    private int $runtimeType; // json:runtimeType Required
+
+    /**
+     * @param int $runtimeType
+     */
+    public function __construct(int $runtimeType) {
+        $this->runtimeType = $runtimeType;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromRuntimeType(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toRuntimeType(): int {
+        if (RuntimeType::validateRuntimeType($this->runtimeType))  {
+            return $this->runtimeType; /*int*/
+        }
+        throw new Exception('never get to this RuntimeType::runtimeType');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateRuntimeType(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getRuntimeType(): int {
+        if (RuntimeType::validateRuntimeType($this->runtimeType))  {
+            return $this->runtimeType;
+        }
+        throw new Exception('never get to getRuntimeType RuntimeType::runtimeType');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleRuntimeType(): int {
+        return 31; /*31:runtimeType*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return RuntimeType::validateRuntimeType($this->runtimeType);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'runtimeType'} = $this->toRuntimeType();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return RuntimeType
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): RuntimeType {
+        if (!property_exists($obj, 'runtimeType')) {
+            throw new Exception("Missing required property");
+        }
+        return new RuntimeType(
+         RuntimeType::fromRuntimeType($obj->{'runtimeType'})
+        );
+    }
+
+    /**
+     * @return RuntimeType
+     */
+    public static function sample(): RuntimeType {
+        return new RuntimeType(
+         RuntimeType::sampleRuntimeType()
+        );
+    }
+}
+
 // This is an autogenerated file:S
 
 class S {
@@ -40722,6 +41257,107 @@ class ToJSON {
     }
 }
 
+// This is an autogenerated file:ToString
+
+class ToString {
+    private int $toString; // json:toString Required
+
+    /**
+     * @param int $toString
+     */
+    public function __construct(int $toString) {
+        $this->toString = $toString;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromToString(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toToString(): int {
+        if (ToString::validateToString($this->toString))  {
+            return $this->toString; /*int*/
+        }
+        throw new Exception('never get to this ToString::toString');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateToString(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getToString(): int {
+        if (ToString::validateToString($this->toString))  {
+            return $this->toString;
+        }
+        throw new Exception('never get to getToString ToString::toString');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleToString(): int {
+        return 31; /*31:toString*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return ToString::validateToString($this->toString);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'toString'} = $this->toToString();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return ToString
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): ToString {
+        if (!property_exists($obj, 'toString')) {
+            throw new Exception("Missing required property");
+        }
+        return new ToString(
+         ToString::fromToString($obj->{'toString'})
+        );
+    }
+
+    /**
+     * @return ToString
+     */
+    public static function sample(): ToString {
+        return new ToString(
+         ToString::sampleToString()
+        );
+    }
+}
+
 // This is an autogenerated file:TopLevelClass
 
 class TopLevelClass {
diff --git a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
index 313acdb..9250017 100644
--- a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
+++ b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
@@ -1668,6 +1668,7 @@ class Obj2 {
     Goto             goto;              // json: "goto"
     Guard            guard;             // json: "guard"
     HasOwnProperty   has_own_property;  // json: "hasOwnProperty"
+    HashCode         hash_code;         // json: "hashCode"
     Id               id;                // json: "id"
     Imp              imp;               // json: "IMP"
     Implements       implements;        // json: "implements"
@@ -1737,6 +1738,7 @@ class Obj2 {
             "goto" : goto,
             "guard" : guard,
             "hasOwnProperty" : has_own_property,
+            "hashCode" : hash_code,
             "id" : id,
             "IMP" : imp,
             "implements" : implements,
@@ -1813,6 +1815,7 @@ Obj2 Obj2_from_JSON(mixed json) {
     retval.goto = json["goto"];
     retval.guard = json["guard"];
     retval.has_own_property = json["hasOwnProperty"];
+    retval.hash_code = json["hashCode"];
     retval.id = json["id"];
     retval.imp = json["IMP"];
     retval.implements = json["implements"];
@@ -2622,6 +2625,27 @@ HasOwnProperty HasOwnProperty_from_JSON(mixed json) {
     return retval;
 }
 
+class HashCode {
+    int hash_code; // json: "hashCode"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "hashCode" : hash_code,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+HashCode HashCode_from_JSON(mixed json) {
+    HashCode retval = HashCode();
+
+    if (!intp(json["hashCode"])) error("Expected integer");
+    retval.hash_code = json["hashCode"];
+
+    return retval;
+}
+
 class Id {
     int id; // json: "id"
 
@@ -3239,6 +3263,7 @@ class Obj3 {
     Newtonsoft               newtonsoft;                 // json: "newtonsoft"
     Nil                      nil;                        // json: "nil"
     No                       no;                         // json: "NO"
+    NoSuchMethod             no_such_method;             // json: "noSuchMethod"
     Noexcept                 noexcept;                   // json: "noexcept"
     Nonatomic                nonatomic;                  // json: "nonatomic"
     None                     none;                       // json: "None"
@@ -3308,6 +3333,7 @@ class Obj3 {
             "newtonsoft" : newtonsoft,
             "nil" : nil,
             "NO" : no,
+            "noSuchMethod" : no_such_method,
             "noexcept" : noexcept,
             "nonatomic" : nonatomic,
             "None" : none,
@@ -3384,6 +3410,7 @@ Obj3 Obj3_from_JSON(mixed json) {
     retval.newtonsoft = json["newtonsoft"];
     retval.nil = json["nil"];
     retval.no = json["NO"];
+    retval.no_such_method = json["noSuchMethod"];
     retval.noexcept = json["noexcept"];
     retval.nonatomic = json["nonatomic"];
     retval.none = json["None"];
@@ -3993,6 +4020,27 @@ No No_from_JSON(mixed json) {
     return retval;
 }
 
+class NoSuchMethod {
+    int no_such_method; // json: "noSuchMethod"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "noSuchMethod" : no_such_method,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+NoSuchMethod NoSuchMethod_from_JSON(mixed json) {
+    NoSuchMethod retval = NoSuchMethod();
+
+    if (!intp(json["noSuchMethod"])) error("Expected integer");
+    retval.no_such_method = json["noSuchMethod"];
+
+    return retval;
+}
+
 class Noexcept {
     int noexcept; // json: "noexcept"
 
@@ -4818,6 +4866,7 @@ class Obj4 {
     Retain          retain;           // json: "retain"
     Rethrows        rethrows;         // json: "rethrows"
     Right           right;            // json: "right"
+    RuntimeType     runtime_type;     // json: "runtimeType"
     S               s;                // json: "s"
     Sbyte           sbyte;            // json: "sbyte"
     Sealed          sealed;           // json: "sealed"
@@ -4846,6 +4895,7 @@ class Obj4 {
     Throw           throw;            // json: "throw"
     Throws          throws;           // json: "throws"
     ToJson          to_json;          // json: "to_json"
+    ToString        to_string;        // json: "toString"
     TopLevelClass   top_level;        // json: "top_level"
     Transient       transient;        // json: "transient"
     True            true;             // json: "True"
@@ -4887,6 +4937,7 @@ class Obj4 {
             "retain" : retain,
             "rethrows" : rethrows,
             "right" : right,
+            "runtimeType" : runtime_type,
             "s" : s,
             "sbyte" : sbyte,
             "sealed" : sealed,
@@ -4915,6 +4966,7 @@ class Obj4 {
             "throw" : throw,
             "throws" : throws,
             "to_json" : to_json,
+            "toString" : to_string,
             "top_level" : top_level,
             "transient" : transient,
             "True" : true,
@@ -4963,6 +5015,7 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.retain = json["retain"];
     retval.rethrows = json["rethrows"];
     retval.right = json["right"];
+    retval.runtime_type = json["runtimeType"];
     retval.s = json["s"];
     retval.sbyte = json["sbyte"];
     retval.sealed = json["sealed"];
@@ -4991,6 +5044,7 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.throw = json["throw"];
     retval.throws = json["throws"];
     retval.to_json = json["to_json"];
+    retval.to_string = json["toString"];
     retval.top_level = json["top_level"];
     retval.transient = json["transient"];
     retval.true = json["True"];
@@ -5532,6 +5586,27 @@ Right Right_from_JSON(mixed json) {
     return retval;
 }
 
+class RuntimeType {
+    int runtime_type; // json: "runtimeType"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "runtimeType" : runtime_type,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+RuntimeType RuntimeType_from_JSON(mixed json) {
+    RuntimeType retval = RuntimeType();
+
+    if (!intp(json["runtimeType"])) error("Expected integer");
+    retval.runtime_type = json["runtimeType"];
+
+    return retval;
+}
+
 class S {
     int s; // json: "s"
 
@@ -6120,6 +6195,27 @@ ToJson ToJson_from_JSON(mixed json) {
     return retval;
 }
 
+class ToString {
+    int to_string; // json: "toString"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "toString" : to_string,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+ToString ToString_from_JSON(mixed json) {
+    ToString retval = ToString();
+
+    if (!intp(json["toString"])) error("Expected integer");
+    retval.to_string = json["toString"];
+
+    return retval;
+}
+
 class TopLevelClass {
     int top_level; // json: "top_level"
 
diff --git a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
index f68c212..da154df 100644
--- a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py
+++ b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
@@ -1858,6 +1858,22 @@ class HasOwnProperty:
         return result
 
 
+@dataclass
+class HashCode:
+    hash_code: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'HashCode':
+        assert isinstance(obj, dict)
+        hash_code = from_int(obj.get("hashCode"))
+        return HashCode(hash_code)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["hashCode"] = from_int(self.hash_code)
+        return result
+
+
 @dataclass
 class ID:
     id: int
@@ -2359,6 +2375,7 @@ class Obj2:
     goto: Goto
     guard: Guard
     has_own_property: HasOwnProperty
+    hash_code: HashCode
     id: ID
     obj2_if: If
     implements: Implements
@@ -2429,6 +2446,7 @@ class Obj2:
         goto = Goto.from_dict(obj.get("goto"))
         guard = Guard.from_dict(obj.get("guard"))
         has_own_property = HasOwnProperty.from_dict(obj.get("hasOwnProperty"))
+        hash_code = HashCode.from_dict(obj.get("hashCode"))
         id = ID.from_dict(obj.get("id"))
         obj2_if = If.from_dict(obj.get("if"))
         implements = Implements.from_dict(obj.get("implements"))
@@ -2444,7 +2462,7 @@ class Obj2:
         obj2_int = Int.from_dict(obj.get("int"))
         interface = Interface.from_dict(obj.get("interface"))
         internal = Internal.from_dict(obj.get("internal"))
-        return Obj2(false, imp, obj2_def, default, defer, deinit, obj2_del, delegate, delete, obj2_dict, dictionary, did_set, do, double, dummy, dynamic, dynamic_cast, obj2_elif, obj2_else, encode_quick_type, enum, equality_contract, event, obj2_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, obj2_false, fileprivate, final, obj2_finally, fixed, obj2_float, obj2_for, foreach, friend, obj2_from, from_json, func, function, get, obj2_global, go, goto, guard, has_own_property, id, obj2_if, implements, implicit, obj2_import, obj2_in, indirect, infix, init, inline, inout, instanceof, obj2_int, interface, internal)
+        return Obj2(false, imp, obj2_def, default, defer, deinit, obj2_del, delegate, delete, obj2_dict, dictionary, did_set, do, double, dummy, dynamic, dynamic_cast, obj2_elif, obj2_else, encode_quick_type, enum, equality_contract, event, obj2_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, obj2_false, fileprivate, final, obj2_finally, fixed, obj2_float, obj2_for, foreach, friend, obj2_from, from_json, func, function, get, obj2_global, go, goto, guard, has_own_property, hash_code, id, obj2_if, implements, implicit, obj2_import, obj2_in, indirect, infix, init, inline, inout, instanceof, obj2_int, interface, internal)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -2499,6 +2517,7 @@ class Obj2:
         result["goto"] = to_class(Goto, self.goto)
         result["guard"] = to_class(Guard, self.guard)
         result["hasOwnProperty"] = to_class(HasOwnProperty, self.has_own_property)
+        result["hashCode"] = to_class(HashCode, self.hash_code)
         result["id"] = to_class(ID, self.id)
         result["if"] = to_class(If, self.obj2_if)
         result["implements"] = to_class(Implements, self.implements)
@@ -2933,6 +2952,22 @@ class No:
         return result
 
 
+@dataclass
+class NoSuchMethod:
+    no_such_method: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'NoSuchMethod':
+        assert isinstance(obj, dict)
+        no_such_method = from_int(obj.get("noSuchMethod"))
+        return NoSuchMethod(no_such_method)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["noSuchMethod"] = from_int(self.no_such_method)
+        return result
+
+
 @dataclass
 class Noexcept:
     noexcept: int
@@ -3592,6 +3627,7 @@ class Obj3:
     new: New
     newtonsoft: Newtonsoft
     nil: Nil
+    no_such_method: NoSuchMethod
     noexcept: Noexcept
     nonatomic: Nonatomic
     obj3_none: Obj3None
@@ -3662,6 +3698,7 @@ class Obj3:
         new = New.from_dict(obj.get("new"))
         newtonsoft = Newtonsoft.from_dict(obj.get("newtonsoft"))
         nil = Nil.from_dict(obj.get("nil"))
+        no_such_method = NoSuchMethod.from_dict(obj.get("noSuchMethod"))
         noexcept = Noexcept.from_dict(obj.get("noexcept"))
         nonatomic = Nonatomic.from_dict(obj.get("nonatomic"))
         obj3_none = Obj3None.from_dict(obj.get("none"))
@@ -3695,7 +3732,7 @@ class Obj3:
         private = Private.from_dict(obj.get("private"))
         protected = Protected.from_dict(obj.get("protected"))
         obj3_protocol = ProtocolClass.from_dict(obj.get("protocol"))
-        return Obj3(no, ns_string, null, none, protocol, dummy, obj3_is, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, obj3_lambda, lazy, left, let, list, lock, long, map, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, noexcept, nonatomic, obj3_none, obj3_nonlocal, nonmutating, obj3_not, not_eq, obj3_null, nullptr, number, object, of, oneway, open, operator, optional, obj3_or, or_eq, out, override, package, params, obj3_pass, port, postfix, precedence, prefix, obj3_print, print_members, printf, private, protected, obj3_protocol)
+        return Obj3(no, ns_string, null, none, protocol, dummy, obj3_is, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, obj3_lambda, lazy, left, let, list, lock, long, map, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, no_such_method, noexcept, nonatomic, obj3_none, obj3_nonlocal, nonmutating, obj3_not, not_eq, obj3_null, nullptr, number, object, of, oneway, open, operator, optional, obj3_or, or_eq, out, override, package, params, obj3_pass, port, postfix, precedence, prefix, obj3_print, print_members, printf, private, protected, obj3_protocol)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -3732,6 +3769,7 @@ class Obj3:
         result["new"] = to_class(New, self.new)
         result["newtonsoft"] = to_class(Newtonsoft, self.newtonsoft)
         result["nil"] = to_class(Nil, self.nil)
+        result["noSuchMethod"] = to_class(NoSuchMethod, self.no_such_method)
         result["noexcept"] = to_class(Noexcept, self.noexcept)
         result["nonatomic"] = to_class(Nonatomic, self.nonatomic)
         result["none"] = to_class(Obj3None, self.obj3_none)
@@ -4120,6 +4158,22 @@ class Right:
         return result
 
 
+@dataclass
+class RuntimeType:
+    runtime_type: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'RuntimeType':
+        assert isinstance(obj, dict)
+        runtime_type = from_int(obj.get("runtimeType"))
+        return RuntimeType(runtime_type)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["runtimeType"] = from_int(self.runtime_type)
+        return result
+
+
 @dataclass
 class S:
     s: int
@@ -4600,6 +4654,22 @@ class ToJSON:
         return result
 
 
+@dataclass
+class ToString:
+    to_string: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'ToString':
+        assert isinstance(obj, dict)
+        to_string = from_int(obj.get("toString"))
+        return ToString(to_string)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["toString"] = from_int(self.to_string)
+        return result
+
+
 @dataclass
 class TopLevelClass:
     top_level: int
@@ -4832,6 +4902,7 @@ class Obj4:
     rethrows: Rethrows
     obj4_return: Return
     right: Right
+    runtime_type: RuntimeType
     s: S
     sbyte: Sbyte
     sealed: Sealed
@@ -4861,6 +4932,7 @@ class Obj4:
     thread_local: ThreadLocal
     throw: Throw
     throws: Throws
+    to_string: ToString
     to_json: ToJSON
     top_level: TopLevelClass
     transient: Transient
@@ -4902,6 +4974,7 @@ class Obj4:
         rethrows = Rethrows.from_dict(obj.get("rethrows"))
         obj4_return = Return.from_dict(obj.get("return"))
         right = Right.from_dict(obj.get("right"))
+        runtime_type = RuntimeType.from_dict(obj.get("runtimeType"))
         s = S.from_dict(obj.get("s"))
         sbyte = Sbyte.from_dict(obj.get("sbyte"))
         sealed = Sealed.from_dict(obj.get("sealed"))
@@ -4931,6 +5004,7 @@ class Obj4:
         thread_local = ThreadLocal.from_dict(obj.get("thread_local"))
         throw = Throw.from_dict(obj.get("throw"))
         throws = Throws.from_dict(obj.get("throws"))
+        to_string = ToString.from_dict(obj.get("toString"))
         to_json = ToJSON.from_dict(obj.get("to_json"))
         top_level = TopLevelClass.from_dict(obj.get("top_level"))
         transient = Transient.from_dict(obj.get("transient"))
@@ -4946,7 +5020,7 @@ class Obj4:
         ulong = Ulong.from_dict(obj.get("ulong"))
         unchecked = Unchecked.from_dict(obj.get("unchecked"))
         undefined = Undefined.from_dict(obj.get("undefined"))
-        return Obj4(sel, obj4_self, true, type, dummy, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, obj4_return, right, s, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_json, top_level, transient, obj4_true, obj4_try, obj4_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined)
+        return Obj4(sel, obj4_self, true, type, dummy, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, obj4_return, right, runtime_type, s, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_string, to_json, top_level, transient, obj4_true, obj4_try, obj4_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -4972,6 +5046,7 @@ class Obj4:
         result["rethrows"] = to_class(Rethrows, self.rethrows)
         result["return"] = to_class(Return, self.obj4_return)
         result["right"] = to_class(Right, self.right)
+        result["runtimeType"] = to_class(RuntimeType, self.runtime_type)
         result["s"] = to_class(S, self.s)
         result["sbyte"] = to_class(Sbyte, self.sbyte)
         result["sealed"] = to_class(Sealed, self.sealed)
@@ -5001,6 +5076,7 @@ class Obj4:
         result["thread_local"] = to_class(ThreadLocal, self.thread_local)
         result["throw"] = to_class(Throw, self.throw)
         result["throws"] = to_class(Throws, self.throws)
+        result["toString"] = to_class(ToString, self.to_string)
         result["to_json"] = to_class(ToJSON, self.to_json)
         result["top_level"] = to_class(TopLevelClass, self.top_level)
         result["transient"] = to_class(Transient, self.transient)
diff --git a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
index d376988..7c91e2d 100644
--- a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
+++ b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
@@ -2914,6 +2914,31 @@ class HasOwnProperty < Dry::Struct
   end
 end
 
+class HashCode < Dry::Struct
+  attribute :hash_code, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      hash_code: d.fetch("hashCode"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "hashCode" => hash_code,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class ID < Dry::Struct
   attribute :id, Types::Integer
 
@@ -3533,6 +3558,7 @@ class Obj2 < Dry::Struct
   attribute :goto,              Goto
   attribute :guard,             Guard
   attribute :has_own_property,  HasOwnProperty
+  attribute :hash_code,         HashCode
   attribute :id,                ID
   attribute :imp,               Imp
   attribute :implements,        Implements
@@ -3603,6 +3629,7 @@ class Obj2 < Dry::Struct
       goto:              Goto.from_dynamic!(d.fetch("goto")),
       guard:             Guard.from_dynamic!(d.fetch("guard")),
       has_own_property:  HasOwnProperty.from_dynamic!(d.fetch("hasOwnProperty")),
+      hash_code:         HashCode.from_dynamic!(d.fetch("hashCode")),
       id:                ID.from_dynamic!(d.fetch("id")),
       imp:               Imp.from_dynamic!(d.fetch("IMP")),
       implements:        Implements.from_dynamic!(d.fetch("implements")),
@@ -3678,6 +3705,7 @@ class Obj2 < Dry::Struct
       "goto"              => goto.to_dynamic,
       "guard"             => guard.to_dynamic,
       "hasOwnProperty"    => has_own_property.to_dynamic,
+      "hashCode"          => hash_code.to_dynamic,
       "id"                => id.to_dynamic,
       "IMP"               => imp.to_dynamic,
       "implements"        => implements.to_dynamic,
@@ -4309,6 +4337,31 @@ class No < Dry::Struct
   end
 end
 
+class NoSuchMethod < Dry::Struct
+  attribute :no_such_method, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      no_such_method: d.fetch("noSuchMethod"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "noSuchMethod" => no_such_method,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Noexcept < Dry::Struct
   attribute :noexcept, Types::Integer
 
@@ -5360,6 +5413,7 @@ class Obj3 < Dry::Struct
   attribute :native,                     Native
   attribute :newtonsoft,                 Newtonsoft
   attribute :no,                         No
+  attribute :no_such_method,             NoSuchMethod
   attribute :noexcept,                   Noexcept
   attribute :nonatomic,                  Nonatomic
   attribute :none,                       None
@@ -5430,6 +5484,7 @@ class Obj3 < Dry::Struct
       native:                     Native.from_dynamic!(d.fetch("native")),
       newtonsoft:                 Newtonsoft.from_dynamic!(d.fetch("newtonsoft")),
       no:                         No.from_dynamic!(d.fetch("NO")),
+      no_such_method:             NoSuchMethod.from_dynamic!(d.fetch("noSuchMethod")),
       noexcept:                   Noexcept.from_dynamic!(d.fetch("noexcept")),
       nonatomic:                  Nonatomic.from_dynamic!(d.fetch("nonatomic")),
       none:                       None.from_dynamic!(d.fetch("None")),
@@ -5505,6 +5560,7 @@ class Obj3 < Dry::Struct
       "native"                     => native.to_dynamic,
       "newtonsoft"                 => newtonsoft.to_dynamic,
       "NO"                         => no.to_dynamic,
+      "noSuchMethod"               => no_such_method.to_dynamic,
       "noexcept"                   => noexcept.to_dynamic,
       "nonatomic"                  => nonatomic.to_dynamic,
       "None"                       => none.to_dynamic,
@@ -6229,6 +6285,31 @@ class Right < Dry::Struct
   end
 end
 
+class RuntimeType < Dry::Struct
+  attribute :runtime_type, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      runtime_type: d.fetch("runtimeType"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "runtimeType" => runtime_type,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class S < Dry::Struct
   attribute :s, Types::Integer
 
@@ -6854,6 +6935,31 @@ class Throws < Dry::Struct
   end
 end
 
+class ToString < Dry::Struct
+  attribute :to_string, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      to_string: d.fetch("toString"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "toString" => to_string,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class TopLevelClass < Dry::Struct
   attribute :top_level, Types::Integer
 
@@ -7208,6 +7314,7 @@ class Obj4 < Dry::Struct
   attribute :retain,           Retain
   attribute :rethrows,         Rethrows
   attribute :right,            Right
+  attribute :runtime_type,     RuntimeType
   attribute :s,                S
   attribute :sbyte,            Sbyte
   attribute :sealed,           Sealed
@@ -7233,6 +7340,7 @@ class Obj4 < Dry::Struct
   attribute :this,             This
   attribute :thread_local,     ThreadLocal
   attribute :throws,           Throws
+  attribute :to_string,        ToString
   attribute :top_level,        TopLevelClass
   attribute :transient,        Transient
   attribute :true_1,           Obj4True
@@ -7278,6 +7386,7 @@ class Obj4 < Dry::Struct
       retain:           Retain.from_dynamic!(d.fetch("retain")),
       rethrows:         Rethrows.from_dynamic!(d.fetch("rethrows")),
       right:            Right.from_dynamic!(d.fetch("right")),
+      runtime_type:     RuntimeType.from_dynamic!(d.fetch("runtimeType")),
       s:                S.from_dynamic!(d.fetch("s")),
       sbyte:            Sbyte.from_dynamic!(d.fetch("sbyte")),
       sealed:           Sealed.from_dynamic!(d.fetch("sealed")),
@@ -7303,6 +7412,7 @@ class Obj4 < Dry::Struct
       this:             This.from_dynamic!(d.fetch("this")),
       thread_local:     ThreadLocal.from_dynamic!(d.fetch("thread_local")),
       throws:           Throws.from_dynamic!(d.fetch("throws")),
+      to_string:        ToString.from_dynamic!(d.fetch("toString")),
       top_level:        TopLevelClass.from_dynamic!(d.fetch("top_level")),
       transient:        Transient.from_dynamic!(d.fetch("transient")),
       true_1:           Obj4True.from_dynamic!(d.fetch("true")),
@@ -7353,6 +7463,7 @@ class Obj4 < Dry::Struct
       "retain"           => retain.to_dynamic,
       "rethrows"         => rethrows.to_dynamic,
       "right"            => right.to_dynamic,
+      "runtimeType"      => runtime_type.to_dynamic,
       "s"                => s.to_dynamic,
       "sbyte"            => sbyte.to_dynamic,
       "sealed"           => sealed.to_dynamic,
@@ -7378,6 +7489,7 @@ class Obj4 < Dry::Struct
       "this"             => this.to_dynamic,
       "thread_local"     => thread_local.to_dynamic,
       "throws"           => throws.to_dynamic,
+      "toString"         => to_string.to_dynamic,
       "top_level"        => top_level.to_dynamic,
       "transient"        => transient.to_dynamic,
       "true"             => true_1.to_dynamic,
diff --git a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
index ce136b7..990e94d 100644
--- a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
+++ b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
@@ -522,6 +522,7 @@ pub struct Obj1Bool {
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
 pub struct Obj2 {
     pub def: Def,
 
@@ -539,7 +540,6 @@ pub struct Obj2 {
 
     pub dictionary: Dictionary,
 
-    #[serde(rename = "didSet")]
     pub did_set: DidSet,
 
     pub double: Double,
@@ -548,13 +548,14 @@ pub struct Obj2 {
 
     pub dynamic: Dynamic,
 
+    #[serde(rename = "dynamic_cast")]
     pub dynamic_cast: DynamicCast,
 
     pub elif: Elif,
 
+    #[serde(rename = "encode_quick_type")]
     pub encode_quick_type: EncodeQuickType,
 
-    #[serde(rename = "equalityContract")]
     pub equality_contract: EqualityContract,
 
     pub event: Event,
@@ -589,6 +590,7 @@ pub struct Obj2 {
 
     pub from: From,
 
+    #[serde(rename = "from_json")]
     pub from_json: FromJson,
 
     pub func: Func,
@@ -605,9 +607,10 @@ pub struct Obj2 {
 
     pub guard: Guard,
 
-    #[serde(rename = "hasOwnProperty")]
     pub has_own_property: HasOwnProperty,
 
+    pub hash_code: HashCode,
+
     pub id: Id,
 
     #[serde(rename = "IMP")]
@@ -874,6 +877,12 @@ pub struct HasOwnProperty {
     pub has_own_property: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct HashCode {
+    pub hash_code: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Id {
     pub id: i64,
@@ -1071,6 +1080,9 @@ pub struct Obj3 {
     #[serde(rename = "NO")]
     pub no: No,
 
+    #[serde(rename = "noSuchMethod")]
+    pub no_such_method: NoSuchMethod,
+
     pub noexcept: Noexcept,
 
     pub nonatomic: Nonatomic,
@@ -1294,6 +1306,12 @@ pub struct No {
     pub no: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct NoSuchMethod {
+    pub no_such_method: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Noexcept {
     pub noexcept: i64,
@@ -1565,6 +1583,9 @@ pub struct Obj4 {
 
     pub right: Right,
 
+    #[serde(rename = "runtimeType")]
+    pub runtime_type: RuntimeType,
+
     pub s: S,
 
     pub sbyte: Sbyte,
@@ -1618,6 +1639,9 @@ pub struct Obj4 {
 
     pub to_json: ToJson,
 
+    #[serde(rename = "toString")]
+    pub to_string: ToString,
+
     pub top_level: TopLevelClass,
 
     pub transient: Transient,
@@ -1797,6 +1821,12 @@ pub struct Right {
     pub right: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct RuntimeType {
+    pub runtime_type: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct S {
     pub s: i64,
@@ -1928,6 +1958,12 @@ pub struct ToJson {
     pub to_json: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ToString {
+    pub to_string: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct TopLevelClass {
     pub top_level: i64,
diff --git a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index 7af7235..a97ee4f 100644
--- a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -413,6 +413,7 @@ case class Obj2 (
     val goto : Goto,
     val guard : Guard,
     val hasOwnProperty : HasOwnProperty,
+    val hashCodeValue : HashCode,
     val id : ID,
     val IMP : Imp,
     val implements : Implements,
@@ -440,7 +441,16 @@ case class Obj2 (
     val `implicit` : Implicit,
     val `import` : Import,
     val `false` : FalseClass
-) derives Encoder.AsObject, Decoder
+)
+
+object Obj2:
+    given io.circe.derivation.Configuration =
+        io.circe.derivation.Configuration.default.withTransformMemberNames(
+            io.circe.derivation.renaming.replaceWith(
+                "hashCodeValue" -> "hashCode"
+            )
+        )
+    given io.circe.Codec.AsObject[Obj2] = io.circe.derivation.ConfiguredCodec.derived
 
 case class Default (
     val default : Long
@@ -594,6 +604,19 @@ case class HasOwnProperty (
     val hasOwnProperty : Long
 ) derives Encoder.AsObject, Decoder
 
+case class HashCode (
+    val hashCodeValue : Long
+)
+
+object HashCode:
+    given io.circe.derivation.Configuration =
+        io.circe.derivation.Configuration.default.withTransformMemberNames(
+            io.circe.derivation.renaming.replaceWith(
+                "hashCodeValue" -> "hashCode"
+            )
+        )
+    given io.circe.Codec.AsObject[HashCode] = io.circe.derivation.ConfiguredCodec.derived
+
 case class ID (
     val id : Long
 ) derives Encoder.AsObject, Decoder
@@ -730,6 +753,7 @@ case class Obj3 (
     val newtonsoft : Newtonsoft,
     val nil : Nil,
     val NO : No,
+    val noSuchMethod : NoSuchMethod,
     val noexcept : Noexcept,
     val nonatomic : Nonatomic,
     val None : NoneClass,
@@ -875,6 +899,10 @@ case class No (
     val NO : Long
 ) derives Encoder.AsObject, Decoder
 
+case class NoSuchMethod (
+    val noSuchMethod : Long
+) derives Encoder.AsObject, Decoder
+
 case class Noexcept (
     val noexcept : Long
 ) derives Encoder.AsObject, Decoder
@@ -1061,6 +1089,7 @@ case class Obj4 (
     val retain : Retain,
     val rethrows : Rethrows,
     val right : Right,
+    val runtimeType : RuntimeType,
     val s : S,
     val sbyte : Sbyte,
     val SEL : Sel,
@@ -1087,6 +1116,7 @@ case class Obj4 (
     val thread_local : ThreadLocal,
     val throws : Throws,
     val to_json : ToJSON,
+    val toStringValue : ToString,
     val top_level : TopLevelClass,
     val transient : Transient,
     val typealias : Typealias,
@@ -1104,7 +1134,8 @@ object Obj4:
     given io.circe.derivation.Configuration =
         io.circe.derivation.Configuration.default.withTransformMemberNames(
             io.circe.derivation.renaming.replaceWith(
-                "synchronizedValue" -> "synchronized"
+                "synchronizedValue" -> "synchronized",
+                "toStringValue" -> "toString"
             )
         )
     given io.circe.Codec.AsObject[Obj4] = io.circe.derivation.ConfiguredCodec.derived
@@ -1221,6 +1252,10 @@ case class Right (
     val right : Long
 ) derives Encoder.AsObject, Decoder
 
+case class RuntimeType (
+    val runtimeType : Long
+) derives Encoder.AsObject, Decoder
+
 case class S (
     val s : Long
 ) derives Encoder.AsObject, Decoder
@@ -1334,6 +1369,19 @@ case class ToJSON (
     val to_json : Long
 ) derives Encoder.AsObject, Decoder
 
+case class ToString (
+    val toStringValue : Long
+)
+
+object ToString:
+    given io.circe.derivation.Configuration =
+        io.circe.derivation.Configuration.default.withTransformMemberNames(
+            io.circe.derivation.renaming.replaceWith(
+                "toStringValue" -> "toString"
+            )
+        )
+    given io.circe.Codec.AsObject[ToString] = io.circe.derivation.ConfiguredCodec.derived
+
 case class TopLevelClass (
     val top_level : Long
 ) derives Encoder.AsObject, Decoder
diff --git a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index 044154f..3bfcf19 100644
--- a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -449,6 +449,8 @@ case class Obj2 (
     val goto : Goto,
     val guard : Guard,
     val hasOwnProperty : HasOwnProperty,
+    @upickle.implicits.key("hashCode")
+    val hashCodeValue : HashCode,
     val id : ID,
     val IMP : Imp,
     val implements : Implements,
@@ -630,6 +632,11 @@ case class HasOwnProperty (
     val hasOwnProperty : Long
 ) derives OptionPickler.ReadWriter
 
+case class HashCode (
+    @upickle.implicits.key("hashCode")
+    val hashCodeValue : Long
+) derives OptionPickler.ReadWriter
+
 case class ID (
     val id : Long
 ) derives OptionPickler.ReadWriter
@@ -766,6 +773,7 @@ case class Obj3 (
     val newtonsoft : Newtonsoft,
     val nil : Nil,
     val NO : No,
+    val noSuchMethod : NoSuchMethod,
     val noexcept : Noexcept,
     val nonatomic : Nonatomic,
     val None : NoneClass,
@@ -911,6 +919,10 @@ case class No (
     val NO : Long
 ) derives OptionPickler.ReadWriter
 
+case class NoSuchMethod (
+    val noSuchMethod : Long
+) derives OptionPickler.ReadWriter
+
 case class Noexcept (
     val noexcept : Long
 ) derives OptionPickler.ReadWriter
@@ -1097,6 +1109,7 @@ case class Obj4 (
     val retain : Retain,
     val rethrows : Rethrows,
     val right : Right,
+    val runtimeType : RuntimeType,
     val s : S,
     val sbyte : Sbyte,
     val SEL : Sel,
@@ -1124,6 +1137,8 @@ case class Obj4 (
     val thread_local : ThreadLocal,
     val throws : Throws,
     val to_json : ToJSON,
+    @upickle.implicits.key("toString")
+    val toStringValue : ToString,
     val top_level : TopLevelClass,
     val transient : Transient,
     val typealias : Typealias,
@@ -1249,6 +1264,10 @@ case class Right (
     val right : Long
 ) derives OptionPickler.ReadWriter
 
+case class RuntimeType (
+    val runtimeType : Long
+) derives OptionPickler.ReadWriter
+
 case class S (
     val s : Long
 ) derives OptionPickler.ReadWriter
@@ -1354,6 +1373,11 @@ case class ToJSON (
     val to_json : Long
 ) derives OptionPickler.ReadWriter
 
+case class ToString (
+    @upickle.implicits.key("toString")
+    val toStringValue : Long
+) derives OptionPickler.ReadWriter
+
 case class TopLevelClass (
     val top_level : Long
 ) derives OptionPickler.ReadWriter
diff --git a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
index 542e12e..38d9da6 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
@@ -3267,6 +3267,7 @@ struct Obj2: Codable {
     let go: Go
     let goto: Goto
     let hasOwnProperty: HasOwnProperty
+    let hashCode: HashCode
     let id: ID
     let imp: Imp
     let implements: Implements
@@ -3335,6 +3336,7 @@ struct Obj2: Codable {
         case go = "go"
         case goto = "goto"
         case hasOwnProperty = "hasOwnProperty"
+        case hashCode = "hashCode"
         case id = "id"
         case imp = "IMP"
         case implements = "implements"
@@ -3423,6 +3425,7 @@ extension Obj2 {
         go: Go? = nil,
         goto: Goto? = nil,
         hasOwnProperty: HasOwnProperty? = nil,
+        hashCode: HashCode? = nil,
         id: ID? = nil,
         imp: Imp? = nil,
         implements: Implements? = nil,
@@ -3491,6 +3494,7 @@ extension Obj2 {
             go: go ?? self.go,
             goto: goto ?? self.goto,
             hasOwnProperty: hasOwnProperty ?? self.hasOwnProperty,
+            hashCode: hashCode ?? self.hashCode,
             id: id ?? self.id,
             imp: imp ?? self.imp,
             implements: implements ?? self.implements,
@@ -4901,6 +4905,50 @@ extension HasOwnProperty {
     }
 }
 
+// MARK: - HashCode
+struct HashCode: Codable {
+    let hashCode: Int
+
+    enum CodingKeys: String, CodingKey {
+        case hashCode = "hashCode"
+    }
+}
+
+// MARK: HashCode convenience initializers and mutators
+
+extension HashCode {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(HashCode.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        hashCode: Int? = nil
+    ) -> HashCode {
+        return HashCode(
+            hashCode: hashCode ?? self.hashCode
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - ID
 struct ID: Codable {
     let id: Int
@@ -6421,6 +6469,7 @@ struct Obj3: Codable {
     let new: New
     let newtonsoft: Newtonsoft
     let no: No
+    let noSuchMethod: NoSuchMethod
     let noexcept: Noexcept
     let nonatomic: Nonatomic
     let none: None
@@ -6489,6 +6538,7 @@ struct Obj3: Codable {
         case new = "new"
         case newtonsoft = "newtonsoft"
         case no = "NO"
+        case noSuchMethod = "noSuchMethod"
         case noexcept = "noexcept"
         case nonatomic = "nonatomic"
         case none = "None"
@@ -6577,6 +6627,7 @@ extension Obj3 {
         new: New? = nil,
         newtonsoft: Newtonsoft? = nil,
         no: No? = nil,
+        noSuchMethod: NoSuchMethod? = nil,
         noexcept: Noexcept? = nil,
         nonatomic: Nonatomic? = nil,
         none: None? = nil,
@@ -6645,6 +6696,7 @@ extension Obj3 {
             new: new ?? self.new,
             newtonsoft: newtonsoft ?? self.newtonsoft,
             no: no ?? self.no,
+            noSuchMethod: noSuchMethod ?? self.noSuchMethod,
             noexcept: noexcept ?? self.noexcept,
             nonatomic: nonatomic ?? self.nonatomic,
             none: none ?? self.none,
@@ -7625,6 +7677,50 @@ extension No {
     }
 }
 
+// MARK: - NoSuchMethod
+struct NoSuchMethod: Codable {
+    let noSuchMethod: Int
+
+    enum CodingKeys: String, CodingKey {
+        case noSuchMethod = "noSuchMethod"
+    }
+}
+
+// MARK: NoSuchMethod convenience initializers and mutators
+
+extension NoSuchMethod {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(NoSuchMethod.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        noSuchMethod: Int? = nil
+    ) -> NoSuchMethod {
+        return NoSuchMethod(
+            noSuchMethod: noSuchMethod ?? self.noSuchMethod
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Noexcept
 struct Noexcept: Codable {
     let noexcept: Int
@@ -9596,6 +9692,7 @@ struct Obj4: Codable {
     let requires: Requires
     let restrict: Restrict
     let retain: Retain
+    let runtimeType: RuntimeType
     let s: S
     let sbyte: Sbyte
     let sealed: Sealed
@@ -9618,6 +9715,7 @@ struct Obj4: Codable {
     let this: This
     let threadLocal: ThreadLocal
     let toJSON: ToJSON
+    let toString: ToString
     let topLevel: TopLevelClass
     let transient: Transient
     let type: TypeClass
@@ -9664,6 +9762,7 @@ struct Obj4: Codable {
         case requires = "requires"
         case restrict = "restrict"
         case retain = "retain"
+        case runtimeType = "runtimeType"
         case s = "s"
         case sbyte = "sbyte"
         case sealed = "sealed"
@@ -9686,6 +9785,7 @@ struct Obj4: Codable {
         case this = "this"
         case threadLocal = "thread_local"
         case toJSON = "to_json"
+        case toString = "toString"
         case topLevel = "top_level"
         case transient = "transient"
         case type = "Type"
@@ -9752,6 +9852,7 @@ extension Obj4 {
         requires: Requires? = nil,
         restrict: Restrict? = nil,
         retain: Retain? = nil,
+        runtimeType: RuntimeType? = nil,
         s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
@@ -9774,6 +9875,7 @@ extension Obj4 {
         this: This? = nil,
         threadLocal: ThreadLocal? = nil,
         toJSON: ToJSON? = nil,
+        toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
         transient: Transient? = nil,
         type: TypeClass? = nil,
@@ -9820,6 +9922,7 @@ extension Obj4 {
             requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             retain: retain ?? self.retain,
+            runtimeType: runtimeType ?? self.runtimeType,
             s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
@@ -9842,6 +9945,7 @@ extension Obj4 {
             this: this ?? self.this,
             threadLocal: threadLocal ?? self.threadLocal,
             toJSON: toJSON ?? self.toJSON,
+            toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
             transient: transient ?? self.transient,
             type: type ?? self.type,
@@ -11273,6 +11377,50 @@ extension Retain {
     }
 }
 
+// MARK: - RuntimeType
+struct RuntimeType: Codable {
+    let runtimeType: Int
+
+    enum CodingKeys: String, CodingKey {
+        case runtimeType = "runtimeType"
+    }
+}
+
+// MARK: RuntimeType convenience initializers and mutators
+
+extension RuntimeType {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(RuntimeType.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        runtimeType: Int? = nil
+    ) -> RuntimeType {
+        return RuntimeType(
+            runtimeType: runtimeType ?? self.runtimeType
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - S
 struct S: Codable {
     let s: Int
@@ -12241,6 +12389,50 @@ extension ToJSON {
     }
 }
 
+// MARK: - ToString
+struct ToString: Codable {
+    let toString: Int
+
+    enum CodingKeys: String, CodingKey {
+        case toString = "toString"
+    }
+}
+
+// MARK: ToString convenience initializers and mutators
+
+extension ToString {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ToString.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        toString: Int? = nil
+    ) -> ToString {
+        return ToString(
+            toString: toString ?? self.toString
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - TopLevelClass
 struct TopLevelClass: Codable {
     let topLevel: Int
diff --git a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 061db9c..18531a4 100644
--- a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -397,6 +397,7 @@ export interface Obj2 {
     goto:              Goto;
     guard:             Guard;
     hasOwnProperty:    HasOwnProperty;
+    hashCode:          HashCode;
     id:                ID;
     if:                If;
     implements:        Implements;
@@ -614,6 +615,10 @@ export interface HasOwnProperty {
     hasOwnProperty: number;
 }
 
+export interface HashCode {
+    hashCode: number;
+}
+
 export interface ID {
     id: number;
 }
@@ -708,6 +713,7 @@ export interface Obj3 {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
+    noSuchMethod:               NoSuchMethod;
     noexcept:                   Noexcept;
     nonatomic:                  Nonatomic;
     none:                       NoneClass;
@@ -871,6 +877,10 @@ export interface Nil {
     nil: number;
 }
 
+export interface NoSuchMethod {
+    noSuchMethod: number;
+}
+
 export interface Noexcept {
     noexcept: number;
 }
@@ -1026,6 +1036,7 @@ export interface Obj4 {
     rethrows:         Rethrows;
     return:           Return;
     right:            Right;
+    runtimeType:      RuntimeType;
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
@@ -1055,6 +1066,7 @@ export interface Obj4 {
     thread_local:     ThreadLocal;
     throw:            Throw;
     throws:           Throws;
+    toString:         ToString;
     to_json:          ToJSON;
     top_level:        TopLevelClass;
     transient:        Transient;
@@ -1156,6 +1168,10 @@ export interface Right {
     right: number;
 }
 
+export interface RuntimeType {
+    runtimeType: number;
+}
+
 export interface S {
     s: number;
 }
@@ -1272,6 +1288,10 @@ export interface Throws {
     throws: number;
 }
 
+export interface ToString {
+    toString: number;
+}
+
 export interface ToJSON {
     to_json: number;
 }
@@ -1946,6 +1966,7 @@ const typeMap: any = {
         { json: "goto", js: "goto", typ: r("Goto") },
         { json: "guard", js: "guard", typ: r("Guard") },
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: r("HasOwnProperty") },
+        { json: "hashCode", js: "hashCode", typ: r("HashCode") },
         { json: "id", js: "id", typ: r("ID") },
         { json: "if", js: "if", typ: r("If") },
         { json: "implements", js: "implements", typ: r("Implements") },
@@ -2112,6 +2133,9 @@ const typeMap: any = {
     "HasOwnProperty": o([
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: i(0) },
     ], false),
+    "HashCode": o([
+        { json: "hashCode", js: "hashCode", typ: i(0) },
+    ], false),
     "ID": o([
         { json: "id", js: "id", typ: i(0) },
     ], false),
@@ -2191,6 +2215,7 @@ const typeMap: any = {
         { json: "new", js: "new", typ: r("New") },
         { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
         { json: "nil", js: "nil", typ: r("Nil") },
+        { json: "noSuchMethod", js: "noSuchMethod", typ: r("NoSuchMethod") },
         { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
         { json: "nonatomic", js: "nonatomic", typ: r("Nonatomic") },
         { json: "none", js: "none", typ: r("NoneClass") },
@@ -2321,6 +2346,9 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
+    "NoSuchMethod": o([
+        { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
+    ], false),
     "Noexcept": o([
         { json: "noexcept", js: "noexcept", typ: i(0) },
     ], false),
@@ -2443,6 +2471,7 @@ const typeMap: any = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "runtimeType", js: "runtimeType", typ: r("RuntimeType") },
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
@@ -2472,6 +2501,7 @@ const typeMap: any = {
         { json: "thread_local", js: "thread_local", typ: r("ThreadLocal") },
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
+        { json: "toString", js: "toString", typ: r("ToString") },
         { json: "to_json", js: "to_json", typ: r("ToJSON") },
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
@@ -2551,6 +2581,9 @@ const typeMap: any = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "RuntimeType": o([
+        { json: "runtimeType", js: "runtimeType", typ: i(0) },
+    ], false),
     "S": o([
         { json: "s", js: "s", typ: i(0) },
     ], false),
@@ -2638,6 +2671,9 @@ const typeMap: any = {
     "Throws": o([
         { json: "throws", js: "throws", typ: i(0) },
     ], false),
+    "ToString": o([
+        { json: "toString", js: "toString", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
diff --git a/base/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
index 5d68533..16f8172 100644
--- a/base/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -397,6 +397,7 @@ export type Obj2 = {
     goto:              Goto;
     guard:             Guard;
     hasOwnProperty:    HasOwnProperty;
+    hashCode:          HashCode;
     id:                ID;
     if:                If;
     implements:        Implements;
@@ -614,6 +615,10 @@ export type HasOwnProperty = {
     hasOwnProperty: number;
 }
 
+export type HashCode = {
+    hashCode: number;
+}
+
 export type ID = {
     id: number;
 }
@@ -708,6 +713,7 @@ export type Obj3 = {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
+    noSuchMethod:               NoSuchMethod;
     noexcept:                   Noexcept;
     nonatomic:                  Nonatomic;
     none:                       NoneClass;
@@ -871,6 +877,10 @@ export type Nil = {
     nil: number;
 }
 
+export type NoSuchMethod = {
+    noSuchMethod: number;
+}
+
 export type Noexcept = {
     noexcept: number;
 }
@@ -1026,6 +1036,7 @@ export type Obj4 = {
     rethrows:         Rethrows;
     return:           Return;
     right:            Right;
+    runtimeType:      RuntimeType;
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
@@ -1055,6 +1066,7 @@ export type Obj4 = {
     thread_local:     ThreadLocal;
     throw:            Throw;
     throws:           Throws;
+    toString:         ToString;
     to_json:          ToJSON;
     top_level:        TopLevelClass;
     transient:        Transient;
@@ -1156,6 +1168,10 @@ export type Right = {
     right: number;
 }
 
+export type RuntimeType = {
+    runtimeType: number;
+}
+
 export type S = {
     s: number;
 }
@@ -1272,6 +1288,10 @@ export type Throws = {
     throws: number;
 }
 
+export type ToString = {
+    toString: number;
+}
+
 export type ToJSON = {
     to_json: number;
 }
@@ -1946,6 +1966,7 @@ const typeMap: any = {
         { json: "goto", js: "goto", typ: r("Goto") },
         { json: "guard", js: "guard", typ: r("Guard") },
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: r("HasOwnProperty") },
+        { json: "hashCode", js: "hashCode", typ: r("HashCode") },
         { json: "id", js: "id", typ: r("ID") },
         { json: "if", js: "if", typ: r("If") },
         { json: "implements", js: "implements", typ: r("Implements") },
@@ -2112,6 +2133,9 @@ const typeMap: any = {
     "HasOwnProperty": o([
         { json: "hasOwnProperty", js: "hasOwnProperty", typ: i(0) },
     ], false),
+    "HashCode": o([
+        { json: "hashCode", js: "hashCode", typ: i(0) },
+    ], false),
     "ID": o([
         { json: "id", js: "id", typ: i(0) },
     ], false),
@@ -2191,6 +2215,7 @@ const typeMap: any = {
         { json: "new", js: "new", typ: r("New") },
         { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
         { json: "nil", js: "nil", typ: r("Nil") },
+        { json: "noSuchMethod", js: "noSuchMethod", typ: r("NoSuchMethod") },
         { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
         { json: "nonatomic", js: "nonatomic", typ: r("Nonatomic") },
         { json: "none", js: "none", typ: r("NoneClass") },
@@ -2321,6 +2346,9 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
+    "NoSuchMethod": o([
+        { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
+    ], false),
     "Noexcept": o([
         { json: "noexcept", js: "noexcept", typ: i(0) },
     ], false),
@@ -2443,6 +2471,7 @@ const typeMap: any = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "runtimeType", js: "runtimeType", typ: r("RuntimeType") },
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
@@ -2472,6 +2501,7 @@ const typeMap: any = {
         { json: "thread_local", js: "thread_local", typ: r("ThreadLocal") },
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
+        { json: "toString", js: "toString", typ: r("ToString") },
         { json: "to_json", js: "to_json", typ: r("ToJSON") },
         { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
         { json: "transient", js: "transient", typ: r("Transient") },
@@ -2551,6 +2581,9 @@ const typeMap: any = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "RuntimeType": o([
+        { json: "runtimeType", js: "runtimeType", typ: i(0) },
+    ], false),
     "S": o([
         { json: "s", js: "s", typ: i(0) },
     ], false),
@@ -2638,6 +2671,9 @@ const typeMap: any = {
     "Throws": o([
         { json: "throws", js: "throws", typ: i(0) },
     ], false),
+    "ToString": o([
+        { json: "toString", js: "toString", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 0f915b5..c22984d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -161,6 +161,11 @@ export class TopLevelClass extends S.Class<TopLevelClass>("TopLevelClass")({
     "top_level": S.Int,
 }) {}
 
+export class ToString extends S.Class<ToString>("ToString")({
+    "toString": S.Int,
+}) {}
+Object.defineProperty(ToString.prototype, "toString", { writable: true });
+
 export class ToJson extends S.Class<ToJson>("ToJson")({
     "to_json": S.Int,
 }) {}
@@ -285,6 +290,10 @@ export class SClass extends S.Class<SClass>("SClass")({
     "s": S.Int,
 }) {}
 
+export class RuntimeType extends S.Class<RuntimeType>("RuntimeType")({
+    "runtimeType": S.Int,
+}) {}
+
 export class Right extends S.Class<Right>("Right")({
     "right": S.Int,
 }) {}
@@ -387,6 +396,7 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "rethrows": Rethrows,
     "return": Return,
     "right": Right,
+    "runtimeType": RuntimeType,
     "s": SClass,
     "sbyte": Sbyte,
     "sealed": Sealed,
@@ -418,6 +428,7 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "throw": Throw,
     "throws": Throws,
     "to_json": ToJson,
+    "toString": ToString,
     "top_level": TopLevelClass,
     "transient": Transient,
     "True": True,
@@ -433,6 +444,7 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "unchecked": Unchecked,
     "undefined": Undefined,
 }) {}
+Object.defineProperty(Obj4.prototype, "toString", { writable: true });
 
 export class Protocol extends S.Class<Protocol>("Protocol")({
     "Protocol": S.Int,
@@ -582,6 +594,10 @@ export class Noexcept extends S.Class<Noexcept>("Noexcept")({
     "noexcept": S.Int,
 }) {}
 
+export class NoSuchMethod extends S.Class<NoSuchMethod>("NoSuchMethod")({
+    "noSuchMethod": S.Int,
+}) {}
+
 export class No extends S.Class<No>("No")({
     "NO": S.Int,
 }) {}
@@ -724,6 +740,7 @@ export class Obj3 extends S.Class<Obj3>("Obj3")({
     "newtonsoft": Newtonsoft,
     "nil": Nil,
     "NO": No,
+    "noSuchMethod": NoSuchMethod,
     "noexcept": Noexcept,
     "nonatomic": Nonatomic,
     "None": None,
@@ -831,6 +848,10 @@ export class Id extends S.Class<Id>("Id")({
     "id": S.Int,
 }) {}
 
+export class HashCode extends S.Class<HashCode>("HashCode")({
+    "hashCode": S.Int,
+}) {}
+
 export class HasOwnProperty extends S.Class<HasOwnProperty>("HasOwnProperty")({
     "hasOwnProperty": S.Int,
 }) {}
@@ -1073,6 +1094,7 @@ export class Obj2 extends S.Class<Obj2>("Obj2")({
     "goto": Goto,
     "guard": Guard,
     "hasOwnProperty": HasOwnProperty,
+    "hashCode": HashCode,
     "id": Id,
     "if": If,
     "IMP": Imp,
diff --git a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index dd2c523..470a2eb 100644
--- a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -566,6 +566,11 @@ export const HasOwnPropertySchema = z.object({
 });
 export type HasOwnProperty = z.infer<typeof HasOwnPropertySchema>;
 
+export const HashCodeSchema = z.object({
+    "hashCode": z.number().int(),
+});
+export type HashCode = z.infer<typeof HashCodeSchema>;
+
 export const IdSchema = z.object({
     "id": z.number().int(),
 });
@@ -791,6 +796,11 @@ export const NoSchema = z.object({
 });
 export type No = z.infer<typeof NoSchema>;
 
+export const NoSuchMethodSchema = z.object({
+    "noSuchMethod": z.number().int(),
+});
+export type NoSuchMethod = z.infer<typeof NoSuchMethodSchema>;
+
 export const NoexceptSchema = z.object({
     "noexcept": z.number().int(),
 });
@@ -1076,6 +1086,11 @@ export const RightSchema = z.object({
 });
 export type Right = z.infer<typeof RightSchema>;
 
+export const RuntimeTypeSchema = z.object({
+    "runtimeType": z.number().int(),
+});
+export type RuntimeType = z.infer<typeof RuntimeTypeSchema>;
+
 export const SSchema = z.object({
     "s": z.number().int(),
 });
@@ -1231,6 +1246,11 @@ export const ToJsonSchema = z.object({
 });
 export type ToJson = z.infer<typeof ToJsonSchema>;
 
+export const ToStringSchema = z.object({
+    "toString": z.number().int(),
+});
+export type ToString = z.infer<typeof ToStringSchema>;
+
 export const TopLevelClassSchema = z.object({
     "top_level": z.number().int(),
 });
@@ -1521,6 +1541,7 @@ export const Obj2Schema = z.object({
     "goto": GotoSchema,
     "guard": GuardSchema,
     "hasOwnProperty": HasOwnPropertySchema,
+    "hashCode": HashCodeSchema,
     "id": IdSchema,
     "if": IfSchema,
     "IMP": ImpSchema,
@@ -1571,6 +1592,7 @@ export const Obj3Schema = z.object({
     "newtonsoft": NewtonsoftSchema,
     "nil": NilSchema,
     "NO": NoSchema,
+    "noSuchMethod": NoSuchMethodSchema,
     "noexcept": NoexceptSchema,
     "nonatomic": NonatomicSchema,
     "None": NoneSchema,
@@ -1633,6 +1655,7 @@ export const Obj4Schema = z.object({
     "rethrows": RethrowsSchema,
     "return": ReturnSchema,
     "right": RightSchema,
+    "runtimeType": RuntimeTypeSchema,
     "s": SSchema,
     "sbyte": SbyteSchema,
     "sealed": SealedSchema,
@@ -1664,6 +1687,7 @@ export const Obj4Schema = z.object({
     "throw": ThrowSchema,
     "throws": ThrowsSchema,
     "to_json": ToJsonSchema,
+    "toString": ToStringSchema,
     "top_level": TopLevelClassSchema,
     "transient": TransientSchema,
     "True": TrueSchema,
