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 e3f4547..0b37971 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
@@ -6483,6 +6483,61 @@ void cJSON_DeleteFrom(struct From * x) {
     }
 }
 
+struct FromDict * cJSON_ParseFromDict(const char * s) {
+    struct FromDict * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetFromDictValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct FromDict * cJSON_GetFromDictValue(const cJSON * j) {
+    struct FromDict * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct FromDict)))) {
+            memset(x, 0, sizeof(struct FromDict));
+            if (!cJSON_HasObjectItem(j, "from_dict")) { cJSON_DeleteFromDict(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "from_dict")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "from_dict"))) { cJSON_DeleteFromDict(x); return NULL; }
+                x->from_dict = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "from_dict"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateFromDict(const struct FromDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "from_dict", x->from_dict);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintFromDict(const struct FromDict * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateFromDict(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteFromDict(struct FromDict * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct FromJson * cJSON_ParseFromJson(const char * s) {
     struct FromJson * x = NULL;
     if (NULL != s) {
@@ -7693,61 +7748,6 @@ void cJSON_DeleteFriend(struct Friend * x) {
     }
 }
 
-struct Goto * cJSON_ParseGoto(const char * s) {
-    struct Goto * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetGotoValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Goto * cJSON_GetGotoValue(const cJSON * j) {
-    struct Goto * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Goto)))) {
-            memset(x, 0, sizeof(struct Goto));
-            if (!cJSON_HasObjectItem(j, "goto")) { cJSON_DeleteGoto(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "goto")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "goto"))) { cJSON_DeleteGoto(x); return NULL; }
-                x->goto_goto = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "goto"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateGoto(const struct Goto * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "goto", x->goto_goto);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintGoto(const struct Goto * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateGoto(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteGoto(struct Goto * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj2False * cJSON_ParseObj2False(const char * s) {
     struct Obj2False * x = NULL;
     if (NULL != s) {
@@ -8065,6 +8065,12 @@ struct Obj2 * cJSON_GetObj2Value(const cJSON * j) {
                 x->from = cJSON_GetFromValue(cJSON_GetObjectItemCaseSensitive(j, "from"));
                 if (NULL == x->from) { cJSON_DeleteObj2(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "from_dict")) { cJSON_DeleteObj2(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "from_dict")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "from_dict"))) { cJSON_DeleteObj2(x); return NULL; }
+                x->from_dict = cJSON_GetFromDictValue(cJSON_GetObjectItemCaseSensitive(j, "from_dict"));
+                if (NULL == x->from_dict) { cJSON_DeleteObj2(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "from_json")) { cJSON_DeleteObj2(x); return NULL; }
             if (cJSON_HasObjectItem(j, "from_json")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "from_json"))) { cJSON_DeleteObj2(x); return NULL; }
@@ -8197,12 +8203,6 @@ struct Obj2 * cJSON_GetObj2Value(const cJSON * j) {
                 x->obj2_friend = cJSON_GetFriendValue(cJSON_GetObjectItemCaseSensitive(j, "friend"));
                 if (NULL == x->obj2_friend) { cJSON_DeleteObj2(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "goto")) { cJSON_DeleteObj2(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "goto")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "goto"))) { cJSON_DeleteObj2(x); return NULL; }
-                x->obj2_goto = cJSON_GetGotoValue(cJSON_GetObjectItemCaseSensitive(j, "goto"));
-                if (NULL == x->obj2_goto) { cJSON_DeleteObj2(x); return NULL; }
-            }
             if (!cJSON_HasObjectItem(j, "false")) { cJSON_DeleteObj2(x); return NULL; }
             if (cJSON_HasObjectItem(j, "false")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "false"))) { cJSON_DeleteObj2(x); return NULL; }
@@ -8259,6 +8259,7 @@ cJSON * cJSON_CreateObj2(const struct Obj2 * x) {
             cJSON_AddItemToObject(j, "foreach", cJSON_CreateForeach(x->foreach));
             cJSON_AddItemToObject(j, "FormatException", cJSON_CreateFormatException(x->format_exception));
             cJSON_AddItemToObject(j, "from", cJSON_CreateFrom(x->from));
+            cJSON_AddItemToObject(j, "from_dict", cJSON_CreateFromDict(x->from_dict));
             cJSON_AddItemToObject(j, "from_json", cJSON_CreateFromJson(x->from_json));
             cJSON_AddItemToObject(j, "func", cJSON_CreateFunc(x->func));
             cJSON_AddItemToObject(j, "function", cJSON_CreateFunction(x->function));
@@ -8281,7 +8282,6 @@ cJSON * cJSON_CreateObj2(const struct Obj2 * x) {
             cJSON_AddItemToObject(j, "float", cJSON_CreateFloat(x->obj2_float));
             cJSON_AddItemToObject(j, "for", cJSON_CreateFor(x->obj2_for));
             cJSON_AddItemToObject(j, "friend", cJSON_CreateFriend(x->obj2_friend));
-            cJSON_AddItemToObject(j, "goto", cJSON_CreateGoto(x->obj2_goto));
             cJSON_AddItemToObject(j, "false", cJSON_CreateObj2False(x->purple_false));
         }
     }
@@ -8422,6 +8422,9 @@ void cJSON_DeleteObj2(struct Obj2 * x) {
         if (NULL != x->from) {
             cJSON_DeleteFrom(x->from);
         }
+        if (NULL != x->from_dict) {
+            cJSON_DeleteFromDict(x->from_dict);
+        }
         if (NULL != x->from_json) {
             cJSON_DeleteFromJson(x->from_json);
         }
@@ -8488,9 +8491,6 @@ void cJSON_DeleteObj2(struct Obj2 * x) {
         if (NULL != x->obj2_friend) {
             cJSON_DeleteFriend(x->obj2_friend);
         }
-        if (NULL != x->obj2_goto) {
-            cJSON_DeleteGoto(x->obj2_goto);
-        }
         if (NULL != x->purple_false) {
             cJSON_DeleteObj2False(x->purple_false);
         }
@@ -11141,6 +11141,61 @@ void cJSON_DeleteMapEntry(struct MapEntry * x) {
     }
 }
 
+struct MarshalJson * cJSON_ParseMarshalJson(const char * s) {
+    struct MarshalJson * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetMarshalJsonValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct MarshalJson * cJSON_GetMarshalJsonValue(const cJSON * j) {
+    struct MarshalJson * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct MarshalJson)))) {
+            memset(x, 0, sizeof(struct MarshalJson));
+            if (!cJSON_HasObjectItem(j, "MarshalJSON")) { cJSON_DeleteMarshalJson(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "MarshalJSON")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"))) { cJSON_DeleteMarshalJson(x); return NULL; }
+                x->marshal_json = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateMarshalJson(const struct MarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "MarshalJSON", x->marshal_json);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintMarshalJson(const struct MarshalJson * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateMarshalJson(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteMarshalJson(struct MarshalJson * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct MetadataPropertyHandling * cJSON_ParseMetadataPropertyHandling(const char * s) {
     struct MetadataPropertyHandling * x = NULL;
     if (NULL != s) {
@@ -11471,6 +11526,61 @@ void cJSON_DeleteNo(struct No * x) {
     }
 }
 
+struct Goto * cJSON_ParseGoto(const char * s) {
+    struct Goto * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetGotoValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Goto * cJSON_GetGotoValue(const cJSON * j) {
+    struct Goto * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Goto)))) {
+            memset(x, 0, sizeof(struct Goto));
+            if (!cJSON_HasObjectItem(j, "goto")) { cJSON_DeleteGoto(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "goto")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "goto"))) { cJSON_DeleteGoto(x); return NULL; }
+                x->goto_goto = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "goto"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateGoto(const struct Goto * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "goto", x->goto_goto);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintGoto(const struct Goto * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateGoto(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteGoto(struct Goto * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct If * cJSON_ParseIf(const char * s) {
     struct If * x = NULL;
     if (NULL != s) {
@@ -11966,61 +12076,6 @@ void cJSON_DeleteNew(struct New * x) {
     }
 }
 
-struct Noexcept * cJSON_ParseNoexcept(const char * s) {
-    struct Noexcept * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetNoexceptValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Noexcept * cJSON_GetNoexceptValue(const cJSON * j) {
-    struct Noexcept * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Noexcept)))) {
-            memset(x, 0, sizeof(struct Noexcept));
-            if (!cJSON_HasObjectItem(j, "noexcept")) { cJSON_DeleteNoexcept(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "noexcept")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "noexcept"))) { cJSON_DeleteNoexcept(x); return NULL; }
-                x->noexcept_noexcept = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "noexcept"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateNoexcept(const struct Noexcept * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "noexcept", x->noexcept_noexcept);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintNoexcept(const struct Noexcept * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateNoexcept(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteNoexcept(struct Noexcept * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj3 * cJSON_ParseObj3(const char * s) {
     struct Obj3 * x = NULL;
     if (NULL != s) {
@@ -12331,6 +12386,12 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->map_entry = cJSON_GetMapEntryValue(cJSON_GetObjectItemCaseSensitive(j, "MapEntry"));
                 if (NULL == x->map_entry) { cJSON_DeleteObj3(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "MarshalJSON")) { cJSON_DeleteObj3(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "MarshalJSON")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"))) { cJSON_DeleteObj3(x); return NULL; }
+                x->marshal_json = cJSON_GetMarshalJsonValue(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"));
+                if (NULL == x->marshal_json) { cJSON_DeleteObj3(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "metadata_property_handling")) { cJSON_DeleteObj3(x); return NULL; }
             if (cJSON_HasObjectItem(j, "metadata_property_handling")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "metadata_property_handling"))) { cJSON_DeleteObj3(x); return NULL; }
@@ -12367,6 +12428,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, "goto")) { cJSON_DeleteObj3(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "goto")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "goto"))) { cJSON_DeleteObj3(x); return NULL; }
+                x->obj3_goto = cJSON_GetGotoValue(cJSON_GetObjectItemCaseSensitive(j, "goto"));
+                if (NULL == x->obj3_goto) { cJSON_DeleteObj3(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "if")) { cJSON_DeleteObj3(x); return NULL; }
             if (cJSON_HasObjectItem(j, "if")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "if"))) { cJSON_DeleteObj3(x); return NULL; }
@@ -12421,12 +12488,6 @@ struct Obj3 * cJSON_GetObj3Value(const cJSON * j) {
                 x->obj3_new = cJSON_GetNewValue(cJSON_GetObjectItemCaseSensitive(j, "new"));
                 if (NULL == x->obj3_new) { cJSON_DeleteObj3(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "noexcept")) { cJSON_DeleteObj3(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "noexcept")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "noexcept"))) { cJSON_DeleteObj3(x); return NULL; }
-                x->obj3_noexcept = cJSON_GetNoexceptValue(cJSON_GetObjectItemCaseSensitive(j, "noexcept"));
-                if (NULL == x->obj3_noexcept) { cJSON_DeleteObj3(x); return NULL; }
-            }
         }
     }
     return x;
@@ -12485,12 +12546,14 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "lock", cJSON_CreateLock(x->lock));
             cJSON_AddItemToObject(j, "map", cJSON_CreateMap(x->map));
             cJSON_AddItemToObject(j, "MapEntry", cJSON_CreateMapEntry(x->map_entry));
+            cJSON_AddItemToObject(j, "MarshalJSON", cJSON_CreateMarshalJson(x->marshal_json));
             cJSON_AddItemToObject(j, "metadata_property_handling", cJSON_CreateMetadataPropertyHandling(x->metadata_property_handling));
             cJSON_AddItemToObject(j, "mutating", cJSON_CreateMutating(x->mutating));
             cJSON_AddItemToObject(j, "native", cJSON_CreateNative(x->native));
             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, "goto", cJSON_CreateGoto(x->obj3_goto));
             cJSON_AddItemToObject(j, "if", cJSON_CreateIf(x->obj3_if));
             cJSON_AddItemToObject(j, "import", cJSON_CreateImport(x->obj3_import));
             cJSON_AddItemToObject(j, "inline", cJSON_CreateInline(x->obj3_inline));
@@ -12500,7 +12563,6 @@ cJSON * cJSON_CreateObj3(const struct Obj3 * x) {
             cJSON_AddItemToObject(j, "mutable", cJSON_CreateMutable(x->obj3_mutable));
             cJSON_AddItemToObject(j, "namespace", cJSON_CreateNamespace(x->obj3_namespace));
             cJSON_AddItemToObject(j, "new", cJSON_CreateNew(x->obj3_new));
-            cJSON_AddItemToObject(j, "noexcept", cJSON_CreateNoexcept(x->obj3_noexcept));
         }
     }
     return j;
@@ -12664,6 +12726,9 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->map_entry) {
             cJSON_DeleteMapEntry(x->map_entry);
         }
+        if (NULL != x->marshal_json) {
+            cJSON_DeleteMarshalJson(x->marshal_json);
+        }
         if (NULL != x->metadata_property_handling) {
             cJSON_DeleteMetadataPropertyHandling(x->metadata_property_handling);
         }
@@ -12682,6 +12747,9 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->no) {
             cJSON_DeleteNo(x->no);
         }
+        if (NULL != x->obj3_goto) {
+            cJSON_DeleteGoto(x->obj3_goto);
+        }
         if (NULL != x->obj3_if) {
             cJSON_DeleteIf(x->obj3_if);
         }
@@ -12709,9 +12777,6 @@ void cJSON_DeleteObj3(struct Obj3 * x) {
         if (NULL != x->obj3_new) {
             cJSON_DeleteNew(x->obj3_new);
         }
-        if (NULL != x->obj3_noexcept) {
-            cJSON_DeleteNoexcept(x->obj3_noexcept);
-        }
         cJSON_free(x);
     }
 }
@@ -13266,6 +13331,61 @@ void cJSON_DeleteNumberClass(struct NumberClass * x) {
     }
 }
 
+struct Noexcept * cJSON_ParseNoexcept(const char * s) {
+    struct Noexcept * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetNoexceptValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Noexcept * cJSON_GetNoexceptValue(const cJSON * j) {
+    struct Noexcept * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Noexcept)))) {
+            memset(x, 0, sizeof(struct Noexcept));
+            if (!cJSON_HasObjectItem(j, "noexcept")) { cJSON_DeleteNoexcept(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "noexcept")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "noexcept"))) { cJSON_DeleteNoexcept(x); return NULL; }
+                x->noexcept_noexcept = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "noexcept"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateNoexcept(const struct Noexcept * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "noexcept", x->noexcept_noexcept);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintNoexcept(const struct Noexcept * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateNoexcept(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteNoexcept(struct Noexcept * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct NoneClass * cJSON_ParseNoneClass(const char * s) {
     struct NoneClass * x = NULL;
     if (NULL != s) {
@@ -16194,61 +16314,6 @@ void cJSON_DeleteSel(struct Sel * x) {
     }
 }
 
-struct Select * cJSON_ParseSelect(const char * s) {
-    struct Select * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetSelectValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Select * cJSON_GetSelectValue(const cJSON * j) {
-    struct Select * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Select)))) {
-            memset(x, 0, sizeof(struct Select));
-            if (!cJSON_HasObjectItem(j, "select")) { cJSON_DeleteSelect(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "select")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "select"))) { cJSON_DeleteSelect(x); return NULL; }
-                x->select = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "select"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateSelect(const struct Select * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "select", x->select);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintSelect(const struct Select * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateSelect(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteSelect(struct Select * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj4 * cJSON_ParseObj4(const char * s) {
     struct Obj4 * x = NULL;
     if (NULL != s) {
@@ -16331,6 +16396,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->number = cJSON_GetNumberClassValue(cJSON_GetObjectItemCaseSensitive(j, "number"));
                 if (NULL == x->number) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "noexcept")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "noexcept")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "noexcept"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->obj4_noexcept = cJSON_GetNoexceptValue(cJSON_GetObjectItemCaseSensitive(j, "noexcept"));
+                if (NULL == x->obj4_noexcept) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "none")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "none")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "none"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16649,12 +16720,6 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->sel = cJSON_GetSelValue(cJSON_GetObjectItemCaseSensitive(j, "SEL"));
                 if (NULL == x->sel) { cJSON_DeleteObj4(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "select")) { cJSON_DeleteObj4(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "select")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "select"))) { cJSON_DeleteObj4(x); return NULL; }
-                x->select = cJSON_GetSelectValue(cJSON_GetObjectItemCaseSensitive(j, "select"));
-                if (NULL == x->select) { cJSON_DeleteObj4(x); return NULL; }
-            }
         }
     }
     return x;
@@ -16675,6 +16740,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "NSString", cJSON_CreateNsString(x->ns_string));
             cJSON_AddItemToObject(j, "NULL", cJSON_CreateNullClass(x->null));
             cJSON_AddItemToObject(j, "number", cJSON_CreateNumberClass(x->number));
+            cJSON_AddItemToObject(j, "noexcept", cJSON_CreateNoexcept(x->obj4_noexcept));
             cJSON_AddItemToObject(j, "none", cJSON_CreateNoneClass(x->obj4_none));
             cJSON_AddItemToObject(j, "not", cJSON_CreateNot(x->obj4_not));
             cJSON_AddItemToObject(j, "not_eq", cJSON_CreateNotEq(x->obj4_not_eq));
@@ -16728,7 +16794,6 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "sbyte", cJSON_CreateSbyte(x->sbyte));
             cJSON_AddItemToObject(j, "sealed", cJSON_CreateSealed(x->sealed));
             cJSON_AddItemToObject(j, "SEL", cJSON_CreateSel(x->sel));
-            cJSON_AddItemToObject(j, "select", cJSON_CreateSelect(x->select));
         }
     }
     return j;
@@ -16778,6 +16843,9 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->number) {
             cJSON_DeleteNumberClass(x->number);
         }
+        if (NULL != x->obj4_noexcept) {
+            cJSON_DeleteNoexcept(x->obj4_noexcept);
+        }
         if (NULL != x->obj4_none) {
             cJSON_DeleteNoneClass(x->obj4_none);
         }
@@ -16937,9 +17005,6 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->sel) {
             cJSON_DeleteSel(x->sel);
         }
-        if (NULL != x->select) {
-            cJSON_DeleteSelect(x->select);
-        }
         cJSON_free(x);
     }
 }
@@ -18209,47 +18274,47 @@ void cJSON_DeleteUnion(struct Union * x) {
     }
 }
 
-struct Unsigned * cJSON_ParseUnsigned(const char * s) {
-    struct Unsigned * x = NULL;
+struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s) {
+    struct PrimitiveKind * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetUnsignedValue(j);
+            x = cJSON_GetPrimitiveKindValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct Unsigned * cJSON_GetUnsignedValue(const cJSON * j) {
-    struct Unsigned * x = NULL;
+struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j) {
+    struct PrimitiveKind * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Unsigned)))) {
-            memset(x, 0, sizeof(struct Unsigned));
-            if (!cJSON_HasObjectItem(j, "unsigned")) { cJSON_DeleteUnsigned(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "unsigned")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "unsigned"))) { cJSON_DeleteUnsigned(x); return NULL; }
-                x->unsigned_unsigned = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "unsigned"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct PrimitiveKind)))) {
+            memset(x, 0, sizeof(struct PrimitiveKind));
+            if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeletePrimitiveKind(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeletePrimitiveKind(x); return NULL; }
+                x->primitive_kind = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateUnsigned(const struct Unsigned * x) {
+cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "unsigned", x->unsigned_unsigned);
+            cJSON_AddNumberToObject(j, "PrimitiveKind", x->primitive_kind);
         }
     }
     return j;
 }
 
-char * cJSON_PrintUnsigned(const struct Unsigned * x) {
+char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateUnsigned(x);
+        cJSON * j = cJSON_CreatePrimitiveKind(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18258,53 +18323,53 @@ char * cJSON_PrintUnsigned(const struct Unsigned * x) {
     return s;
 }
 
-void cJSON_DeleteUnsigned(struct Unsigned * x) {
+void cJSON_DeletePrimitiveKind(struct PrimitiveKind * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s) {
-    struct PrimitiveKind * x = NULL;
+struct Obj5True * cJSON_ParseObj5True(const char * s) {
+    struct Obj5True * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetPrimitiveKindValue(j);
+            x = cJSON_GetObj5TrueValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j) {
-    struct PrimitiveKind * x = NULL;
+struct Obj5True * cJSON_GetObj5TrueValue(const cJSON * j) {
+    struct Obj5True * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct PrimitiveKind)))) {
-            memset(x, 0, sizeof(struct PrimitiveKind));
-            if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeletePrimitiveKind(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeletePrimitiveKind(x); return NULL; }
-                x->primitive_kind = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Obj5True)))) {
+            memset(x, 0, sizeof(struct Obj5True));
+            if (!cJSON_HasObjectItem(j, "true")) { cJSON_DeleteObj5True(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "true")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "true"))) { cJSON_DeleteObj5True(x); return NULL; }
+                x->true_true = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x) {
+cJSON * cJSON_CreateObj5True(const struct Obj5True * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "PrimitiveKind", x->primitive_kind);
+            cJSON_AddNumberToObject(j, "true", x->true_true);
         }
     }
     return j;
 }
 
-char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
+char * cJSON_PrintObj5True(const struct Obj5True * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreatePrimitiveKind(x);
+        cJSON * j = cJSON_CreateObj5True(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18313,53 +18378,53 @@ char * cJSON_PrintPrimitiveKind(const struct PrimitiveKind * x) {
     return s;
 }
 
-void cJSON_DeletePrimitiveKind(struct PrimitiveKind * x) {
+void cJSON_DeleteObj5True(struct Obj5True * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
 }
 
-struct Obj5True * cJSON_ParseObj5True(const char * s) {
-    struct Obj5True * x = NULL;
+struct Select * cJSON_ParseSelect(const char * s) {
+    struct Select * x = NULL;
     if (NULL != s) {
         cJSON * j = cJSON_Parse(s);
         if (NULL != j) {
-            x = cJSON_GetObj5TrueValue(j);
+            x = cJSON_GetSelectValue(j);
             cJSON_Delete(j);
         }
     }
     return x;
 }
 
-struct Obj5True * cJSON_GetObj5TrueValue(const cJSON * j) {
-    struct Obj5True * x = NULL;
+struct Select * cJSON_GetSelectValue(const cJSON * j) {
+    struct Select * x = NULL;
     if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Obj5True)))) {
-            memset(x, 0, sizeof(struct Obj5True));
-            if (!cJSON_HasObjectItem(j, "true")) { cJSON_DeleteObj5True(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "true")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "true"))) { cJSON_DeleteObj5True(x); return NULL; }
-                x->true_true = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
+        if (NULL != (x = cJSON_malloc(sizeof(struct Select)))) {
+            memset(x, 0, sizeof(struct Select));
+            if (!cJSON_HasObjectItem(j, "select")) { cJSON_DeleteSelect(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "select")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "select"))) { cJSON_DeleteSelect(x); return NULL; }
+                x->select = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "select"));
             }
         }
     }
     return x;
 }
 
-cJSON * cJSON_CreateObj5True(const struct Obj5True * x) {
+cJSON * cJSON_CreateSelect(const struct Select * x) {
     cJSON * j = NULL;
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "true", x->true_true);
+            cJSON_AddNumberToObject(j, "select", x->select);
         }
     }
     return j;
 }
 
-char * cJSON_PrintObj5True(const struct Obj5True * x) {
+char * cJSON_PrintSelect(const struct Select * x) {
     char * s = NULL;
     if (NULL != x) {
-        cJSON * j = cJSON_CreateObj5True(x);
+        cJSON * j = cJSON_CreateSelect(x);
         if (NULL != j) {
             s = cJSON_Print(j);
             cJSON_Delete(j);
@@ -18368,7 +18433,7 @@ char * cJSON_PrintObj5True(const struct Obj5True * x) {
     return s;
 }
 
-void cJSON_DeleteObj5True(struct Obj5True * x) {
+void cJSON_DeleteSelect(struct Select * x) {
     if (NULL != x) {
         cJSON_free(x);
     }
@@ -19694,6 +19759,61 @@ void cJSON_DeleteTimeZone(struct TimeZone * x) {
     }
 }
 
+struct ToDict * cJSON_ParseToDict(const char * s) {
+    struct ToDict * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetToDictValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct ToDict * cJSON_GetToDictValue(const cJSON * j) {
+    struct ToDict * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct ToDict)))) {
+            memset(x, 0, sizeof(struct ToDict));
+            if (!cJSON_HasObjectItem(j, "to_dict")) { cJSON_DeleteToDict(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "to_dict")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "to_dict"))) { cJSON_DeleteToDict(x); return NULL; }
+                x->to_dict = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "to_dict"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateToDict(const struct ToDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "to_dict", x->to_dict);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintToDict(const struct ToDict * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateToDict(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteToDict(struct ToDict * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct ToJson * cJSON_ParseToJson(const char * s) {
     struct ToJson * x = NULL;
     if (NULL != s) {
@@ -20244,6 +20364,61 @@ void cJSON_DeleteUndefined(struct Undefined * x) {
     }
 }
 
+struct UnmarshalJson * cJSON_ParseUnmarshalJson(const char * s) {
+    struct UnmarshalJson * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetUnmarshalJsonValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct UnmarshalJson * cJSON_GetUnmarshalJsonValue(const cJSON * j) {
+    struct UnmarshalJson * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct UnmarshalJson)))) {
+            memset(x, 0, sizeof(struct UnmarshalJson));
+            if (!cJSON_HasObjectItem(j, "UnmarshalJSON")) { cJSON_DeleteUnmarshalJson(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "UnmarshalJSON")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"))) { cJSON_DeleteUnmarshalJson(x); return NULL; }
+                x->unmarshal_json = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateUnmarshalJson(const struct UnmarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "UnmarshalJSON", x->unmarshal_json);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintUnmarshalJson(const struct UnmarshalJson * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateUnmarshalJson(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteUnmarshalJson(struct UnmarshalJson * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Unowned * cJSON_ParseUnowned(const char * s) {
     struct Unowned * x = NULL;
     if (NULL != s) {
@@ -20409,61 +20584,6 @@ void cJSON_DeleteUseSerializers(struct UseSerializers * x) {
     }
 }
 
-struct Ushort * cJSON_ParseUshort(const char * s) {
-    struct Ushort * x = NULL;
-    if (NULL != s) {
-        cJSON * j = cJSON_Parse(s);
-        if (NULL != j) {
-            x = cJSON_GetUshortValue(j);
-            cJSON_Delete(j);
-        }
-    }
-    return x;
-}
-
-struct Ushort * cJSON_GetUshortValue(const cJSON * j) {
-    struct Ushort * x = NULL;
-    if (NULL != j) {
-        if (NULL != (x = cJSON_malloc(sizeof(struct Ushort)))) {
-            memset(x, 0, sizeof(struct Ushort));
-            if (!cJSON_HasObjectItem(j, "ushort")) { cJSON_DeleteUshort(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "ushort")) {
-                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "ushort"))) { cJSON_DeleteUshort(x); return NULL; }
-                x->ushort = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "ushort"));
-            }
-        }
-    }
-    return x;
-}
-
-cJSON * cJSON_CreateUshort(const struct Ushort * x) {
-    cJSON * j = NULL;
-    if (NULL != x) {
-        if (NULL != (j = cJSON_CreateObject())) {
-            cJSON_AddNumberToObject(j, "ushort", x->ushort);
-        }
-    }
-    return j;
-}
-
-char * cJSON_PrintUshort(const struct Ushort * x) {
-    char * s = NULL;
-    if (NULL != x) {
-        cJSON * j = cJSON_CreateUshort(x);
-        if (NULL != j) {
-            s = cJSON_Print(j);
-            cJSON_Delete(j);
-        }
-    }
-    return s;
-}
-
-void cJSON_DeleteUshort(struct Ushort * x) {
-    if (NULL != x) {
-        cJSON_free(x);
-    }
-}
-
 struct Obj5 * cJSON_ParseObj5(const char * s) {
     struct Obj5 * x = NULL;
     if (NULL != s) {
@@ -20624,12 +20744,6 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->obj5_union = cJSON_GetUnionValue(cJSON_GetObjectItemCaseSensitive(j, "union"));
                 if (NULL == x->obj5_union) { cJSON_DeleteObj5(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "unsigned")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "unsigned")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "unsigned"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->obj5_unsigned = cJSON_GetUnsignedValue(cJSON_GetObjectItemCaseSensitive(j, "unsigned"));
-                if (NULL == x->obj5_unsigned) { cJSON_DeleteObj5(x); return NULL; }
-            }
             if (!cJSON_HasObjectItem(j, "PrimitiveKind")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "PrimitiveKind")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "PrimitiveKind"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20642,6 +20756,12 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->purple_true = cJSON_GetObj5TrueValue(cJSON_GetObjectItemCaseSensitive(j, "true"));
                 if (NULL == x->purple_true) { cJSON_DeleteObj5(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "select")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "select")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "select"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->select = cJSON_GetSelectValue(cJSON_GetObjectItemCaseSensitive(j, "select"));
+                if (NULL == x->select) { cJSON_DeleteObj5(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "Self")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "Self")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "Self"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20786,6 +20906,12 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->time_zone = cJSON_GetTimeZoneValue(cJSON_GetObjectItemCaseSensitive(j, "TimeZone"));
                 if (NULL == x->time_zone) { cJSON_DeleteObj5(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "to_dict")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "to_dict")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "to_dict"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->to_dict = cJSON_GetToDictValue(cJSON_GetObjectItemCaseSensitive(j, "to_dict"));
+                if (NULL == x->to_dict) { cJSON_DeleteObj5(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "to_json")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "to_json")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "to_json"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20846,6 +20972,12 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->undefined = cJSON_GetUndefinedValue(cJSON_GetObjectItemCaseSensitive(j, "undefined"));
                 if (NULL == x->undefined) { cJSON_DeleteObj5(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "UnmarshalJSON")) { cJSON_DeleteObj5(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "UnmarshalJSON")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"))) { cJSON_DeleteObj5(x); return NULL; }
+                x->unmarshal_json = cJSON_GetUnmarshalJsonValue(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"));
+                if (NULL == x->unmarshal_json) { cJSON_DeleteObj5(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "unowned")) { cJSON_DeleteObj5(x); return NULL; }
             if (cJSON_HasObjectItem(j, "unowned")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "unowned"))) { cJSON_DeleteObj5(x); return NULL; }
@@ -20864,12 +20996,6 @@ struct Obj5 * cJSON_GetObj5Value(const cJSON * j) {
                 x->use_serializers = cJSON_GetUseSerializersValue(cJSON_GetObjectItemCaseSensitive(j, "UseSerializers"));
                 if (NULL == x->use_serializers) { cJSON_DeleteObj5(x); return NULL; }
             }
-            if (!cJSON_HasObjectItem(j, "ushort")) { cJSON_DeleteObj5(x); return NULL; }
-            if (cJSON_HasObjectItem(j, "ushort")) {
-                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "ushort"))) { cJSON_DeleteObj5(x); return NULL; }
-                x->ushort = cJSON_GetUshortValue(cJSON_GetObjectItemCaseSensitive(j, "ushort"));
-                if (NULL == x->ushort) { cJSON_DeleteObj5(x); return NULL; }
-            }
         }
     }
     return x;
@@ -20903,9 +21029,9 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
             cJSON_AddItemToObject(j, "typename", cJSON_CreateTypename(x->obj5_typename));
             cJSON_AddItemToObject(j, "typeof", cJSON_CreateTypeof(x->obj5_typeof));
             cJSON_AddItemToObject(j, "union", cJSON_CreateUnion(x->obj5_union));
-            cJSON_AddItemToObject(j, "unsigned", cJSON_CreateUnsigned(x->obj5_unsigned));
             cJSON_AddItemToObject(j, "PrimitiveKind", cJSON_CreatePrimitiveKind(x->primitive_kind));
             cJSON_AddItemToObject(j, "true", cJSON_CreateObj5True(x->purple_true));
+            cJSON_AddItemToObject(j, "select", cJSON_CreateSelect(x->select));
             cJSON_AddItemToObject(j, "Self", cJSON_CreateSelf(x->self));
             cJSON_AddItemToObject(j, "Sendable", cJSON_CreateSendable(x->sendable));
             cJSON_AddItemToObject(j, "SerialDescriptor", cJSON_CreateSerialDescriptor(x->serial_descriptor));
@@ -20930,6 +21056,7 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
             cJSON_AddItemToObject(j, "TimeOnly", cJSON_CreateTimeOnly(x->time_only));
             cJSON_AddItemToObject(j, "TimeOnlyConverter", cJSON_CreateTimeOnlyConverter(x->time_only_converter));
             cJSON_AddItemToObject(j, "TimeZone", cJSON_CreateTimeZone(x->time_zone));
+            cJSON_AddItemToObject(j, "to_dict", cJSON_CreateToDict(x->to_dict));
             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));
@@ -20940,10 +21067,10 @@ cJSON * cJSON_CreateObj5(const struct Obj5 * x) {
             cJSON_AddItemToObject(j, "ulong", cJSON_CreateUlong(x->ulong));
             cJSON_AddItemToObject(j, "unchecked", cJSON_CreateUnchecked(x->unchecked));
             cJSON_AddItemToObject(j, "undefined", cJSON_CreateUndefined(x->undefined));
+            cJSON_AddItemToObject(j, "UnmarshalJSON", cJSON_CreateUnmarshalJson(x->unmarshal_json));
             cJSON_AddItemToObject(j, "unowned", cJSON_CreateUnowned(x->unowned));
             cJSON_AddItemToObject(j, "unsafe", cJSON_CreateUnsafe(x->unsafe));
             cJSON_AddItemToObject(j, "UseSerializers", cJSON_CreateUseSerializers(x->use_serializers));
-            cJSON_AddItemToObject(j, "ushort", cJSON_CreateUshort(x->ushort));
         }
     }
     return j;
@@ -21032,15 +21159,15 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->obj5_union) {
             cJSON_DeleteUnion(x->obj5_union);
         }
-        if (NULL != x->obj5_unsigned) {
-            cJSON_DeleteUnsigned(x->obj5_unsigned);
-        }
         if (NULL != x->primitive_kind) {
             cJSON_DeletePrimitiveKind(x->primitive_kind);
         }
         if (NULL != x->purple_true) {
             cJSON_DeleteObj5True(x->purple_true);
         }
+        if (NULL != x->select) {
+            cJSON_DeleteSelect(x->select);
+        }
         if (NULL != x->self) {
             cJSON_DeleteSelf(x->self);
         }
@@ -21113,6 +21240,9 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->time_zone) {
             cJSON_DeleteTimeZone(x->time_zone);
         }
+        if (NULL != x->to_dict) {
+            cJSON_DeleteToDict(x->to_dict);
+        }
         if (NULL != x->to_json) {
             cJSON_DeleteToJson(x->to_json);
         }
@@ -21143,6 +21273,9 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->undefined) {
             cJSON_DeleteUndefined(x->undefined);
         }
+        if (NULL != x->unmarshal_json) {
+            cJSON_DeleteUnmarshalJson(x->unmarshal_json);
+        }
         if (NULL != x->unowned) {
             cJSON_DeleteUnowned(x->unowned);
         }
@@ -21152,9 +21285,61 @@ void cJSON_DeleteObj5(struct Obj5 * x) {
         if (NULL != x->use_serializers) {
             cJSON_DeleteUseSerializers(x->use_serializers);
         }
-        if (NULL != x->ushort) {
-            cJSON_DeleteUshort(x->ushort);
+        cJSON_free(x);
+    }
+}
+
+struct Unsigned * cJSON_ParseUnsigned(const char * s) {
+    struct Unsigned * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetUnsignedValue(j);
+            cJSON_Delete(j);
         }
+    }
+    return x;
+}
+
+struct Unsigned * cJSON_GetUnsignedValue(const cJSON * j) {
+    struct Unsigned * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Unsigned)))) {
+            memset(x, 0, sizeof(struct Unsigned));
+            if (!cJSON_HasObjectItem(j, "unsigned")) { cJSON_DeleteUnsigned(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "unsigned")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "unsigned"))) { cJSON_DeleteUnsigned(x); return NULL; }
+                x->unsigned_unsigned = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "unsigned"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateUnsigned(const struct Unsigned * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "unsigned", x->unsigned_unsigned);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintUnsigned(const struct Unsigned * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateUnsigned(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteUnsigned(struct Unsigned * x) {
+    if (NULL != x) {
         cJSON_free(x);
     }
 }
@@ -21599,6 +21784,61 @@ void cJSON_DeleteXorEq(struct XorEq * x) {
     }
 }
 
+struct Ushort * cJSON_ParseUshort(const char * s) {
+    struct Ushort * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetUshortValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct Ushort * cJSON_GetUshortValue(const cJSON * j) {
+    struct Ushort * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct Ushort)))) {
+            memset(x, 0, sizeof(struct Ushort));
+            if (!cJSON_HasObjectItem(j, "ushort")) { cJSON_DeleteUshort(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "ushort")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "ushort"))) { cJSON_DeleteUshort(x); return NULL; }
+                x->ushort = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "ushort"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateUshort(const struct Ushort * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "ushort", x->ushort);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintUshort(const struct Ushort * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateUshort(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteUshort(struct Ushort * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Utf8JsonReader * cJSON_ParseUtf8JsonReader(const char * s) {
     struct Utf8JsonReader * x = NULL;
     if (NULL != s) {
@@ -22171,6 +22411,12 @@ struct Obj6 * cJSON_GetObj6Value(const cJSON * j) {
                 if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "dummy"))) { cJSON_DeleteObj6(x); return NULL; }
                 x->dummy = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "dummy"));
             }
+            if (!cJSON_HasObjectItem(j, "unsigned")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "unsigned")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "unsigned"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->obj6_unsigned = cJSON_GetUnsignedValue(cJSON_GetObjectItemCaseSensitive(j, "unsigned"));
+                if (NULL == x->obj6_unsigned) { cJSON_DeleteObj6(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "using")) { cJSON_DeleteObj6(x); return NULL; }
             if (cJSON_HasObjectItem(j, "using")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "using"))) { cJSON_DeleteObj6(x); return NULL; }
@@ -22219,6 +22465,12 @@ struct Obj6 * cJSON_GetObj6Value(const cJSON * j) {
                 x->obj6_xor_eq = cJSON_GetXorEqValue(cJSON_GetObjectItemCaseSensitive(j, "xor_eq"));
                 if (NULL == x->obj6_xor_eq) { cJSON_DeleteObj6(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "ushort")) { cJSON_DeleteObj6(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "ushort")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "ushort"))) { cJSON_DeleteObj6(x); return NULL; }
+                x->ushort = cJSON_GetUshortValue(cJSON_GetObjectItemCaseSensitive(j, "ushort"));
+                if (NULL == x->ushort) { cJSON_DeleteObj6(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "Utf8JsonReader")) { cJSON_DeleteObj6(x); return NULL; }
             if (cJSON_HasObjectItem(j, "Utf8JsonReader")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "Utf8JsonReader"))) { cJSON_DeleteObj6(x); return NULL; }
@@ -22289,6 +22541,7 @@ cJSON * cJSON_CreateObj6(const struct Obj6 * x) {
     if (NULL != x) {
         if (NULL != (j = cJSON_CreateObject())) {
             cJSON_AddNumberToObject(j, "dummy", x->dummy);
+            cJSON_AddItemToObject(j, "unsigned", cJSON_CreateUnsigned(x->obj6_unsigned));
             cJSON_AddItemToObject(j, "using", cJSON_CreateUsing(x->obj6_using));
             cJSON_AddItemToObject(j, "virtual", cJSON_CreateVirtual(x->obj6_virtual));
             cJSON_AddItemToObject(j, "void", cJSON_CreateVoid(x->obj6_void));
@@ -22297,6 +22550,7 @@ cJSON * cJSON_CreateObj6(const struct Obj6 * x) {
             cJSON_AddItemToObject(j, "while", cJSON_CreateWhile(x->obj6_while));
             cJSON_AddItemToObject(j, "xor", cJSON_CreateXor(x->obj6_xor));
             cJSON_AddItemToObject(j, "xor_eq", cJSON_CreateXorEq(x->obj6_xor_eq));
+            cJSON_AddItemToObject(j, "ushort", cJSON_CreateUshort(x->ushort));
             cJSON_AddItemToObject(j, "Utf8JsonReader", cJSON_CreateUtf8JsonReader(x->utf8_json_reader));
             cJSON_AddItemToObject(j, "Utf8JsonWriter", cJSON_CreateUtf8JsonWriter(x->utf8_json_writer));
             cJSON_AddItemToObject(j, "UUID", cJSON_CreateUuid(x->uuid));
@@ -22326,6 +22580,9 @@ char * cJSON_PrintObj6(const struct Obj6 * x) {
 
 void cJSON_DeleteObj6(struct Obj6 * x) {
     if (NULL != x) {
+        if (NULL != x->obj6_unsigned) {
+            cJSON_DeleteUnsigned(x->obj6_unsigned);
+        }
         if (NULL != x->obj6_using) {
             cJSON_DeleteUsing(x->obj6_using);
         }
@@ -22350,6 +22607,9 @@ void cJSON_DeleteObj6(struct Obj6 * x) {
         if (NULL != x->obj6_xor_eq) {
             cJSON_DeleteXorEq(x->obj6_xor_eq);
         }
+        if (NULL != x->ushort) {
+            cJSON_DeleteUshort(x->ushort);
+        }
         if (NULL != x->utf8_json_reader) {
             cJSON_DeleteUtf8JsonReader(x->utf8_json_reader);
         }
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 ebd4174..ff4c539 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
@@ -537,6 +537,10 @@ struct From {
     int64_t from;
 };
 
+struct FromDict {
+    int64_t from_dict;
+};
+
 struct FromJson {
     int64_t from_json;
 };
@@ -625,10 +629,6 @@ struct Friend {
     int64_t friend_friend;
 };
 
-struct Goto {
-    int64_t goto_goto;
-};
-
 struct Obj2False {
     int64_t false_false;
 };
@@ -675,6 +675,7 @@ struct Obj2 {
     struct Foreach * foreach;
     struct FormatException * format_exception;
     struct From * from;
+    struct FromDict * from_dict;
     struct FromJson * from_json;
     struct Func * func;
     struct Function * function;
@@ -697,7 +698,6 @@ struct Obj2 {
     struct Float * obj2_float;
     struct For * obj2_for;
     struct Friend * obj2_friend;
-    struct Goto * obj2_goto;
     struct Obj2False * purple_false;
 };
 
@@ -893,6 +893,10 @@ struct MapEntry {
     int64_t map_entry;
 };
 
+struct MarshalJson {
+    int64_t marshal_json;
+};
+
 struct MetadataPropertyHandling {
     int64_t metadata_property_handling;
 };
@@ -917,6 +921,10 @@ struct No {
     int64_t no;
 };
 
+struct Goto {
+    int64_t goto_goto;
+};
+
 struct If {
     int64_t if_if;
 };
@@ -953,10 +961,6 @@ struct New {
     int64_t new_new;
 };
 
-struct Noexcept {
-    int64_t noexcept_noexcept;
-};
-
 struct Obj3 {
     int64_t dummy;
     struct Guard * guard;
@@ -1007,12 +1011,14 @@ struct Obj3 {
     struct Lock * lock;
     struct Map * map;
     struct MapEntry * map_entry;
+    struct MarshalJson * marshal_json;
     struct MetadataPropertyHandling * metadata_property_handling;
     struct Mutating * mutating;
     struct Native * native;
     struct Newtonsoft * newtonsoft;
     struct Nil * nil;
     struct No * no;
+    struct Goto * obj3_goto;
     struct If * obj3_if;
     struct Import * obj3_import;
     struct Inline * obj3_inline;
@@ -1022,7 +1028,6 @@ struct Obj3 {
     struct Mutable * obj3_mutable;
     struct Namespace * obj3_namespace;
     struct New * obj3_new;
-    struct Noexcept * obj3_noexcept;
 };
 
 struct NoSuchMethod {
@@ -1065,6 +1070,10 @@ struct NumberClass {
     int64_t number;
 };
 
+struct Noexcept {
+    int64_t noexcept_noexcept;
+};
+
 struct NoneClass {
     int64_t none;
 };
@@ -1277,10 +1286,6 @@ struct Sel {
     int64_t sel;
 };
 
-struct Select {
-    int64_t select;
-};
-
 struct Obj4 {
     int64_t dummy;
     struct NoSuchMethod * no_such_method;
@@ -1293,6 +1298,7 @@ struct Obj4 {
     struct NsString * ns_string;
     struct NullClass * null;
     struct NumberClass * number;
+    struct Noexcept * obj4_noexcept;
     struct NoneClass * obj4_none;
     struct Not * obj4_not;
     struct NotEq * obj4_not_eq;
@@ -1346,7 +1352,6 @@ struct Obj4 {
     struct Sbyte * sbyte;
     struct Sealed * sealed;
     struct Sel * sel;
-    struct Select * select;
 };
 
 struct KSerializer {
@@ -1441,10 +1446,6 @@ struct Union {
     int64_t union_union;
 };
 
-struct Unsigned {
-    int64_t unsigned_unsigned;
-};
-
 struct PrimitiveKind {
     int64_t primitive_kind;
 };
@@ -1453,6 +1454,10 @@ struct Obj5True {
     int64_t true_true;
 };
 
+struct Select {
+    int64_t select;
+};
+
 struct Self {
     int64_t self;
 };
@@ -1549,6 +1554,10 @@ struct TimeZone {
     int64_t time_zone;
 };
 
+struct ToDict {
+    int64_t to_dict;
+};
+
 struct ToJson {
     int64_t to_json;
 };
@@ -1589,6 +1598,10 @@ struct Undefined {
     int64_t undefined;
 };
 
+struct UnmarshalJson {
+    int64_t unmarshal_json;
+};
+
 struct Unowned {
     int64_t unowned;
 };
@@ -1601,10 +1614,6 @@ struct UseSerializers {
     int64_t use_serializers;
 };
 
-struct Ushort {
-    int64_t ushort;
-};
-
 struct Obj5 {
     int64_t dummy;
     struct KSerializer * k_serializer;
@@ -1630,9 +1639,9 @@ struct Obj5 {
     struct Typename * obj5_typename;
     struct Typeof * obj5_typeof;
     struct Union * obj5_union;
-    struct Unsigned * obj5_unsigned;
     struct PrimitiveKind * primitive_kind;
     struct Obj5True * purple_true;
+    struct Select * select;
     struct Self * self;
     struct Sendable * sendable;
     struct SerialDescriptor * serial_descriptor;
@@ -1657,6 +1666,7 @@ struct Obj5 {
     struct TimeOnly * time_only;
     struct TimeOnlyConverter * time_only_converter;
     struct TimeZone * time_zone;
+    struct ToDict * to_dict;
     struct ToJson * to_json;
     struct ToString * to_string;
     struct TopLevelClass * top_level;
@@ -1667,10 +1677,14 @@ struct Obj5 {
     struct Ulong * ulong;
     struct Unchecked * unchecked;
     struct Undefined * undefined;
+    struct UnmarshalJson * unmarshal_json;
     struct Unowned * unowned;
     struct Unsafe * unsafe;
     struct UseSerializers * use_serializers;
-    struct Ushort * ushort;
+};
+
+struct Unsigned {
+    int64_t unsigned_unsigned;
 };
 
 struct Using {
@@ -1705,6 +1719,10 @@ struct XorEq {
     int64_t xor_eq_xor_eq;
 };
 
+struct Ushort {
+    int64_t ushort;
+};
+
 struct Utf8JsonReader {
     int64_t utf8_json_reader;
 };
@@ -1747,6 +1765,7 @@ struct Yield {
 
 struct Obj6 {
     int64_t dummy;
+    struct Unsigned * obj6_unsigned;
     struct Using * obj6_using;
     struct Virtual * obj6_virtual;
     struct Void * obj6_void;
@@ -1755,6 +1774,7 @@ struct Obj6 {
     struct While * obj6_while;
     struct Xor * obj6_xor;
     struct XorEq * obj6_xor_eq;
+    struct Ushort * ushort;
     struct Utf8JsonReader * utf8_json_reader;
     struct Utf8JsonWriter * utf8_json_writer;
     struct Uuid * uuid;
@@ -2410,6 +2430,12 @@ cJSON * cJSON_CreateFrom(const struct From * x);
 char * cJSON_PrintFrom(const struct From * x);
 void cJSON_DeleteFrom(struct From * x);
 
+struct FromDict * cJSON_ParseFromDict(const char * s);
+struct FromDict * cJSON_GetFromDictValue(const cJSON * j);
+cJSON * cJSON_CreateFromDict(const struct FromDict * x);
+char * cJSON_PrintFromDict(const struct FromDict * x);
+void cJSON_DeleteFromDict(struct FromDict * x);
+
 struct FromJson * cJSON_ParseFromJson(const char * s);
 struct FromJson * cJSON_GetFromJsonValue(const cJSON * j);
 cJSON * cJSON_CreateFromJson(const struct FromJson * x);
@@ -2542,12 +2568,6 @@ cJSON * cJSON_CreateFriend(const struct Friend * x);
 char * cJSON_PrintFriend(const struct Friend * x);
 void cJSON_DeleteFriend(struct Friend * x);
 
-struct Goto * cJSON_ParseGoto(const char * s);
-struct Goto * cJSON_GetGotoValue(const cJSON * j);
-cJSON * cJSON_CreateGoto(const struct Goto * x);
-char * cJSON_PrintGoto(const struct Goto * x);
-void cJSON_DeleteGoto(struct Goto * x);
-
 struct Obj2False * cJSON_ParseObj2False(const char * s);
 struct Obj2False * cJSON_GetObj2FalseValue(const cJSON * j);
 cJSON * cJSON_CreateObj2False(const struct Obj2False * x);
@@ -2848,6 +2868,12 @@ cJSON * cJSON_CreateMapEntry(const struct MapEntry * x);
 char * cJSON_PrintMapEntry(const struct MapEntry * x);
 void cJSON_DeleteMapEntry(struct MapEntry * x);
 
+struct MarshalJson * cJSON_ParseMarshalJson(const char * s);
+struct MarshalJson * cJSON_GetMarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateMarshalJson(const struct MarshalJson * x);
+char * cJSON_PrintMarshalJson(const struct MarshalJson * x);
+void cJSON_DeleteMarshalJson(struct MarshalJson * x);
+
 struct MetadataPropertyHandling * cJSON_ParseMetadataPropertyHandling(const char * s);
 struct MetadataPropertyHandling * cJSON_GetMetadataPropertyHandlingValue(const cJSON * j);
 cJSON * cJSON_CreateMetadataPropertyHandling(const struct MetadataPropertyHandling * x);
@@ -2884,6 +2910,12 @@ cJSON * cJSON_CreateNo(const struct No * x);
 char * cJSON_PrintNo(const struct No * x);
 void cJSON_DeleteNo(struct No * x);
 
+struct Goto * cJSON_ParseGoto(const char * s);
+struct Goto * cJSON_GetGotoValue(const cJSON * j);
+cJSON * cJSON_CreateGoto(const struct Goto * x);
+char * cJSON_PrintGoto(const struct Goto * x);
+void cJSON_DeleteGoto(struct Goto * x);
+
 struct If * cJSON_ParseIf(const char * s);
 struct If * cJSON_GetIfValue(const cJSON * j);
 cJSON * cJSON_CreateIf(const struct If * x);
@@ -2938,12 +2970,6 @@ cJSON * cJSON_CreateNew(const struct New * x);
 char * cJSON_PrintNew(const struct New * x);
 void cJSON_DeleteNew(struct New * x);
 
-struct Noexcept * cJSON_ParseNoexcept(const char * s);
-struct Noexcept * cJSON_GetNoexceptValue(const cJSON * j);
-cJSON * cJSON_CreateNoexcept(const struct Noexcept * x);
-char * cJSON_PrintNoexcept(const struct Noexcept * x);
-void cJSON_DeleteNoexcept(struct Noexcept * x);
-
 struct Obj3 * cJSON_ParseObj3(const char * s);
 struct Obj3 * cJSON_GetObj3Value(const cJSON * j);
 cJSON * cJSON_CreateObj3(const struct Obj3 * x);
@@ -3010,6 +3036,12 @@ cJSON * cJSON_CreateNumberClass(const struct NumberClass * x);
 char * cJSON_PrintNumberClass(const struct NumberClass * x);
 void cJSON_DeleteNumberClass(struct NumberClass * x);
 
+struct Noexcept * cJSON_ParseNoexcept(const char * s);
+struct Noexcept * cJSON_GetNoexceptValue(const cJSON * j);
+cJSON * cJSON_CreateNoexcept(const struct Noexcept * x);
+char * cJSON_PrintNoexcept(const struct Noexcept * x);
+void cJSON_DeleteNoexcept(struct Noexcept * x);
+
 struct NoneClass * cJSON_ParseNoneClass(const char * s);
 struct NoneClass * cJSON_GetNoneClassValue(const cJSON * j);
 cJSON * cJSON_CreateNoneClass(const struct NoneClass * x);
@@ -3328,12 +3360,6 @@ cJSON * cJSON_CreateSel(const struct Sel * x);
 char * cJSON_PrintSel(const struct Sel * x);
 void cJSON_DeleteSel(struct Sel * x);
 
-struct Select * cJSON_ParseSelect(const char * s);
-struct Select * cJSON_GetSelectValue(const cJSON * j);
-cJSON * cJSON_CreateSelect(const struct Select * x);
-char * cJSON_PrintSelect(const struct Select * x);
-void cJSON_DeleteSelect(struct Select * x);
-
 struct Obj4 * cJSON_ParseObj4(const char * s);
 struct Obj4 * cJSON_GetObj4Value(const cJSON * j);
 cJSON * cJSON_CreateObj4(const struct Obj4 * x);
@@ -3478,12 +3504,6 @@ cJSON * cJSON_CreateUnion(const struct Union * x);
 char * cJSON_PrintUnion(const struct Union * x);
 void cJSON_DeleteUnion(struct Union * x);
 
-struct Unsigned * cJSON_ParseUnsigned(const char * s);
-struct Unsigned * cJSON_GetUnsignedValue(const cJSON * j);
-cJSON * cJSON_CreateUnsigned(const struct Unsigned * x);
-char * cJSON_PrintUnsigned(const struct Unsigned * x);
-void cJSON_DeleteUnsigned(struct Unsigned * x);
-
 struct PrimitiveKind * cJSON_ParsePrimitiveKind(const char * s);
 struct PrimitiveKind * cJSON_GetPrimitiveKindValue(const cJSON * j);
 cJSON * cJSON_CreatePrimitiveKind(const struct PrimitiveKind * x);
@@ -3496,6 +3516,12 @@ cJSON * cJSON_CreateObj5True(const struct Obj5True * x);
 char * cJSON_PrintObj5True(const struct Obj5True * x);
 void cJSON_DeleteObj5True(struct Obj5True * x);
 
+struct Select * cJSON_ParseSelect(const char * s);
+struct Select * cJSON_GetSelectValue(const cJSON * j);
+cJSON * cJSON_CreateSelect(const struct Select * x);
+char * cJSON_PrintSelect(const struct Select * x);
+void cJSON_DeleteSelect(struct Select * x);
+
 struct Self * cJSON_ParseSelf(const char * s);
 struct Self * cJSON_GetSelfValue(const cJSON * j);
 cJSON * cJSON_CreateSelf(const struct Self * x);
@@ -3640,6 +3666,12 @@ cJSON * cJSON_CreateTimeZone(const struct TimeZone * x);
 char * cJSON_PrintTimeZone(const struct TimeZone * x);
 void cJSON_DeleteTimeZone(struct TimeZone * x);
 
+struct ToDict * cJSON_ParseToDict(const char * s);
+struct ToDict * cJSON_GetToDictValue(const cJSON * j);
+cJSON * cJSON_CreateToDict(const struct ToDict * x);
+char * cJSON_PrintToDict(const struct ToDict * x);
+void cJSON_DeleteToDict(struct ToDict * x);
+
 struct ToJson * cJSON_ParseToJson(const char * s);
 struct ToJson * cJSON_GetToJsonValue(const cJSON * j);
 cJSON * cJSON_CreateToJson(const struct ToJson * x);
@@ -3700,6 +3732,12 @@ cJSON * cJSON_CreateUndefined(const struct Undefined * x);
 char * cJSON_PrintUndefined(const struct Undefined * x);
 void cJSON_DeleteUndefined(struct Undefined * x);
 
+struct UnmarshalJson * cJSON_ParseUnmarshalJson(const char * s);
+struct UnmarshalJson * cJSON_GetUnmarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateUnmarshalJson(const struct UnmarshalJson * x);
+char * cJSON_PrintUnmarshalJson(const struct UnmarshalJson * x);
+void cJSON_DeleteUnmarshalJson(struct UnmarshalJson * x);
+
 struct Unowned * cJSON_ParseUnowned(const char * s);
 struct Unowned * cJSON_GetUnownedValue(const cJSON * j);
 cJSON * cJSON_CreateUnowned(const struct Unowned * x);
@@ -3718,18 +3756,18 @@ cJSON * cJSON_CreateUseSerializers(const struct UseSerializers * x);
 char * cJSON_PrintUseSerializers(const struct UseSerializers * x);
 void cJSON_DeleteUseSerializers(struct UseSerializers * x);
 
-struct Ushort * cJSON_ParseUshort(const char * s);
-struct Ushort * cJSON_GetUshortValue(const cJSON * j);
-cJSON * cJSON_CreateUshort(const struct Ushort * x);
-char * cJSON_PrintUshort(const struct Ushort * x);
-void cJSON_DeleteUshort(struct Ushort * x);
-
 struct Obj5 * cJSON_ParseObj5(const char * s);
 struct Obj5 * cJSON_GetObj5Value(const cJSON * j);
 cJSON * cJSON_CreateObj5(const struct Obj5 * x);
 char * cJSON_PrintObj5(const struct Obj5 * x);
 void cJSON_DeleteObj5(struct Obj5 * x);
 
+struct Unsigned * cJSON_ParseUnsigned(const char * s);
+struct Unsigned * cJSON_GetUnsignedValue(const cJSON * j);
+cJSON * cJSON_CreateUnsigned(const struct Unsigned * x);
+char * cJSON_PrintUnsigned(const struct Unsigned * x);
+void cJSON_DeleteUnsigned(struct Unsigned * x);
+
 struct Using * cJSON_ParseUsing(const char * s);
 struct Using * cJSON_GetUsingValue(const cJSON * j);
 cJSON * cJSON_CreateUsing(const struct Using * x);
@@ -3778,6 +3816,12 @@ cJSON * cJSON_CreateXorEq(const struct XorEq * x);
 char * cJSON_PrintXorEq(const struct XorEq * x);
 void cJSON_DeleteXorEq(struct XorEq * x);
 
+struct Ushort * cJSON_ParseUshort(const char * s);
+struct Ushort * cJSON_GetUshortValue(const cJSON * j);
+cJSON * cJSON_CreateUshort(const struct Ushort * x);
+char * cJSON_PrintUshort(const struct Ushort * x);
+void cJSON_DeleteUshort(struct Ushort * x);
+
 struct Utf8JsonReader * cJSON_ParseUtf8JsonReader(const char * s);
 struct Utf8JsonReader * cJSON_GetUtf8JsonReaderValue(const cJSON * j);
 cJSON * cJSON_CreateUtf8JsonReader(const struct Utf8JsonReader * x);
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
index 934c40e..a9e173d 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
index 2a64dc5..d15151f 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
index 504b925..2ed28c8 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
index 7b4e86e..6d078d1 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 db67bbe..afea70e 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
@@ -1823,6 +1823,20 @@ namespace quicktype {
         void set_from(const int64_t & value) { this->from = value; }
     };
 
+    class FromDict {
+        public:
+        FromDict() = default;
+        virtual ~FromDict() = default;
+
+        private:
+        int64_t from_dict;
+
+        public:
+        const int64_t & get_from_dict() const { return from_dict; }
+        int64_t & get_mutable_from_dict() { return from_dict; }
+        void set_from_dict(const int64_t & value) { this->from_dict = value; }
+    };
+
     class FromJson {
         public:
         FromJson() = default;
@@ -2131,20 +2145,6 @@ namespace quicktype {
         void set_friend_friend(const int64_t & value) { this->friend_friend = value; }
     };
 
-    class Goto {
-        public:
-        Goto() = default;
-        virtual ~Goto() = default;
-
-        private:
-        int64_t goto_goto;
-
-        public:
-        const int64_t & get_goto_goto() const { return goto_goto; }
-        int64_t & get_mutable_goto_goto() { return goto_goto; }
-        void set_goto_goto(const int64_t & value) { this->goto_goto = value; }
-    };
-
     class FalseClass {
         public:
         FalseClass() = default;
@@ -2206,6 +2206,7 @@ namespace quicktype {
         Foreach foreach;
         FormatException format_exception;
         From from;
+        FromDict from_dict;
         FromJson from_json;
         Func func;
         Function function;
@@ -2228,7 +2229,6 @@ namespace quicktype {
         Float obj2_float;
         For obj2_for;
         Friend obj2_friend;
-        Goto obj2_goto;
         FalseClass purple_false;
 
         public:
@@ -2396,6 +2396,10 @@ namespace quicktype {
         From & get_mutable_from() { return from; }
         void set_from(const From & value) { this->from = value; }
 
+        const FromDict & get_from_dict() const { return from_dict; }
+        FromDict & get_mutable_from_dict() { return from_dict; }
+        void set_from_dict(const FromDict & value) { this->from_dict = value; }
+
         const FromJson & get_from_json() const { return from_json; }
         FromJson & get_mutable_from_json() { return from_json; }
         void set_from_json(const FromJson & value) { this->from_json = value; }
@@ -2484,10 +2488,6 @@ namespace quicktype {
         Friend & get_mutable_obj2_friend() { return obj2_friend; }
         void set_obj2_friend(const Friend & value) { this->obj2_friend = value; }
 
-        const Goto & get_obj2_goto() const { return obj2_goto; }
-        Goto & get_mutable_obj2_goto() { return obj2_goto; }
-        void set_obj2_goto(const Goto & value) { this->obj2_goto = value; }
-
         const FalseClass & get_purple_false() const { return purple_false; }
         FalseClass & get_mutable_purple_false() { return purple_false; }
         void set_purple_false(const FalseClass & value) { this->purple_false = value; }
@@ -3165,6 +3165,20 @@ namespace quicktype {
         void set_map_entry(const int64_t & value) { this->map_entry = value; }
     };
 
+    class MarshalJson {
+        public:
+        MarshalJson() = default;
+        virtual ~MarshalJson() = default;
+
+        private:
+        int64_t marshal_json;
+
+        public:
+        const int64_t & get_marshal_json() const { return marshal_json; }
+        int64_t & get_mutable_marshal_json() { return marshal_json; }
+        void set_marshal_json(const int64_t & value) { this->marshal_json = value; }
+    };
+
     class MetadataPropertyHandling {
         public:
         MetadataPropertyHandling() = default;
@@ -3249,6 +3263,20 @@ namespace quicktype {
         void set_no(const int64_t & value) { this->no = value; }
     };
 
+    class Goto {
+        public:
+        Goto() = default;
+        virtual ~Goto() = default;
+
+        private:
+        int64_t goto_goto;
+
+        public:
+        const int64_t & get_goto_goto() const { return goto_goto; }
+        int64_t & get_mutable_goto_goto() { return goto_goto; }
+        void set_goto_goto(const int64_t & value) { this->goto_goto = value; }
+    };
+
     class If {
         public:
         If() = default;
@@ -3375,20 +3403,6 @@ namespace quicktype {
         void set_new_new(const int64_t & value) { this->new_new = value; }
     };
 
-    class Noexcept {
-        public:
-        Noexcept() = default;
-        virtual ~Noexcept() = default;
-
-        private:
-        int64_t noexcept_noexcept;
-
-        public:
-        const int64_t & get_noexcept_noexcept() const { return noexcept_noexcept; }
-        int64_t & get_mutable_noexcept_noexcept() { return noexcept_noexcept; }
-        void set_noexcept_noexcept(const int64_t & value) { this->noexcept_noexcept = value; }
-    };
-
     class Obj3 {
         public:
         Obj3() = default;
@@ -3444,12 +3458,14 @@ namespace quicktype {
         Lock lock;
         Map map;
         MapEntry map_entry;
+        MarshalJson marshal_json;
         MetadataPropertyHandling metadata_property_handling;
         Mutating mutating;
         Native native;
         Newtonsoft newtonsoft;
         Nil nil;
         No no;
+        Goto obj3_goto;
         If obj3_if;
         Import obj3_import;
         Inline obj3_inline;
@@ -3459,7 +3475,6 @@ namespace quicktype {
         Mutable obj3_mutable;
         Namespace obj3_namespace;
         New obj3_new;
-        Noexcept obj3_noexcept;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
@@ -3658,6 +3673,10 @@ namespace quicktype {
         MapEntry & get_mutable_map_entry() { return map_entry; }
         void set_map_entry(const MapEntry & value) { this->map_entry = value; }
 
+        const MarshalJson & get_marshal_json() const { return marshal_json; }
+        MarshalJson & get_mutable_marshal_json() { return marshal_json; }
+        void set_marshal_json(const MarshalJson & value) { this->marshal_json = value; }
+
         const MetadataPropertyHandling & get_metadata_property_handling() const { return metadata_property_handling; }
         MetadataPropertyHandling & get_mutable_metadata_property_handling() { return metadata_property_handling; }
         void set_metadata_property_handling(const MetadataPropertyHandling & value) { this->metadata_property_handling = value; }
@@ -3682,6 +3701,10 @@ namespace quicktype {
         No & get_mutable_no() { return no; }
         void set_no(const No & value) { this->no = value; }
 
+        const Goto & get_obj3_goto() const { return obj3_goto; }
+        Goto & get_mutable_obj3_goto() { return obj3_goto; }
+        void set_obj3_goto(const Goto & value) { this->obj3_goto = value; }
+
         const If & get_obj3_if() const { return obj3_if; }
         If & get_mutable_obj3_if() { return obj3_if; }
         void set_obj3_if(const If & value) { this->obj3_if = value; }
@@ -3717,10 +3740,6 @@ namespace quicktype {
         const New & get_obj3_new() const { return obj3_new; }
         New & get_mutable_obj3_new() { return obj3_new; }
         void set_obj3_new(const New & value) { this->obj3_new = value; }
-
-        const Noexcept & get_obj3_noexcept() const { return obj3_noexcept; }
-        Noexcept & get_mutable_obj3_noexcept() { return obj3_noexcept; }
-        void set_obj3_noexcept(const Noexcept & value) { this->obj3_noexcept = value; }
     };
 
     class NoSuchMethod {
@@ -3863,6 +3882,20 @@ namespace quicktype {
         void set_number(const int64_t & value) { this->number = value; }
     };
 
+    class Noexcept {
+        public:
+        Noexcept() = default;
+        virtual ~Noexcept() = default;
+
+        private:
+        int64_t noexcept_noexcept;
+
+        public:
+        const int64_t & get_noexcept_noexcept() const { return noexcept_noexcept; }
+        int64_t & get_mutable_noexcept_noexcept() { return noexcept_noexcept; }
+        void set_noexcept_noexcept(const int64_t & value) { this->noexcept_noexcept = value; }
+    };
+
     class NoneClass {
         public:
         NoneClass() = default;
@@ -4605,20 +4638,6 @@ namespace quicktype {
         void set_sel(const int64_t & value) { this->sel = value; }
     };
 
-    class Select {
-        public:
-        Select() = default;
-        virtual ~Select() = default;
-
-        private:
-        int64_t select;
-
-        public:
-        const int64_t & get_select() const { return select; }
-        int64_t & get_mutable_select() { return select; }
-        void set_select(const int64_t & value) { this->select = value; }
-    };
-
     class Obj4 {
         public:
         Obj4() = default;
@@ -4636,6 +4655,7 @@ namespace quicktype {
         NsString ns_string;
         Null null;
         Number number;
+        Noexcept obj4_noexcept;
         NoneClass obj4_none;
         Not obj4_not;
         NotEq obj4_not_eq;
@@ -4689,7 +4709,6 @@ namespace quicktype {
         Sbyte sbyte;
         Sealed sealed;
         Sel sel;
-        Select select;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
@@ -4736,6 +4755,10 @@ namespace quicktype {
         Number & get_mutable_number() { return number; }
         void set_number(const Number & value) { this->number = value; }
 
+        const Noexcept & get_obj4_noexcept() const { return obj4_noexcept; }
+        Noexcept & get_mutable_obj4_noexcept() { return obj4_noexcept; }
+        void set_obj4_noexcept(const Noexcept & value) { this->obj4_noexcept = value; }
+
         const NoneClass & get_obj4_none() const { return obj4_none; }
         NoneClass & get_mutable_obj4_none() { return obj4_none; }
         void set_obj4_none(const NoneClass & value) { this->obj4_none = value; }
@@ -4947,10 +4970,6 @@ namespace quicktype {
         const Sel & get_sel() const { return sel; }
         Sel & get_mutable_sel() { return sel; }
         void set_sel(const Sel & value) { this->sel = value; }
-
-        const Select & get_select() const { return select; }
-        Select & get_mutable_select() { return select; }
-        void set_select(const Select & value) { this->select = value; }
     };
 
     class KSerializer {
@@ -5261,20 +5280,6 @@ namespace quicktype {
         void set_union_union(const int64_t & value) { this->union_union = value; }
     };
 
-    class Unsigned {
-        public:
-        Unsigned() = default;
-        virtual ~Unsigned() = default;
-
-        private:
-        int64_t unsigned_unsigned;
-
-        public:
-        const int64_t & get_unsigned_unsigned() const { return unsigned_unsigned; }
-        int64_t & get_mutable_unsigned_unsigned() { return unsigned_unsigned; }
-        void set_unsigned_unsigned(const int64_t & value) { this->unsigned_unsigned = value; }
-    };
-
     class PrimitiveKind {
         public:
         PrimitiveKind() = default;
@@ -5303,6 +5308,20 @@ namespace quicktype {
         void set_true_true(const int64_t & value) { this->true_true = value; }
     };
 
+    class Select {
+        public:
+        Select() = default;
+        virtual ~Select() = default;
+
+        private:
+        int64_t select;
+
+        public:
+        const int64_t & get_select() const { return select; }
+        int64_t & get_mutable_select() { return select; }
+        void set_select(const int64_t & value) { this->select = value; }
+    };
+
     class Self {
         public:
         Self() = default;
@@ -5639,6 +5658,20 @@ namespace quicktype {
         void set_time_zone(const int64_t & value) { this->time_zone = value; }
     };
 
+    class ToDict {
+        public:
+        ToDict() = default;
+        virtual ~ToDict() = default;
+
+        private:
+        int64_t to_dict;
+
+        public:
+        const int64_t & get_to_dict() const { return to_dict; }
+        int64_t & get_mutable_to_dict() { return to_dict; }
+        void set_to_dict(const int64_t & value) { this->to_dict = value; }
+    };
+
     class ToJson {
         public:
         ToJson() = default;
@@ -5793,6 +5826,20 @@ namespace quicktype {
         void set_undefined(const int64_t & value) { this->undefined = value; }
     };
 
+    class UnmarshalJson {
+        public:
+        UnmarshalJson() = default;
+        virtual ~UnmarshalJson() = default;
+
+        private:
+        int64_t unmarshal_json;
+
+        public:
+        const int64_t & get_unmarshal_json() const { return unmarshal_json; }
+        int64_t & get_mutable_unmarshal_json() { return unmarshal_json; }
+        void set_unmarshal_json(const int64_t & value) { this->unmarshal_json = value; }
+    };
+
     class Unowned {
         public:
         Unowned() = default;
@@ -5835,20 +5882,6 @@ namespace quicktype {
         void set_use_serializers(const int64_t & value) { this->use_serializers = value; }
     };
 
-    class Ushort {
-        public:
-        Ushort() = default;
-        virtual ~Ushort() = default;
-
-        private:
-        int64_t ushort;
-
-        public:
-        const int64_t & get_ushort() const { return ushort; }
-        int64_t & get_mutable_ushort() { return ushort; }
-        void set_ushort(const int64_t & value) { this->ushort = value; }
-    };
-
     class Obj5 {
         public:
         Obj5() = default;
@@ -5878,9 +5911,9 @@ namespace quicktype {
         Typeid obj5_typeid;
         Typename obj5_typename;
         Union obj5_union;
-        Unsigned obj5_unsigned;
         PrimitiveKind primitive_kind;
         TrueClass purple_true;
+        Select select;
         Self self;
         Sendable sendable;
         SerialDescriptor serial_descriptor;
@@ -5905,6 +5938,7 @@ namespace quicktype {
         TimeOnly time_only;
         TimeOnlyConverter time_only_converter;
         TimeZone time_zone;
+        ToDict to_dict;
         ToJson to_json;
         ToString to_string;
         TopLevelClass top_level;
@@ -5916,10 +5950,10 @@ namespace quicktype {
         Ulong ulong;
         Unchecked unchecked;
         Undefined undefined;
+        UnmarshalJson unmarshal_json;
         Unowned unowned;
         Unsafe unsafe;
         UseSerializers use_serializers;
-        Ushort ushort;
 
         public:
         const int64_t & get_dummy() const { return dummy; }
@@ -6014,10 +6048,6 @@ namespace quicktype {
         Union & get_mutable_obj5_union() { return obj5_union; }
         void set_obj5_union(const Union & value) { this->obj5_union = value; }
 
-        const Unsigned & get_obj5_unsigned() const { return obj5_unsigned; }
-        Unsigned & get_mutable_obj5_unsigned() { return obj5_unsigned; }
-        void set_obj5_unsigned(const Unsigned & value) { this->obj5_unsigned = value; }
-
         const PrimitiveKind & get_primitive_kind() const { return primitive_kind; }
         PrimitiveKind & get_mutable_primitive_kind() { return primitive_kind; }
         void set_primitive_kind(const PrimitiveKind & value) { this->primitive_kind = value; }
@@ -6026,6 +6056,10 @@ namespace quicktype {
         TrueClass & get_mutable_purple_true() { return purple_true; }
         void set_purple_true(const TrueClass & value) { this->purple_true = value; }
 
+        const Select & get_select() const { return select; }
+        Select & get_mutable_select() { return select; }
+        void set_select(const Select & value) { this->select = value; }
+
         const Self & get_self() const { return self; }
         Self & get_mutable_self() { return self; }
         void set_self(const Self & value) { this->self = value; }
@@ -6122,6 +6156,10 @@ namespace quicktype {
         TimeZone & get_mutable_time_zone() { return time_zone; }
         void set_time_zone(const TimeZone & value) { this->time_zone = value; }
 
+        const ToDict & get_to_dict() const { return to_dict; }
+        ToDict & get_mutable_to_dict() { return to_dict; }
+        void set_to_dict(const ToDict & value) { this->to_dict = value; }
+
         const ToJson & get_to_json() const { return to_json; }
         ToJson & get_mutable_to_json() { return to_json; }
         void set_to_json(const ToJson & value) { this->to_json = value; }
@@ -6166,6 +6204,10 @@ namespace quicktype {
         Undefined & get_mutable_undefined() { return undefined; }
         void set_undefined(const Undefined & value) { this->undefined = value; }
 
+        const UnmarshalJson & get_unmarshal_json() const { return unmarshal_json; }
+        UnmarshalJson & get_mutable_unmarshal_json() { return unmarshal_json; }
+        void set_unmarshal_json(const UnmarshalJson & value) { this->unmarshal_json = value; }
+
         const Unowned & get_unowned() const { return unowned; }
         Unowned & get_mutable_unowned() { return unowned; }
         void set_unowned(const Unowned & value) { this->unowned = value; }
@@ -6177,10 +6219,20 @@ namespace quicktype {
         const UseSerializers & get_use_serializers() const { return use_serializers; }
         UseSerializers & get_mutable_use_serializers() { return use_serializers; }
         void set_use_serializers(const UseSerializers & value) { this->use_serializers = value; }
+    };
 
-        const Ushort & get_ushort() const { return ushort; }
-        Ushort & get_mutable_ushort() { return ushort; }
-        void set_ushort(const Ushort & value) { this->ushort = value; }
+    class Unsigned {
+        public:
+        Unsigned() = default;
+        virtual ~Unsigned() = default;
+
+        private:
+        int64_t unsigned_unsigned;
+
+        public:
+        const int64_t & get_unsigned_unsigned() const { return unsigned_unsigned; }
+        int64_t & get_mutable_unsigned_unsigned() { return unsigned_unsigned; }
+        void set_unsigned_unsigned(const int64_t & value) { this->unsigned_unsigned = value; }
     };
 
     class Using {
@@ -6295,6 +6347,20 @@ namespace quicktype {
         void set_xor_eq_xor_eq(const int64_t & value) { this->xor_eq_xor_eq = value; }
     };
 
+    class Ushort {
+        public:
+        Ushort() = default;
+        virtual ~Ushort() = default;
+
+        private:
+        int64_t ushort;
+
+        public:
+        const int64_t & get_ushort() const { return ushort; }
+        int64_t & get_mutable_ushort() { return ushort; }
+        void set_ushort(const int64_t & value) { this->ushort = value; }
+    };
+
     class Utf8JsonReader {
         public:
         Utf8JsonReader() = default;
@@ -6442,6 +6508,7 @@ namespace quicktype {
 
         private:
         int64_t dummy;
+        Unsigned obj6_unsigned;
         Using obj6_using;
         Virtual obj6_virtual;
         Void obj6_void;
@@ -6450,6 +6517,7 @@ namespace quicktype {
         While obj6_while;
         Xor obj6_xor;
         XorEq obj6_xor_eq;
+        Ushort ushort;
         Utf8JsonReader utf8_json_reader;
         Utf8JsonWriter utf8_json_writer;
         Uuid uuid;
@@ -6466,6 +6534,10 @@ namespace quicktype {
         int64_t & get_mutable_dummy() { return dummy; }
         void set_dummy(const int64_t & value) { this->dummy = value; }
 
+        const Unsigned & get_obj6_unsigned() const { return obj6_unsigned; }
+        Unsigned & get_mutable_obj6_unsigned() { return obj6_unsigned; }
+        void set_obj6_unsigned(const Unsigned & value) { this->obj6_unsigned = value; }
+
         const Using & get_obj6_using() const { return obj6_using; }
         Using & get_mutable_obj6_using() { return obj6_using; }
         void set_obj6_using(const Using & value) { this->obj6_using = value; }
@@ -6498,6 +6570,10 @@ namespace quicktype {
         XorEq & get_mutable_obj6_xor_eq() { return obj6_xor_eq; }
         void set_obj6_xor_eq(const XorEq & value) { this->obj6_xor_eq = value; }
 
+        const Ushort & get_ushort() const { return ushort; }
+        Ushort & get_mutable_ushort() { return ushort; }
+        void set_ushort(const Ushort & value) { this->ushort = value; }
+
         const Utf8JsonReader & get_utf8_json_reader() const { return utf8_json_reader; }
         Utf8JsonReader & get_mutable_utf8_json_reader() { return utf8_json_reader; }
         void set_utf8_json_reader(const Utf8JsonReader & value) { this->utf8_json_reader = value; }
@@ -6900,6 +6976,9 @@ namespace quicktype {
     void from_json(const json & j, From & x);
     void to_json(json & j, const From & x);
 
+    void from_json(const json & j, FromDict & x);
+    void to_json(json & j, const FromDict & x);
+
     void from_json(const json & j, FromJson & x);
     void to_json(json & j, const FromJson & x);
 
@@ -6966,9 +7045,6 @@ namespace quicktype {
     void from_json(const json & j, Friend & x);
     void to_json(json & j, const Friend & x);
 
-    void from_json(const json & j, Goto & x);
-    void to_json(json & j, const Goto & x);
-
     void from_json(const json & j, FalseClass & x);
     void to_json(json & j, const FalseClass & x);
 
@@ -7119,6 +7195,9 @@ namespace quicktype {
     void from_json(const json & j, MapEntry & x);
     void to_json(json & j, const MapEntry & x);
 
+    void from_json(const json & j, MarshalJson & x);
+    void to_json(json & j, const MarshalJson & x);
+
     void from_json(const json & j, MetadataPropertyHandling & x);
     void to_json(json & j, const MetadataPropertyHandling & x);
 
@@ -7137,6 +7216,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, Goto & x);
+    void to_json(json & j, const Goto & x);
+
     void from_json(const json & j, If & x);
     void to_json(json & j, const If & x);
 
@@ -7164,9 +7246,6 @@ namespace quicktype {
     void from_json(const json & j, New & x);
     void to_json(json & j, const New & x);
 
-    void from_json(const json & j, Noexcept & x);
-    void to_json(json & j, const Noexcept & x);
-
     void from_json(const json & j, Obj3 & x);
     void to_json(json & j, const Obj3 & x);
 
@@ -7200,6 +7279,9 @@ namespace quicktype {
     void from_json(const json & j, Number & x);
     void to_json(json & j, const Number & x);
 
+    void from_json(const json & j, Noexcept & x);
+    void to_json(json & j, const Noexcept & x);
+
     void from_json(const json & j, NoneClass & x);
     void to_json(json & j, const NoneClass & x);
 
@@ -7359,9 +7441,6 @@ namespace quicktype {
     void from_json(const json & j, Sel & x);
     void to_json(json & j, const Sel & x);
 
-    void from_json(const json & j, Select & x);
-    void to_json(json & j, const Select & x);
-
     void from_json(const json & j, Obj4 & x);
     void to_json(json & j, const Obj4 & x);
 
@@ -7431,15 +7510,15 @@ namespace quicktype {
     void from_json(const json & j, Union & x);
     void to_json(json & j, const Union & x);
 
-    void from_json(const json & j, Unsigned & x);
-    void to_json(json & j, const Unsigned & x);
-
     void from_json(const json & j, PrimitiveKind & x);
     void to_json(json & j, const PrimitiveKind & x);
 
     void from_json(const json & j, TrueClass & x);
     void to_json(json & j, const TrueClass & x);
 
+    void from_json(const json & j, Select & x);
+    void to_json(json & j, const Select & x);
+
     void from_json(const json & j, Self & x);
     void to_json(json & j, const Self & x);
 
@@ -7512,6 +7591,9 @@ namespace quicktype {
     void from_json(const json & j, TimeZone & x);
     void to_json(json & j, const TimeZone & x);
 
+    void from_json(const json & j, ToDict & x);
+    void to_json(json & j, const ToDict & x);
+
     void from_json(const json & j, ToJson & x);
     void to_json(json & j, const ToJson & x);
 
@@ -7545,6 +7627,9 @@ namespace quicktype {
     void from_json(const json & j, Undefined & x);
     void to_json(json & j, const Undefined & x);
 
+    void from_json(const json & j, UnmarshalJson & x);
+    void to_json(json & j, const UnmarshalJson & x);
+
     void from_json(const json & j, Unowned & x);
     void to_json(json & j, const Unowned & x);
 
@@ -7554,12 +7639,12 @@ namespace quicktype {
     void from_json(const json & j, UseSerializers & x);
     void to_json(json & j, const UseSerializers & x);
 
-    void from_json(const json & j, Ushort & x);
-    void to_json(json & j, const Ushort & x);
-
     void from_json(const json & j, Obj5 & x);
     void to_json(json & j, const Obj5 & x);
 
+    void from_json(const json & j, Unsigned & x);
+    void to_json(json & j, const Unsigned & x);
+
     void from_json(const json & j, Using & x);
     void to_json(json & j, const Using & x);
 
@@ -7584,6 +7669,9 @@ namespace quicktype {
     void from_json(const json & j, XorEq & x);
     void to_json(json & j, const XorEq & x);
 
+    void from_json(const json & j, Ushort & x);
+    void to_json(json & j, const Ushort & x);
+
     void from_json(const json & j, Utf8JsonReader & x);
     void to_json(json & j, const Utf8JsonReader & x);
 
@@ -8905,6 +8993,17 @@ namespace quicktype {
         j["from"] = x.get_from();
     }
 
+    inline void from_json(const json & j, FromDict& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("from_dict") != j.end() && !j.at("from_dict").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_from_dict(j.at("from_dict").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const FromDict & x) {
+        j = json::object();
+        j["from_dict"] = x.get_from_dict();
+    }
+
     inline void from_json(const json & j, FromJson& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("from_json") != j.end() && !j.at("from_json").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9147,17 +9246,6 @@ namespace quicktype {
         j["friend"] = x.get_friend_friend();
     }
 
-    inline void from_json(const json & j, Goto& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("goto") != j.end() && !j.at("goto").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_goto_goto(j.at("goto").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Goto & x) {
-        j = json::object();
-        j["goto"] = x.get_goto_goto();
-    }
-
     inline void from_json(const json & j, FalseClass& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("false") != j.end() && !j.at("false").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9213,6 +9301,7 @@ namespace quicktype {
         x.set_foreach(j.at("foreach").get<Foreach>());
         x.set_format_exception(j.at("FormatException").get<FormatException>());
         x.set_from(j.at("from").get<From>());
+        x.set_from_dict(j.at("from_dict").get<FromDict>());
         x.set_from_json(j.at("from_json").get<FromJson>());
         x.set_func(j.at("func").get<Func>());
         x.set_function(j.at("function").get<Function>());
@@ -9235,7 +9324,6 @@ namespace quicktype {
         x.set_obj2_float(j.at("float").get<Float>());
         x.set_obj2_for(j.at("for").get<For>());
         x.set_obj2_friend(j.at("friend").get<Friend>());
-        x.set_obj2_goto(j.at("goto").get<Goto>());
         x.set_purple_false(j.at("false").get<FalseClass>());
     }
 
@@ -9282,6 +9370,7 @@ namespace quicktype {
         j["foreach"] = x.get_foreach();
         j["FormatException"] = x.get_format_exception();
         j["from"] = x.get_from();
+        j["from_dict"] = x.get_from_dict();
         j["from_json"] = x.get_from_json();
         j["func"] = x.get_func();
         j["function"] = x.get_function();
@@ -9304,7 +9393,6 @@ namespace quicktype {
         j["float"] = x.get_obj2_float();
         j["for"] = x.get_obj2_for();
         j["friend"] = x.get_obj2_friend();
-        j["goto"] = x.get_obj2_goto();
         j["false"] = x.get_purple_false();
     }
 
@@ -9835,6 +9923,17 @@ namespace quicktype {
         j["MapEntry"] = x.get_map_entry();
     }
 
+    inline void from_json(const json & j, MarshalJson& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("MarshalJSON") != j.end() && !j.at("MarshalJSON").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_marshal_json(j.at("MarshalJSON").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const MarshalJson & x) {
+        j = json::object();
+        j["MarshalJSON"] = x.get_marshal_json();
+    }
+
     inline void from_json(const json & j, MetadataPropertyHandling& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("metadata_property_handling") != j.end() && !j.at("metadata_property_handling").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9901,6 +10000,17 @@ namespace quicktype {
         j["NO"] = x.get_no();
     }
 
+    inline void from_json(const json & j, Goto& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("goto") != j.end() && !j.at("goto").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_goto_goto(j.at("goto").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Goto & x) {
+        j = json::object();
+        j["goto"] = x.get_goto_goto();
+    }
+
     inline void from_json(const json & j, If& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("if") != j.end() && !j.at("if").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10000,17 +10110,6 @@ namespace quicktype {
         j["new"] = x.get_new_new();
     }
 
-    inline void from_json(const json & j, Noexcept& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("noexcept") != j.end() && !j.at("noexcept").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_noexcept_noexcept(j.at("noexcept").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Noexcept & x) {
-        j = json::object();
-        j["noexcept"] = x.get_noexcept_noexcept();
-    }
-
     inline void from_json(const json & j, Obj3& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10063,12 +10162,14 @@ namespace quicktype {
         x.set_lock(j.at("lock").get<Lock>());
         x.set_map(j.at("map").get<Map>());
         x.set_map_entry(j.at("MapEntry").get<MapEntry>());
+        x.set_marshal_json(j.at("MarshalJSON").get<MarshalJson>());
         x.set_metadata_property_handling(j.at("metadata_property_handling").get<MetadataPropertyHandling>());
         x.set_mutating(j.at("mutating").get<Mutating>());
         x.set_native(j.at("native").get<Native>());
         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_obj3_goto(j.at("goto").get<Goto>());
         x.set_obj3_if(j.at("if").get<If>());
         x.set_obj3_import(j.at("import").get<Import>());
         x.set_obj3_inline(j.at("inline").get<Inline>());
@@ -10078,7 +10179,6 @@ namespace quicktype {
         x.set_obj3_mutable(j.at("mutable").get<Mutable>());
         x.set_obj3_namespace(j.at("namespace").get<Namespace>());
         x.set_obj3_new(j.at("new").get<New>());
-        x.set_obj3_noexcept(j.at("noexcept").get<Noexcept>());
     }
 
     inline void to_json(json & j, const Obj3 & x) {
@@ -10132,12 +10232,14 @@ namespace quicktype {
         j["lock"] = x.get_lock();
         j["map"] = x.get_map();
         j["MapEntry"] = x.get_map_entry();
+        j["MarshalJSON"] = x.get_marshal_json();
         j["metadata_property_handling"] = x.get_metadata_property_handling();
         j["mutating"] = x.get_mutating();
         j["native"] = x.get_native();
         j["newtonsoft"] = x.get_newtonsoft();
         j["nil"] = x.get_nil();
         j["NO"] = x.get_no();
+        j["goto"] = x.get_obj3_goto();
         j["if"] = x.get_obj3_if();
         j["import"] = x.get_obj3_import();
         j["inline"] = x.get_obj3_inline();
@@ -10147,7 +10249,6 @@ namespace quicktype {
         j["mutable"] = x.get_obj3_mutable();
         j["namespace"] = x.get_obj3_namespace();
         j["new"] = x.get_obj3_new();
-        j["noexcept"] = x.get_obj3_noexcept();
     }
 
     inline void from_json(const json & j, NoSuchMethod& x) {
@@ -10260,6 +10361,17 @@ namespace quicktype {
         j["number"] = x.get_number();
     }
 
+    inline void from_json(const json & j, Noexcept& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("noexcept") != j.end() && !j.at("noexcept").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_noexcept_noexcept(j.at("noexcept").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Noexcept & x) {
+        j = json::object();
+        j["noexcept"] = x.get_noexcept_noexcept();
+    }
+
     inline void from_json(const json & j, NoneClass& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("none") != j.end() && !j.at("none").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10843,17 +10955,6 @@ namespace quicktype {
         j["SEL"] = x.get_sel();
     }
 
-    inline void from_json(const json & j, Select& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("select") != j.end() && !j.at("select").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_select(j.at("select").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Select & x) {
-        j = json::object();
-        j["select"] = x.get_select();
-    }
-
     inline void from_json(const json & j, Obj4& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -10868,6 +10969,7 @@ namespace quicktype {
         x.set_ns_string(j.at("NSString").get<NsString>());
         x.set_null(j.at("NULL").get<Null>());
         x.set_number(j.at("number").get<Number>());
+        x.set_obj4_noexcept(j.at("noexcept").get<Noexcept>());
         x.set_obj4_none(j.at("none").get<NoneClass>());
         x.set_obj4_not(j.at("not").get<Not>());
         x.set_obj4_not_eq(j.at("not_eq").get<NotEq>());
@@ -10921,7 +11023,6 @@ namespace quicktype {
         x.set_sbyte(j.at("sbyte").get<Sbyte>());
         x.set_sealed(j.at("sealed").get<Sealed>());
         x.set_sel(j.at("SEL").get<Sel>());
-        x.set_select(j.at("select").get<Select>());
     }
 
     inline void to_json(json & j, const Obj4 & x) {
@@ -10937,6 +11038,7 @@ namespace quicktype {
         j["NSString"] = x.get_ns_string();
         j["NULL"] = x.get_null();
         j["number"] = x.get_number();
+        j["noexcept"] = x.get_obj4_noexcept();
         j["none"] = x.get_obj4_none();
         j["not"] = x.get_obj4_not();
         j["not_eq"] = x.get_obj4_not_eq();
@@ -10990,7 +11092,6 @@ namespace quicktype {
         j["sbyte"] = x.get_sbyte();
         j["sealed"] = x.get_sealed();
         j["SEL"] = x.get_sel();
-        j["select"] = x.get_select();
     }
 
     inline void from_json(const json & j, KSerializer& x) {
@@ -11235,17 +11336,6 @@ namespace quicktype {
         j["union"] = x.get_union_union();
     }
 
-    inline void from_json(const json & j, Unsigned& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("unsigned") != j.end() && !j.at("unsigned").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_unsigned_unsigned(j.at("unsigned").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Unsigned & x) {
-        j = json::object();
-        j["unsigned"] = x.get_unsigned_unsigned();
-    }
-
     inline void from_json(const json & j, PrimitiveKind& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("PrimitiveKind") != j.end() && !j.at("PrimitiveKind").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11268,6 +11358,17 @@ namespace quicktype {
         j["true"] = x.get_true_true();
     }
 
+    inline void from_json(const json & j, Select& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("select") != j.end() && !j.at("select").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_select(j.at("select").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Select & x) {
+        j = json::object();
+        j["select"] = x.get_select();
+    }
+
     inline void from_json(const json & j, Self& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("Self") != j.end() && !j.at("Self").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11532,6 +11633,17 @@ namespace quicktype {
         j["TimeZone"] = x.get_time_zone();
     }
 
+    inline void from_json(const json & j, ToDict& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("to_dict") != j.end() && !j.at("to_dict").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_to_dict(j.at("to_dict").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const ToDict & x) {
+        j = json::object();
+        j["to_dict"] = x.get_to_dict();
+    }
+
     inline void from_json(const json & j, ToJson& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("to_json") != j.end() && !j.at("to_json").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11653,6 +11765,17 @@ namespace quicktype {
         j["undefined"] = x.get_undefined();
     }
 
+    inline void from_json(const json & j, UnmarshalJson& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("UnmarshalJSON") != j.end() && !j.at("UnmarshalJSON").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_unmarshal_json(j.at("UnmarshalJSON").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const UnmarshalJson & x) {
+        j = json::object();
+        j["UnmarshalJSON"] = x.get_unmarshal_json();
+    }
+
     inline void from_json(const json & j, Unowned& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("unowned") != j.end() && !j.at("unowned").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11686,17 +11809,6 @@ namespace quicktype {
         j["UseSerializers"] = x.get_use_serializers();
     }
 
-    inline void from_json(const json & j, Ushort& x) {
-        if (!j.is_object()) throw std::runtime_error("Expected object");
-        if (j.find("ushort") != j.end() && !j.at("ushort").is_number_integer()) throw std::runtime_error("Expected integer");
-        x.set_ushort(j.at("ushort").get<int64_t>());
-    }
-
-    inline void to_json(json & j, const Ushort & x) {
-        j = json::object();
-        j["ushort"] = x.get_ushort();
-    }
-
     inline void from_json(const json & j, Obj5& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -11723,9 +11835,9 @@ namespace quicktype {
         x.set_obj5_typeid(j.at("typeid").get<Typeid>());
         x.set_obj5_typename(j.at("typename").get<Typename>());
         x.set_obj5_union(j.at("union").get<Union>());
-        x.set_obj5_unsigned(j.at("unsigned").get<Unsigned>());
         x.set_primitive_kind(j.at("PrimitiveKind").get<PrimitiveKind>());
         x.set_purple_true(j.at("true").get<TrueClass>());
+        x.set_select(j.at("select").get<Select>());
         x.set_self(j.at("Self").get<Self>());
         x.set_sendable(j.at("Sendable").get<Sendable>());
         x.set_serial_descriptor(j.at("SerialDescriptor").get<SerialDescriptor>());
@@ -11750,6 +11862,7 @@ namespace quicktype {
         x.set_time_only(j.at("TimeOnly").get<TimeOnly>());
         x.set_time_only_converter(j.at("TimeOnlyConverter").get<TimeOnlyConverter>());
         x.set_time_zone(j.at("TimeZone").get<TimeZone>());
+        x.set_to_dict(j.at("to_dict").get<ToDict>());
         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>());
@@ -11761,10 +11874,10 @@ namespace quicktype {
         x.set_ulong(j.at("ulong").get<Ulong>());
         x.set_unchecked(j.at("unchecked").get<Unchecked>());
         x.set_undefined(j.at("undefined").get<Undefined>());
+        x.set_unmarshal_json(j.at("UnmarshalJSON").get<UnmarshalJson>());
         x.set_unowned(j.at("unowned").get<Unowned>());
         x.set_unsafe(j.at("unsafe").get<Unsafe>());
         x.set_use_serializers(j.at("UseSerializers").get<UseSerializers>());
-        x.set_ushort(j.at("ushort").get<Ushort>());
     }
 
     inline void to_json(json & j, const Obj5 & x) {
@@ -11792,9 +11905,9 @@ namespace quicktype {
         j["typeid"] = x.get_obj5_typeid();
         j["typename"] = x.get_obj5_typename();
         j["union"] = x.get_obj5_union();
-        j["unsigned"] = x.get_obj5_unsigned();
         j["PrimitiveKind"] = x.get_primitive_kind();
         j["true"] = x.get_purple_true();
+        j["select"] = x.get_select();
         j["Self"] = x.get_self();
         j["Sendable"] = x.get_sendable();
         j["SerialDescriptor"] = x.get_serial_descriptor();
@@ -11819,6 +11932,7 @@ namespace quicktype {
         j["TimeOnly"] = x.get_time_only();
         j["TimeOnlyConverter"] = x.get_time_only_converter();
         j["TimeZone"] = x.get_time_zone();
+        j["to_dict"] = x.get_to_dict();
         j["to_json"] = x.get_to_json();
         j["toString"] = x.get_to_string();
         j["top_level"] = x.get_top_level();
@@ -11830,10 +11944,21 @@ namespace quicktype {
         j["ulong"] = x.get_ulong();
         j["unchecked"] = x.get_unchecked();
         j["undefined"] = x.get_undefined();
+        j["UnmarshalJSON"] = x.get_unmarshal_json();
         j["unowned"] = x.get_unowned();
         j["unsafe"] = x.get_unsafe();
         j["UseSerializers"] = x.get_use_serializers();
-        j["ushort"] = x.get_ushort();
+    }
+
+    inline void from_json(const json & j, Unsigned& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("unsigned") != j.end() && !j.at("unsigned").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_unsigned_unsigned(j.at("unsigned").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Unsigned & x) {
+        j = json::object();
+        j["unsigned"] = x.get_unsigned_unsigned();
     }
 
     inline void from_json(const json & j, Using& x) {
@@ -11924,6 +12049,17 @@ namespace quicktype {
         j["xor_eq"] = x.get_xor_eq_xor_eq();
     }
 
+    inline void from_json(const json & j, Ushort& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("ushort") != j.end() && !j.at("ushort").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_ushort(j.at("ushort").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const Ushort & x) {
+        j = json::object();
+        j["ushort"] = x.get_ushort();
+    }
+
     inline void from_json(const json & j, Utf8JsonReader& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("Utf8JsonReader") != j.end() && !j.at("Utf8JsonReader").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -12038,6 +12174,7 @@ namespace quicktype {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("dummy") != j.end() && !j.at("dummy").is_number_integer()) throw std::runtime_error("Expected integer");
         x.set_dummy(j.at("dummy").get<int64_t>());
+        x.set_obj6_unsigned(j.at("unsigned").get<Unsigned>());
         x.set_obj6_using(j.at("using").get<Using>());
         x.set_obj6_virtual(j.at("virtual").get<Virtual>());
         x.set_obj6_void(j.at("void").get<Void>());
@@ -12046,6 +12183,7 @@ namespace quicktype {
         x.set_obj6_while(j.at("while").get<While>());
         x.set_obj6_xor(j.at("xor").get<Xor>());
         x.set_obj6_xor_eq(j.at("xor_eq").get<XorEq>());
+        x.set_ushort(j.at("ushort").get<Ushort>());
         x.set_utf8_json_reader(j.at("Utf8JsonReader").get<Utf8JsonReader>());
         x.set_utf8_json_writer(j.at("Utf8JsonWriter").get<Utf8JsonWriter>());
         x.set_uuid(j.at("UUID").get<Uuid>());
@@ -12061,6 +12199,7 @@ namespace quicktype {
     inline void to_json(json & j, const Obj6 & x) {
         j = json::object();
         j["dummy"] = x.get_dummy();
+        j["unsigned"] = x.get_obj6_unsigned();
         j["using"] = x.get_obj6_using();
         j["virtual"] = x.get_obj6_virtual();
         j["void"] = x.get_obj6_void();
@@ -12069,6 +12208,7 @@ namespace quicktype {
         j["while"] = x.get_obj6_while();
         j["xor"] = x.get_obj6_xor();
         j["xor_eq"] = x.get_obj6_xor_eq();
+        j["ushort"] = x.get_ushort();
         j["Utf8JsonReader"] = x.get_utf8_json_reader();
         j["Utf8JsonWriter"] = x.get_utf8_json_writer();
         j["UUID"] = x.get_uuid();
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 642ea9f..a6d8203 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
@@ -692,6 +692,8 @@ class Obj2
 
   property from : From
 
+  property from_dict : FromDict
+
   property from_json : FromJson
 
   property func : Func
@@ -704,8 +706,6 @@ class Obj2
 
   property go : Go
 
-  property goto : Goto
-
   @[JSON::Field(key: "def")]
   property obj2_def : Def
 
@@ -1041,6 +1041,12 @@ class From
   property from : Int64
 end
 
+class FromDict
+  include JSON::Serializable
+
+  property from_dict : Int64
+end
+
 class FromJson
   include JSON::Serializable
 
@@ -1077,12 +1083,6 @@ class Go
   property go : Int64
 end
 
-class Goto
-  include JSON::Serializable
-
-  property goto : Int64
-end
-
 class Def
   include JSON::Serializable
 
@@ -1137,6 +1137,8 @@ class Obj3
 
   property dummy : Int64
 
+  property goto : Goto
+
   property guard : Guard
 
   @[JSON::Field(key: "hasOwnProperty")]
@@ -1258,6 +1260,9 @@ class Obj3
   @[JSON::Field(key: "MapEntry")]
   property map_entry : MapEntry
 
+  @[JSON::Field(key: "MarshalJSON")]
+  property marshal_json : MarshalJson
+
   property metadata_property_handling : MetadataPropertyHandling
 
   property mutable : Mutable
@@ -1275,8 +1280,6 @@ class Obj3
   @[JSON::Field(key: "NO")]
   property no : No
 
-  property noexcept : Noexcept
-
   @[JSON::Field(key: "if")]
   property obj3_if : If
 
@@ -1290,6 +1293,12 @@ class Obj3
   property obj3_nil : NilClass
 end
 
+class Goto
+  include JSON::Serializable
+
+  property goto : Int64
+end
+
 class Guard
   include JSON::Serializable
 
@@ -1615,6 +1624,13 @@ class MapEntry
   property map_entry : Int64
 end
 
+class MarshalJson
+  include JSON::Serializable
+
+  @[JSON::Field(key: "MarshalJSON")]
+  property marshal_json : Int64
+end
+
 class MetadataPropertyHandling
   include JSON::Serializable
 
@@ -1664,12 +1680,6 @@ class No
   property no : Int64
 end
 
-class Noexcept
-  include JSON::Serializable
-
-  property noexcept : Int64
-end
-
 class If
   include JSON::Serializable
 
@@ -1706,6 +1716,8 @@ class Obj4
   @[JSON::Field(key: "noSuchMethod")]
   property no_such_method : NoSuchMethod
 
+  property noexcept : Noexcept
+
   property nonatomic : Nonatomic
 
   @[JSON::Field(key: "None")]
@@ -1762,9 +1774,6 @@ class Obj4
   @[JSON::Field(key: "return")]
   property obj4_return : Return
 
-  @[JSON::Field(key: "select")]
-  property obj4_select : Select
-
   property object : ObjectClass
 
   @[JSON::Field(key: "ObjectMapper")]
@@ -1861,6 +1870,12 @@ class NoSuchMethod
   property no_such_method : Int64
 end
 
+class Noexcept
+  include JSON::Serializable
+
+  property noexcept : Int64
+end
+
 class Nonatomic
   include JSON::Serializable
 
@@ -1998,13 +2013,6 @@ class Return
   property return_return : Int64
 end
 
-class Select
-  include JSON::Serializable
-
-  @[JSON::Field(key: "select")]
-  property select_select : Int64
-end
-
 class ObjectClass
   include JSON::Serializable
 
@@ -2265,6 +2273,9 @@ class Obj5
   @[JSON::Field(key: "KSerializer")]
   property k_serializer : KSerializer
 
+  @[JSON::Field(key: "select")]
+  property obj5_select : Select
+
   @[JSON::Field(key: "Self")]
   property obj5_self : Self
 
@@ -2383,6 +2394,8 @@ class Obj5
   @[JSON::Field(key: "TimeZone")]
   property time_zone : TimeZone
 
+  property to_dict : ToDict
+
   @[JSON::Field(key: "toString")]
   property to_string : ToString
 
@@ -2408,16 +2421,15 @@ class Obj5
 
   property undefined : Undefined
 
+  @[JSON::Field(key: "UnmarshalJSON")]
+  property unmarshal_json : UnmarshalJson
+
   property unowned : Unowned
 
   property unsafe : Unsafe
 
-  property unsigned : Unsigned
-
   @[JSON::Field(key: "UseSerializers")]
   property use_serializers : UseSerializers
-
-  property ushort : Ushort
 end
 
 class KSerializer
@@ -2427,6 +2439,13 @@ class KSerializer
   property k_serializer : Int64
 end
 
+class Select
+  include JSON::Serializable
+
+  @[JSON::Field(key: "select")]
+  property select_select : Int64
+end
+
 class Self
   include JSON::Serializable
 
@@ -2729,6 +2748,12 @@ class TimeZone
   property time_zone : Int64
 end
 
+class ToDict
+  include JSON::Serializable
+
+  property to_dict : Int64
+end
+
 class ToString
   include JSON::Serializable
 
@@ -2802,22 +2827,23 @@ class Undefined
   property undefined : Int64
 end
 
-class Unowned
+class UnmarshalJson
   include JSON::Serializable
 
-  property unowned : Int64
+  @[JSON::Field(key: "UnmarshalJSON")]
+  property unmarshal_json : Int64
 end
 
-class Unsafe
+class Unowned
   include JSON::Serializable
 
-  property unsafe : Int64
+  property unowned : Int64
 end
 
-class Unsigned
+class Unsafe
   include JSON::Serializable
 
-  property unsigned : Int64
+  property unsafe : Int64
 end
 
 class UseSerializers
@@ -2827,12 +2853,6 @@ class UseSerializers
   property use_serializers : Int64
 end
 
-class Ushort
-  include JSON::Serializable
-
-  property ushort : Int64
-end
-
 class Obj6
   include JSON::Serializable
 
@@ -2847,6 +2867,10 @@ class Obj6
   @[JSON::Field(key: "yield")]
   property obj6_yield : Yield
 
+  property unsigned : Unsigned
+
+  property ushort : Ushort
+
   property using : Using
 
   @[JSON::Field(key: "Utf8JsonReader")]
@@ -2904,6 +2928,18 @@ class Yield
   property yield_yield : Int64
 end
 
+class Unsigned
+  include JSON::Serializable
+
+  property unsigned : Int64
+end
+
+class Ushort
+  include JSON::Serializable
+
+  property ushort : Int64
+end
+
 class Using
   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 fe61ba2..2a31669 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
@@ -802,6 +802,9 @@ namespace QuickType
         [JsonProperty("from", Required = Required.Always)]
         public From From { get; set; }
 
+        [JsonProperty("from_dict", Required = Required.Always)]
+        public FromDict FromDict { get; set; }
+
         [JsonProperty("func", Required = Required.Always)]
         public Func Func { get; set; }
 
@@ -817,9 +820,6 @@ namespace QuickType
         [JsonProperty("go", Required = Required.Always)]
         public Go Go { get; set; }
 
-        [JsonProperty("goto", Required = Required.Always)]
-        public Goto Goto { get; set; }
-
         [JsonProperty("false", Required = Required.Always)]
         public FalseClass Obj2False { get; set; }
 
@@ -1163,6 +1163,12 @@ namespace QuickType
         public long FromFrom { get; set; }
     }
 
+    public partial class FromDict
+    {
+        [JsonProperty("from_dict", Required = Required.Always)]
+        public long FromDictFromDict { get; set; }
+    }
+
     public partial class Func
     {
         [JsonProperty("func", Required = Required.Always)]
@@ -1193,12 +1199,6 @@ namespace QuickType
         public long GoGo { get; set; }
     }
 
-    public partial class Goto
-    {
-        [JsonProperty("goto", Required = Required.Always)]
-        public long GotoGoto { get; set; }
-    }
-
     public partial class FalseClass
     {
         [JsonProperty("false", Required = Required.Always)]
@@ -1216,6 +1216,9 @@ namespace QuickType
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("goto", Required = Required.Always)]
+        public Goto Goto { get; set; }
+
         [JsonProperty("guard", Required = Required.Always)]
         public Guard Guard { get; set; }
 
@@ -1375,6 +1378,9 @@ namespace QuickType
         [JsonProperty("MapEntry", Required = Required.Always)]
         public MapEntry MapEntry { get; set; }
 
+        [JsonProperty("MarshalJSON", Required = Required.Always)]
+        public MarshalJson MarshalJson { get; set; }
+
         [JsonProperty("metadata_property_handling", Required = Required.Always)]
         public MetadataPropertyHandlingClass MetadataPropertyHandling { get; set; }
 
@@ -1404,9 +1410,12 @@ namespace QuickType
 
         [JsonProperty("NO", Required = Required.Always)]
         public No No { get; set; }
+    }
 
-        [JsonProperty("noexcept", Required = Required.Always)]
-        public Noexcept Noexcept { get; set; }
+    public partial class Goto
+    {
+        [JsonProperty("goto", Required = Required.Always)]
+        public long GotoGoto { get; set; }
     }
 
     public partial class Guard
@@ -1727,6 +1736,12 @@ namespace QuickType
         public long MapEntryMapEntry { get; set; }
     }
 
+    public partial class MarshalJson
+    {
+        [JsonProperty("MarshalJSON", Required = Required.Always)]
+        public long MarshalJsonMarshalJson { get; set; }
+    }
+
     public partial class MetadataPropertyHandlingClass
     {
         [JsonProperty("metadata_property_handling", Required = Required.Always)]
@@ -1787,12 +1802,6 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
-    public partial class Noexcept
-    {
-        [JsonProperty("noexcept", Required = Required.Always)]
-        public long NoexceptNoexcept { get; set; }
-    }
-
     public partial class Obj4
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -1801,6 +1810,9 @@ namespace QuickType
         [JsonProperty("noSuchMethod", Required = Required.Always)]
         public NoSuchMethod NoSuchMethod { get; set; }
 
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public Noexcept Noexcept { get; set; }
+
         [JsonProperty("nonatomic", Required = Required.Always)]
         public Nonatomic Nonatomic { get; set; }
 
@@ -1986,9 +1998,6 @@ namespace QuickType
 
         [JsonProperty("SEL", Required = Required.Always)]
         public Sel Sel { get; set; }
-
-        [JsonProperty("select", Required = Required.Always)]
-        public Select Select { get; set; }
     }
 
     public partial class NoSuchMethod
@@ -1997,6 +2006,12 @@ namespace QuickType
         public long NoSuchMethodNoSuchMethod { get; set; }
     }
 
+    public partial class Noexcept
+    {
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public long NoexceptNoexcept { get; set; }
+    }
+
     public partial class Nonatomic
     {
         [JsonProperty("nonatomic", Required = Required.Always)]
@@ -2369,12 +2384,6 @@ namespace QuickType
         public long SelSel { get; set; }
     }
 
-    public partial class Select
-    {
-        [JsonProperty("select", Required = Required.Always)]
-        public long SelectSelect { get; set; }
-    }
-
     public partial class Obj5
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -2401,6 +2410,9 @@ namespace QuickType
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonProperty("select", Required = Required.Always)]
+        public Select Select { get; set; }
+
         [JsonProperty("Self", Required = Required.Always)]
         public Self Self { get; set; }
 
@@ -2512,6 +2524,9 @@ namespace QuickType
         [JsonProperty("TimeZone", Required = Required.Always)]
         public TimeZone TimeZone { get; set; }
 
+        [JsonProperty("to_dict", Required = Required.Always)]
+        public ToDict ToDict { get; set; }
+
         [JsonProperty("top_level", Required = Required.Always)]
         public TopLevelClass TopLevel { get; set; }
 
@@ -2557,20 +2572,17 @@ namespace QuickType
         [JsonProperty("union", Required = Required.Always)]
         public Union Union { get; set; }
 
+        [JsonProperty("UnmarshalJSON", Required = Required.Always)]
+        public UnmarshalJson UnmarshalJson { get; set; }
+
         [JsonProperty("unowned", Required = Required.Always)]
         public Unowned Unowned { get; set; }
 
         [JsonProperty("unsafe", Required = Required.Always)]
         public Unsafe Unsafe { get; set; }
 
-        [JsonProperty("unsigned", Required = Required.Always)]
-        public Unsigned Unsigned { get; set; }
-
         [JsonProperty("UseSerializers", Required = Required.Always)]
         public UseSerializers UseSerializers { get; set; }
-
-        [JsonProperty("ushort", Required = Required.Always)]
-        public Ushort Ushort { get; set; }
     }
 
     public partial class KSerializer
@@ -2615,6 +2627,12 @@ namespace QuickType
         public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
+    public partial class Select
+    {
+        [JsonProperty("select", Required = Required.Always)]
+        public long SelectSelect { get; set; }
+    }
+
     public partial class Self
     {
         [JsonProperty("Self", Required = Required.Always)]
@@ -2837,6 +2855,12 @@ namespace QuickType
         public long TimeZoneTimeZone { get; set; }
     }
 
+    public partial class ToDict
+    {
+        [JsonProperty("to_dict", Required = Required.Always)]
+        public long ToDictToDict { get; set; }
+    }
+
     public partial class TopLevelClass
     {
         [JsonProperty("top_level", Required = Required.Always)]
@@ -2927,6 +2951,12 @@ namespace QuickType
         public long UnionUnion { get; set; }
     }
 
+    public partial class UnmarshalJson
+    {
+        [JsonProperty("UnmarshalJSON", Required = Required.Always)]
+        public long UnmarshalJsonUnmarshalJson { get; set; }
+    }
+
     public partial class Unowned
     {
         [JsonProperty("unowned", Required = Required.Always)]
@@ -2939,29 +2969,23 @@ namespace QuickType
         public long UnsafeUnsafe { get; set; }
     }
 
-    public partial class Unsigned
-    {
-        [JsonProperty("unsigned", Required = Required.Always)]
-        public long UnsignedUnsigned { get; set; }
-    }
-
     public partial class UseSerializers
     {
         [JsonProperty("UseSerializers", Required = Required.Always)]
         public long UseSerializersUseSerializers { get; set; }
     }
 
-    public partial class Ushort
-    {
-        [JsonProperty("ushort", Required = Required.Always)]
-        public long UshortUshort { get; set; }
-    }
-
     public partial class Obj6
     {
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public Unsigned Unsigned { get; set; }
+
+        [JsonProperty("ushort", Required = Required.Always)]
+        public Ushort Ushort { get; set; }
+
         [JsonProperty("using", Required = Required.Always)]
         public Using Using { get; set; }
 
@@ -3017,6 +3041,18 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial class Unsigned
+    {
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public long UnsignedUnsigned { get; set; }
+    }
+
+    public partial class Ushort
+    {
+        [JsonProperty("ushort", Required = Required.Always)]
+        public long UshortUshort { get; set; }
+    }
+
     public partial class Using
     {
         [JsonProperty("using", 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 a8d7a19..6d22fb2 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
@@ -992,6 +992,10 @@ namespace QuickType
         [JsonPropertyName("from")]
         public From From { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("from_dict")]
+        public FromDict FromDict { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("func")]
         public Func Func { get; set; }
@@ -1012,10 +1016,6 @@ namespace QuickType
         [JsonPropertyName("go")]
         public Go Go { get; set; }
 
-        [JsonRequired]
-        [JsonPropertyName("goto")]
-        public Goto Goto { get; set; }
-
         [JsonRequired]
         [JsonPropertyName("false")]
         public FalseClass Obj2False { get; set; }
@@ -1417,6 +1417,13 @@ namespace QuickType
         public long FromFrom { get; set; }
     }
 
+    public partial class FromDict
+    {
+        [JsonRequired]
+        [JsonPropertyName("from_dict")]
+        public long FromDictFromDict { get; set; }
+    }
+
     public partial class Func
     {
         [JsonRequired]
@@ -1452,13 +1459,6 @@ namespace QuickType
         public long GoGo { get; set; }
     }
 
-    public partial class Goto
-    {
-        [JsonRequired]
-        [JsonPropertyName("goto")]
-        public long GotoGoto { get; set; }
-    }
-
     public partial class FalseClass
     {
         [JsonRequired]
@@ -1479,6 +1479,10 @@ namespace QuickType
         [JsonPropertyName("dummy")]
         public long Dummy { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("goto")]
+        public Goto Goto { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("guard")]
         public Guard Guard { get; set; }
@@ -1691,6 +1695,10 @@ namespace QuickType
         [JsonPropertyName("MapEntry")]
         public MapEntry MapEntry { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("MarshalJSON")]
+        public MarshalJson MarshalJson { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("metadata_property_handling")]
         public MetadataPropertyHandling MetadataPropertyHandling { get; set; }
@@ -1730,10 +1738,13 @@ namespace QuickType
         [JsonRequired]
         [JsonPropertyName("NO")]
         public No No { get; set; }
+    }
 
+    public partial class Goto
+    {
         [JsonRequired]
-        [JsonPropertyName("noexcept")]
-        public Noexcept Noexcept { get; set; }
+        [JsonPropertyName("goto")]
+        public long GotoGoto { get; set; }
     }
 
     public partial class Guard
@@ -2107,6 +2118,13 @@ namespace QuickType
         public long MapEntryMapEntry { get; set; }
     }
 
+    public partial class MarshalJson
+    {
+        [JsonRequired]
+        [JsonPropertyName("MarshalJSON")]
+        public long MarshalJsonMarshalJson { get; set; }
+    }
+
     public partial class MetadataPropertyHandling
     {
         [JsonRequired]
@@ -2177,13 +2195,6 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
-    public partial class Noexcept
-    {
-        [JsonRequired]
-        [JsonPropertyName("noexcept")]
-        public long NoexceptNoexcept { get; set; }
-    }
-
     public partial class Obj4
     {
         [JsonRequired]
@@ -2194,6 +2205,10 @@ namespace QuickType
         [JsonPropertyName("noSuchMethod")]
         public NoSuchMethod NoSuchMethod { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("noexcept")]
+        public Noexcept Noexcept { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("nonatomic")]
         public Nonatomic Nonatomic { get; set; }
@@ -2441,10 +2456,6 @@ namespace QuickType
         [JsonRequired]
         [JsonPropertyName("SEL")]
         public Sel Sel { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("select")]
-        public Select Select { get; set; }
     }
 
     public partial class NoSuchMethod
@@ -2454,6 +2465,13 @@ namespace QuickType
         public long NoSuchMethodNoSuchMethod { get; set; }
     }
 
+    public partial class Noexcept
+    {
+        [JsonRequired]
+        [JsonPropertyName("noexcept")]
+        public long NoexceptNoexcept { get; set; }
+    }
+
     public partial class Nonatomic
     {
         [JsonRequired]
@@ -2888,13 +2906,6 @@ namespace QuickType
         public long SelSel { get; set; }
     }
 
-    public partial class Select
-    {
-        [JsonRequired]
-        [JsonPropertyName("select")]
-        public long SelectSelect { get; set; }
-    }
-
     public partial class Obj5
     {
         [JsonRequired]
@@ -2929,6 +2940,10 @@ namespace QuickType
         [JsonPropertyName("PrimitiveKind")]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("select")]
+        public Select Select { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("Self")]
         public Self Self { get; set; }
@@ -3077,6 +3092,10 @@ namespace QuickType
         [JsonPropertyName("TimeZone")]
         public TimeZone TimeZone { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("to_dict")]
+        public ToDict ToDict { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("top_level")]
         public TopLevelClass TopLevel { get; set; }
@@ -3137,6 +3156,10 @@ namespace QuickType
         [JsonPropertyName("union")]
         public Union Union { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("UnmarshalJSON")]
+        public UnmarshalJson UnmarshalJson { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("unowned")]
         public Unowned Unowned { get; set; }
@@ -3145,17 +3168,9 @@ namespace QuickType
         [JsonPropertyName("unsafe")]
         public Unsafe Unsafe { get; set; }
 
-        [JsonRequired]
-        [JsonPropertyName("unsigned")]
-        public Unsigned Unsigned { get; set; }
-
         [JsonRequired]
         [JsonPropertyName("UseSerializers")]
         public UseSerializers UseSerializers { get; set; }
-
-        [JsonRequired]
-        [JsonPropertyName("ushort")]
-        public Ushort Ushort { get; set; }
     }
 
     public partial class KSerializer
@@ -3207,6 +3222,13 @@ namespace QuickType
         public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
+    public partial class Select
+    {
+        [JsonRequired]
+        [JsonPropertyName("select")]
+        public long SelectSelect { get; set; }
+    }
+
     public partial class Self
     {
         [JsonRequired]
@@ -3466,6 +3488,13 @@ namespace QuickType
         public long TimeZoneTimeZone { get; set; }
     }
 
+    public partial class ToDict
+    {
+        [JsonRequired]
+        [JsonPropertyName("to_dict")]
+        public long ToDictToDict { get; set; }
+    }
+
     public partial class TopLevelClass
     {
         [JsonRequired]
@@ -3571,6 +3600,13 @@ namespace QuickType
         public long UnionUnion { get; set; }
     }
 
+    public partial class UnmarshalJson
+    {
+        [JsonRequired]
+        [JsonPropertyName("UnmarshalJSON")]
+        public long UnmarshalJsonUnmarshalJson { get; set; }
+    }
+
     public partial class Unowned
     {
         [JsonRequired]
@@ -3585,13 +3621,6 @@ namespace QuickType
         public long UnsafeUnsafe { get; set; }
     }
 
-    public partial class Unsigned
-    {
-        [JsonRequired]
-        [JsonPropertyName("unsigned")]
-        public long UnsignedUnsigned { get; set; }
-    }
-
     public partial class UseSerializers
     {
         [JsonRequired]
@@ -3599,19 +3628,20 @@ namespace QuickType
         public long UseSerializersUseSerializers { get; set; }
     }
 
-    public partial class Ushort
-    {
-        [JsonRequired]
-        [JsonPropertyName("ushort")]
-        public long UshortUshort { get; set; }
-    }
-
     public partial class Obj6
     {
         [JsonRequired]
         [JsonPropertyName("dummy")]
         public long Dummy { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("unsigned")]
+        public Unsigned Unsigned { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("ushort")]
+        public Ushort Ushort { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("using")]
         public Using Using { get; set; }
@@ -3685,6 +3715,20 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial class Unsigned
+    {
+        [JsonRequired]
+        [JsonPropertyName("unsigned")]
+        public long UnsignedUnsigned { get; set; }
+    }
+
+    public partial class Ushort
+    {
+        [JsonRequired]
+        [JsonPropertyName("ushort")]
+        public long UshortUshort { get; set; }
+    }
+
     public partial class Using
     {
         [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 fd31d22..59112bb 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
@@ -799,6 +799,9 @@ namespace QuickType
         [JsonProperty("from", Required = Required.Always)]
         public From From { get; set; }
 
+        [JsonProperty("from_dict", Required = Required.Always)]
+        public FromDict FromDict { get; set; }
+
         [JsonProperty("func", Required = Required.Always)]
         public Func Func { get; set; }
 
@@ -814,9 +817,6 @@ namespace QuickType
         [JsonProperty("go", Required = Required.Always)]
         public Go Go { get; set; }
 
-        [JsonProperty("goto", Required = Required.Always)]
-        public Goto Goto { get; set; }
-
         [JsonProperty("equalityContract", Required = Required.Always)]
         public EqualityContractClass Obj2EqualityContract { get; set; }
 
@@ -1157,6 +1157,12 @@ namespace QuickType
         public long FromFrom { get; set; }
     }
 
+    public partial record FromDict
+    {
+        [JsonProperty("from_dict", Required = Required.Always)]
+        public long FromDictFromDict { get; set; }
+    }
+
     public partial record Func
     {
         [JsonProperty("func", Required = Required.Always)]
@@ -1187,12 +1193,6 @@ namespace QuickType
         public long GoGo { get; set; }
     }
 
-    public partial record Goto
-    {
-        [JsonProperty("goto", Required = Required.Always)]
-        public long GotoGoto { get; set; }
-    }
-
     public partial record EqualityContractClass
     {
         [JsonProperty("equalityContract", Required = Required.Always)]
@@ -1216,6 +1216,9 @@ namespace QuickType
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("goto", Required = Required.Always)]
+        public Goto Goto { get; set; }
+
         [JsonProperty("guard", Required = Required.Always)]
         public Guard Guard { get; set; }
 
@@ -1375,6 +1378,9 @@ namespace QuickType
         [JsonProperty("MapEntry", Required = Required.Always)]
         public MapEntry MapEntry { get; set; }
 
+        [JsonProperty("MarshalJSON", Required = Required.Always)]
+        public MarshalJson MarshalJson { get; set; }
+
         [JsonProperty("metadata_property_handling", Required = Required.Always)]
         public MetadataPropertyHandlingClass MetadataPropertyHandling { get; set; }
 
@@ -1404,9 +1410,12 @@ namespace QuickType
 
         [JsonProperty("NO", Required = Required.Always)]
         public No No { get; set; }
+    }
 
-        [JsonProperty("noexcept", Required = Required.Always)]
-        public Noexcept Noexcept { get; set; }
+    public partial record Goto
+    {
+        [JsonProperty("goto", Required = Required.Always)]
+        public long GotoGoto { get; set; }
     }
 
     public partial record Guard
@@ -1727,6 +1736,12 @@ namespace QuickType
         public long MapEntryMapEntry { get; set; }
     }
 
+    public partial record MarshalJson
+    {
+        [JsonProperty("MarshalJSON", Required = Required.Always)]
+        public long MarshalJsonMarshalJson { get; set; }
+    }
+
     public partial record MetadataPropertyHandlingClass
     {
         [JsonProperty("metadata_property_handling", Required = Required.Always)]
@@ -1787,12 +1802,6 @@ namespace QuickType
         public long NoNo { get; set; }
     }
 
-    public partial record Noexcept
-    {
-        [JsonProperty("noexcept", Required = Required.Always)]
-        public long NoexceptNoexcept { get; set; }
-    }
-
     public partial record Obj4
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -1801,6 +1810,9 @@ namespace QuickType
         [JsonProperty("noSuchMethod", Required = Required.Always)]
         public NoSuchMethod NoSuchMethod { get; set; }
 
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public Noexcept Noexcept { get; set; }
+
         [JsonProperty("nonatomic", Required = Required.Always)]
         public Nonatomic Nonatomic { get; set; }
 
@@ -1986,9 +1998,6 @@ namespace QuickType
 
         [JsonProperty("SEL", Required = Required.Always)]
         public Sel Sel { get; set; }
-
-        [JsonProperty("select", Required = Required.Always)]
-        public Select Select { get; set; }
     }
 
     public partial record NoSuchMethod
@@ -1997,6 +2006,12 @@ namespace QuickType
         public long NoSuchMethodNoSuchMethod { get; set; }
     }
 
+    public partial record Noexcept
+    {
+        [JsonProperty("noexcept", Required = Required.Always)]
+        public long NoexceptNoexcept { get; set; }
+    }
+
     public partial record Nonatomic
     {
         [JsonProperty("nonatomic", Required = Required.Always)]
@@ -2369,12 +2384,6 @@ namespace QuickType
         public long SelSel { get; set; }
     }
 
-    public partial record Select
-    {
-        [JsonProperty("select", Required = Required.Always)]
-        public long SelectSelect { get; set; }
-    }
-
     public partial record Obj5
     {
         [JsonProperty("dummy", Required = Required.Always)]
@@ -2401,6 +2410,9 @@ namespace QuickType
         [JsonProperty("PrimitiveKind", Required = Required.Always)]
         public PrimitiveKind PrimitiveKind { get; set; }
 
+        [JsonProperty("select", Required = Required.Always)]
+        public Select Select { get; set; }
+
         [JsonProperty("Self", Required = Required.Always)]
         public Self Self { get; set; }
 
@@ -2512,6 +2524,9 @@ namespace QuickType
         [JsonProperty("TimeZone", Required = Required.Always)]
         public TimeZone TimeZone { get; set; }
 
+        [JsonProperty("to_dict", Required = Required.Always)]
+        public ToDict ToDict { get; set; }
+
         [JsonProperty("top_level", Required = Required.Always)]
         public TopLevelClass TopLevel { get; set; }
 
@@ -2557,20 +2572,17 @@ namespace QuickType
         [JsonProperty("union", Required = Required.Always)]
         public Union Union { get; set; }
 
+        [JsonProperty("UnmarshalJSON", Required = Required.Always)]
+        public UnmarshalJson UnmarshalJson { get; set; }
+
         [JsonProperty("unowned", Required = Required.Always)]
         public Unowned Unowned { get; set; }
 
         [JsonProperty("unsafe", Required = Required.Always)]
         public Unsafe Unsafe { get; set; }
 
-        [JsonProperty("unsigned", Required = Required.Always)]
-        public Unsigned Unsigned { get; set; }
-
         [JsonProperty("UseSerializers", Required = Required.Always)]
         public UseSerializers UseSerializers { get; set; }
-
-        [JsonProperty("ushort", Required = Required.Always)]
-        public Ushort Ushort { get; set; }
     }
 
     public partial record KSerializer
@@ -2615,6 +2627,12 @@ namespace QuickType
         public long PrimitiveKindPrimitiveKind { get; set; }
     }
 
+    public partial record Select
+    {
+        [JsonProperty("select", Required = Required.Always)]
+        public long SelectSelect { get; set; }
+    }
+
     public partial record Self
     {
         [JsonProperty("Self", Required = Required.Always)]
@@ -2837,6 +2855,12 @@ namespace QuickType
         public long TimeZoneTimeZone { get; set; }
     }
 
+    public partial record ToDict
+    {
+        [JsonProperty("to_dict", Required = Required.Always)]
+        public long ToDictToDict { get; set; }
+    }
+
     public partial record TopLevelClass
     {
         [JsonProperty("top_level", Required = Required.Always)]
@@ -2927,6 +2951,12 @@ namespace QuickType
         public long UnionUnion { get; set; }
     }
 
+    public partial record UnmarshalJson
+    {
+        [JsonProperty("UnmarshalJSON", Required = Required.Always)]
+        public long UnmarshalJsonUnmarshalJson { get; set; }
+    }
+
     public partial record Unowned
     {
         [JsonProperty("unowned", Required = Required.Always)]
@@ -2939,29 +2969,23 @@ namespace QuickType
         public long UnsafeUnsafe { get; set; }
     }
 
-    public partial record Unsigned
-    {
-        [JsonProperty("unsigned", Required = Required.Always)]
-        public long UnsignedUnsigned { get; set; }
-    }
-
     public partial record UseSerializers
     {
         [JsonProperty("UseSerializers", Required = Required.Always)]
         public long UseSerializersUseSerializers { get; set; }
     }
 
-    public partial record Ushort
-    {
-        [JsonProperty("ushort", Required = Required.Always)]
-        public long UshortUshort { get; set; }
-    }
-
     public partial record Obj6
     {
         [JsonProperty("dummy", Required = Required.Always)]
         public long Dummy { get; set; }
 
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public Unsigned Unsigned { get; set; }
+
+        [JsonProperty("ushort", Required = Required.Always)]
+        public Ushort Ushort { get; set; }
+
         [JsonProperty("using", Required = Required.Always)]
         public Using Using { get; set; }
 
@@ -3017,6 +3041,18 @@ namespace QuickType
         public Yield Yield { get; set; }
     }
 
+    public partial record Unsigned
+    {
+        [JsonProperty("unsigned", Required = Required.Always)]
+        public long UnsignedUnsigned { get; set; }
+    }
+
+    public partial record Ushort
+    {
+        [JsonProperty("ushort", Required = Required.Always)]
+        public long UshortUshort { get; set; }
+    }
+
     public partial record Using
     {
         [JsonProperty("using", 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 47b9e9c..5a551bc 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
@@ -1390,11 +1390,11 @@ class Obj2 {
     final FormatExceptionClass formatException;
     final Friend friend;
     final From from;
+    final FromDict fromDict;
     final Func func;
     final FunctionClass function;
     final Global global;
     final Go go;
-    final Goto goto;
     final Default obj2Default;
     final Do obj2Do;
     final Double obj2Double;
@@ -1457,11 +1457,11 @@ class Obj2 {
         required this.formatException,
         required this.friend,
         required this.from,
+        required this.fromDict,
         required this.func,
         required this.function,
         required this.global,
         required this.go,
-        required this.goto,
         required this.obj2Default,
         required this.obj2Do,
         required this.obj2Double,
@@ -1525,11 +1525,11 @@ class Obj2 {
         formatException: FormatExceptionClass.fromJson(json["FormatException"]),
         friend: Friend.fromJson(json["friend"]),
         from: From.fromJson(json["from"]),
+        fromDict: FromDict.fromJson(json["from_dict"]),
         func: Func.fromJson(json["func"]),
         function: FunctionClass.fromJson(json["function"]),
         global: Global.fromJson(json["global"]),
         go: Go.fromJson(json["go"]),
-        goto: Goto.fromJson(json["goto"]),
         obj2Default: Default.fromJson(json["default"]),
         obj2Do: Do.fromJson(json["do"]),
         obj2Double: Double.fromJson(json["double"]),
@@ -1593,11 +1593,11 @@ class Obj2 {
         "FormatException": formatException.toJson(),
         "friend": friend.toJson(),
         "from": from.toJson(),
+        "from_dict": fromDict.toJson(),
         "func": func.toJson(),
         "function": function.toJson(),
         "global": global.toJson(),
         "go": go.toJson(),
-        "goto": goto.toJson(),
         "default": obj2Default.toJson(),
         "do": obj2Do.toJson(),
         "double": obj2Double.toJson(),
@@ -2330,6 +2330,22 @@ class From {
     };
 }
 
+class FromDict {
+    final int fromDict;
+
+    FromDict({
+        required this.fromDict,
+    });
+
+    factory FromDict.fromJson(Map<String, dynamic> json) => FromDict(
+        fromDict: json["from_dict"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "from_dict": fromDict,
+    };
+}
+
 class Func {
     final int func;
 
@@ -2394,22 +2410,6 @@ class Go {
     };
 }
 
-class Goto {
-    final int goto;
-
-    Goto({
-        required this.goto,
-    });
-
-    factory Goto.fromJson(Map<String, dynamic> json) => Goto(
-        goto: json["goto"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "goto": goto,
-    };
-}
-
 class Default {
     final int defaultDefault;
 
@@ -2652,6 +2652,7 @@ class FalseClass {
 
 class Obj3 {
     final int dummy;
+    final Goto goto;
     final Guard guard;
     final HasOwnProperty hasOwnProperty;
     final Hashable hashable;
@@ -2697,6 +2698,7 @@ class Obj3 {
     final Long long;
     final MapClass map;
     final MapEntryClass mapEntry;
+    final MarshalJson marshalJson;
     final MetadataPropertyHandling metadataPropertyHandling;
     final Module module;
     final Mutable mutable;
@@ -2706,7 +2708,6 @@ class Obj3 {
     final Newtonsoft newtonsoft;
     final Nil nil;
     final No no;
-    final Noexcept noexcept;
     final HashCode obj3HashCode;
     final If obj3If;
     final Implements obj3Implements;
@@ -2719,6 +2720,7 @@ class Obj3 {
 
     Obj3({
         required this.dummy,
+        required this.goto,
         required this.guard,
         required this.hasOwnProperty,
         required this.hashable,
@@ -2764,6 +2766,7 @@ class Obj3 {
         required this.long,
         required this.map,
         required this.mapEntry,
+        required this.marshalJson,
         required this.metadataPropertyHandling,
         required this.module,
         required this.mutable,
@@ -2773,7 +2776,6 @@ class Obj3 {
         required this.newtonsoft,
         required this.nil,
         required this.no,
-        required this.noexcept,
         required this.obj3HashCode,
         required this.obj3If,
         required this.obj3Implements,
@@ -2787,6 +2789,7 @@ class Obj3 {
 
     factory Obj3.fromJson(Map<String, dynamic> json) => Obj3(
         dummy: json["dummy"],
+        goto: Goto.fromJson(json["goto"]),
         guard: Guard.fromJson(json["guard"]),
         hasOwnProperty: HasOwnProperty.fromJson(json["hasOwnProperty"]),
         hashable: Hashable.fromJson(json["Hashable"]),
@@ -2832,6 +2835,7 @@ class Obj3 {
         long: Long.fromJson(json["long"]),
         map: MapClass.fromJson(json["map"]),
         mapEntry: MapEntryClass.fromJson(json["MapEntry"]),
+        marshalJson: MarshalJson.fromJson(json["MarshalJSON"]),
         metadataPropertyHandling: MetadataPropertyHandling.fromJson(json["metadata_property_handling"]),
         module: Module.fromJson(json["module"]),
         mutable: Mutable.fromJson(json["mutable"]),
@@ -2841,7 +2845,6 @@ class Obj3 {
         newtonsoft: Newtonsoft.fromJson(json["newtonsoft"]),
         nil: Nil.fromJson(json["nil"]),
         no: No.fromJson(json["NO"]),
-        noexcept: Noexcept.fromJson(json["noexcept"]),
         obj3HashCode: HashCode.fromJson(json["hashCode"]),
         obj3If: If.fromJson(json["if"]),
         obj3Implements: Implements.fromJson(json["implements"]),
@@ -2855,6 +2858,7 @@ class Obj3 {
 
     Map<String, dynamic> toJson() => {
         "dummy": dummy,
+        "goto": goto.toJson(),
         "guard": guard.toJson(),
         "hasOwnProperty": hasOwnProperty.toJson(),
         "Hashable": hashable.toJson(),
@@ -2900,6 +2904,7 @@ class Obj3 {
         "long": long.toJson(),
         "map": map.toJson(),
         "MapEntry": mapEntry.toJson(),
+        "MarshalJSON": marshalJson.toJson(),
         "metadata_property_handling": metadataPropertyHandling.toJson(),
         "module": module.toJson(),
         "mutable": mutable.toJson(),
@@ -2909,7 +2914,6 @@ class Obj3 {
         "newtonsoft": newtonsoft.toJson(),
         "nil": nil.toJson(),
         "NO": no.toJson(),
-        "noexcept": noexcept.toJson(),
         "hashCode": obj3HashCode.toJson(),
         "if": obj3If.toJson(),
         "implements": obj3Implements.toJson(),
@@ -2922,6 +2926,22 @@ class Obj3 {
     };
 }
 
+class Goto {
+    final int goto;
+
+    Goto({
+        required this.goto,
+    });
+
+    factory Goto.fromJson(Map<String, dynamic> json) => Goto(
+        goto: json["goto"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "goto": goto,
+    };
+}
+
 class Guard {
     final int guard;
 
@@ -3642,6 +3662,22 @@ class MapEntryClass {
     };
 }
 
+class MarshalJson {
+    final int marshalJson;
+
+    MarshalJson({
+        required this.marshalJson,
+    });
+
+    factory MarshalJson.fromJson(Map<String, dynamic> json) => MarshalJson(
+        marshalJson: json["MarshalJSON"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "MarshalJSON": marshalJson,
+    };
+}
+
 class MetadataPropertyHandling {
     final int metadataPropertyHandling;
 
@@ -3786,22 +3822,6 @@ class No {
     };
 }
 
-class Noexcept {
-    final int noexcept;
-
-    Noexcept({
-        required this.noexcept,
-    });
-
-    factory Noexcept.fromJson(Map<String, dynamic> json) => Noexcept(
-        noexcept: json["noexcept"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "noexcept": noexcept,
-    };
-}
-
 class HashCode {
     final int hashCodeHashCode;
 
@@ -3948,6 +3968,7 @@ class New {
 
 class Obj4 {
     final int dummy;
+    final Noexcept noexcept;
     final Nonatomic nonatomic;
     final None none;
     final Nonlocal nonlocal;
@@ -4011,10 +4032,10 @@ class Obj4 {
     final Sbyte sbyte;
     final Sealed sealed;
     final Sel sel;
-    final Select select;
 
     Obj4({
         required this.dummy,
+        required this.noexcept,
         required this.nonatomic,
         required this.none,
         required this.nonlocal,
@@ -4078,11 +4099,11 @@ class Obj4 {
         required this.sbyte,
         required this.sealed,
         required this.sel,
-        required this.select,
     });
 
     factory Obj4.fromJson(Map<String, dynamic> json) => Obj4(
         dummy: json["dummy"],
+        noexcept: Noexcept.fromJson(json["noexcept"]),
         nonatomic: Nonatomic.fromJson(json["nonatomic"]),
         none: None.fromJson(json["None"]),
         nonlocal: Nonlocal.fromJson(json["nonlocal"]),
@@ -4146,11 +4167,11 @@ class Obj4 {
         sbyte: Sbyte.fromJson(json["sbyte"]),
         sealed: Sealed.fromJson(json["sealed"]),
         sel: Sel.fromJson(json["SEL"]),
-        select: Select.fromJson(json["select"]),
     );
 
     Map<String, dynamic> toJson() => {
         "dummy": dummy,
+        "noexcept": noexcept.toJson(),
         "nonatomic": nonatomic.toJson(),
         "None": none.toJson(),
         "nonlocal": nonlocal.toJson(),
@@ -4214,7 +4235,22 @@ class Obj4 {
         "sbyte": sbyte.toJson(),
         "sealed": sealed.toJson(),
         "SEL": sel.toJson(),
-        "select": select.toJson(),
+    };
+}
+
+class Noexcept {
+    final int noexcept;
+
+    Noexcept({
+        required this.noexcept,
+    });
+
+    factory Noexcept.fromJson(Map<String, dynamic> json) => Noexcept(
+        noexcept: json["noexcept"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "noexcept": noexcept,
     };
 }
 
@@ -5226,22 +5262,6 @@ class Sel {
     };
 }
 
-class Select {
-    final int select;
-
-    Select({
-        required this.select,
-    });
-
-    factory Select.fromJson(Map<String, dynamic> json) => Select(
-        select: json["select"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "select": select,
-    };
-}
-
 class Obj5 {
     final int dummy;
     final KSerializer kSerializer;
@@ -5260,6 +5280,7 @@ class Obj5 {
     final Typedef obj5Typedef;
     final PrimitiveKind primitiveKind;
     final TrueClass purpleTrue;
+    final Select select;
     final Self self;
     final Sendable sendable;
     final SerialDescriptor serialDescriptor;
@@ -5291,6 +5312,7 @@ class Obj5 {
     final TimeOnly timeOnly;
     final TimeOnlyConverter timeOnlyConverter;
     final TimeZone timeZone;
+    final ToDict toDict;
     final TopLevelClass topLevel;
     final Transient transient;
     final Type type;
@@ -5303,11 +5325,10 @@ class Obj5 {
     final Unchecked unchecked;
     final Undefined undefined;
     final Union union;
+    final UnmarshalJson unmarshalJson;
     final Unowned unowned;
     final Unsafe unsafe;
-    final Unsigned unsigned;
     final UseSerializers useSerializers;
-    final Ushort ushort;
 
     Obj5({
         required this.dummy,
@@ -5327,6 +5348,7 @@ class Obj5 {
         required this.obj5Typedef,
         required this.primitiveKind,
         required this.purpleTrue,
+        required this.select,
         required this.self,
         required this.sendable,
         required this.serialDescriptor,
@@ -5358,6 +5380,7 @@ class Obj5 {
         required this.timeOnly,
         required this.timeOnlyConverter,
         required this.timeZone,
+        required this.toDict,
         required this.topLevel,
         required this.transient,
         required this.type,
@@ -5370,11 +5393,10 @@ class Obj5 {
         required this.unchecked,
         required this.undefined,
         required this.union,
+        required this.unmarshalJson,
         required this.unowned,
         required this.unsafe,
-        required this.unsigned,
         required this.useSerializers,
-        required this.ushort,
     });
 
     factory Obj5.fromJson(Map<String, dynamic> json) => Obj5(
@@ -5395,6 +5417,7 @@ class Obj5 {
         obj5Typedef: Typedef.fromJson(json["typedef"]),
         primitiveKind: PrimitiveKind.fromJson(json["PrimitiveKind"]),
         purpleTrue: TrueClass.fromJson(json["true"]),
+        select: Select.fromJson(json["select"]),
         self: Self.fromJson(json["Self"]),
         sendable: Sendable.fromJson(json["Sendable"]),
         serialDescriptor: SerialDescriptor.fromJson(json["SerialDescriptor"]),
@@ -5426,6 +5449,7 @@ class Obj5 {
         timeOnly: TimeOnly.fromJson(json["TimeOnly"]),
         timeOnlyConverter: TimeOnlyConverter.fromJson(json["TimeOnlyConverter"]),
         timeZone: TimeZone.fromJson(json["TimeZone"]),
+        toDict: ToDict.fromJson(json["to_dict"]),
         topLevel: TopLevelClass.fromJson(json["top_level"]),
         transient: Transient.fromJson(json["transient"]),
         type: Type.fromJson(json["Type"]),
@@ -5438,11 +5462,10 @@ class Obj5 {
         unchecked: Unchecked.fromJson(json["unchecked"]),
         undefined: Undefined.fromJson(json["undefined"]),
         union: Union.fromJson(json["union"]),
+        unmarshalJson: UnmarshalJson.fromJson(json["UnmarshalJSON"]),
         unowned: Unowned.fromJson(json["unowned"]),
         unsafe: Unsafe.fromJson(json["unsafe"]),
-        unsigned: Unsigned.fromJson(json["unsigned"]),
         useSerializers: UseSerializers.fromJson(json["UseSerializers"]),
-        ushort: Ushort.fromJson(json["ushort"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -5463,6 +5486,7 @@ class Obj5 {
         "typedef": obj5Typedef.toJson(),
         "PrimitiveKind": primitiveKind.toJson(),
         "true": purpleTrue.toJson(),
+        "select": select.toJson(),
         "Self": self.toJson(),
         "Sendable": sendable.toJson(),
         "SerialDescriptor": serialDescriptor.toJson(),
@@ -5494,6 +5518,7 @@ class Obj5 {
         "TimeOnly": timeOnly.toJson(),
         "TimeOnlyConverter": timeOnlyConverter.toJson(),
         "TimeZone": timeZone.toJson(),
+        "to_dict": toDict.toJson(),
         "top_level": topLevel.toJson(),
         "transient": transient.toJson(),
         "Type": type.toJson(),
@@ -5506,11 +5531,10 @@ class Obj5 {
         "unchecked": unchecked.toJson(),
         "undefined": undefined.toJson(),
         "union": union.toJson(),
+        "UnmarshalJSON": unmarshalJson.toJson(),
         "unowned": unowned.toJson(),
         "unsafe": unsafe.toJson(),
-        "unsigned": unsigned.toJson(),
         "UseSerializers": useSerializers.toJson(),
-        "ushort": ushort.toJson(),
     };
 }
 
@@ -5770,6 +5794,22 @@ class TrueClass {
     };
 }
 
+class Select {
+    final int select;
+
+    Select({
+        required this.select,
+    });
+
+    factory Select.fromJson(Map<String, dynamic> json) => Select(
+        select: json["select"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "select": select,
+    };
+}
+
 class Self {
     final int self;
 
@@ -6266,6 +6306,22 @@ class TimeZone {
     };
 }
 
+class ToDict {
+    final int toDict;
+
+    ToDict({
+        required this.toDict,
+    });
+
+    factory ToDict.fromJson(Map<String, dynamic> json) => ToDict(
+        toDict: json["to_dict"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "to_dict": toDict,
+    };
+}
+
 class TopLevelClass {
     final int topLevel;
 
@@ -6458,6 +6514,22 @@ class Union {
     };
 }
 
+class UnmarshalJson {
+    final int unmarshalJson;
+
+    UnmarshalJson({
+        required this.unmarshalJson,
+    });
+
+    factory UnmarshalJson.fromJson(Map<String, dynamic> json) => UnmarshalJson(
+        unmarshalJson: json["UnmarshalJSON"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "UnmarshalJSON": unmarshalJson,
+    };
+}
+
 class Unowned {
     final int unowned;
 
@@ -6490,22 +6562,6 @@ class Unsafe {
     };
 }
 
-class Unsigned {
-    final int unsigned;
-
-    Unsigned({
-        required this.unsigned,
-    });
-
-    factory Unsigned.fromJson(Map<String, dynamic> json) => Unsigned(
-        unsigned: json["unsigned"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "unsigned": unsigned,
-    };
-}
-
 class UseSerializers {
     final int useSerializers;
 
@@ -6522,22 +6578,6 @@ class UseSerializers {
     };
 }
 
-class Ushort {
-    final int ushort;
-
-    Ushort({
-        required this.ushort,
-    });
-
-    factory Ushort.fromJson(Map<String, dynamic> json) => Ushort(
-        ushort: json["ushort"],
-    );
-
-    Map<String, dynamic> toJson() => {
-        "ushort": ushort,
-    };
-}
-
 class Obj6 {
     final int dummy;
     final Var obj6Var;
@@ -6545,6 +6585,8 @@ class Obj6 {
     final While obj6While;
     final With obj6With;
     final Yield obj6Yield;
+    final Unsigned unsigned;
+    final Ushort ushort;
     final Using using;
     final Utf8JsonReader utf8JsonReader;
     final Utf8JsonWriter utf8JsonWriter;
@@ -6566,6 +6608,8 @@ class Obj6 {
         required this.obj6While,
         required this.obj6With,
         required this.obj6Yield,
+        required this.unsigned,
+        required this.ushort,
         required this.using,
         required this.utf8JsonReader,
         required this.utf8JsonWriter,
@@ -6588,6 +6632,8 @@ class Obj6 {
         obj6While: While.fromJson(json["while"]),
         obj6With: With.fromJson(json["with"]),
         obj6Yield: Yield.fromJson(json["yield"]),
+        unsigned: Unsigned.fromJson(json["unsigned"]),
+        ushort: Ushort.fromJson(json["ushort"]),
         using: Using.fromJson(json["using"]),
         utf8JsonReader: Utf8JsonReader.fromJson(json["Utf8JsonReader"]),
         utf8JsonWriter: Utf8JsonWriter.fromJson(json["Utf8JsonWriter"]),
@@ -6610,6 +6656,8 @@ class Obj6 {
         "while": obj6While.toJson(),
         "with": obj6With.toJson(),
         "yield": obj6Yield.toJson(),
+        "unsigned": unsigned.toJson(),
+        "ushort": ushort.toJson(),
         "using": using.toJson(),
         "Utf8JsonReader": utf8JsonReader.toJson(),
         "Utf8JsonWriter": utf8JsonWriter.toJson(),
@@ -6706,6 +6754,38 @@ class Yield {
     };
 }
 
+class Unsigned {
+    final int unsigned;
+
+    Unsigned({
+        required this.unsigned,
+    });
+
+    factory Unsigned.fromJson(Map<String, dynamic> json) => Unsigned(
+        unsigned: json["unsigned"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "unsigned": unsigned,
+    };
+}
+
+class Ushort {
+    final int ushort;
+
+    Ushort({
+        required this.ushort,
+    });
+
+    factory Ushort.fromJson(Map<String, dynamic> json) => Ushort(
+        ushort: json["ushort"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "ushort": ushort,
+    };
+}
+
 class Using {
     final int using;
 
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 6b66bb3..9f0ab3e 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
@@ -4845,6 +4845,45 @@ defmodule From do
   end
 end
 
+defmodule FromDict do
+  @enforce_keys [:from_dict]
+  defstruct [:from_dict]
+
+  @type t :: %__MODULE__{
+          from_dict: integer()
+        }
+
+  def decode_from_dict(value) when is_integer(value), do: value
+  def decode_from_dict(_), do: {:error, "Unexpected type when decoding FromDict.from_dict"}
+
+  def encode_from_dict(value) when is_integer(value), do: value
+  def encode_from_dict(_), do: {:error, "Unexpected type when encoding FromDict.from_dict"}
+
+  def from_map(m) do
+    %FromDict{
+      from_dict: decode_from_dict(m["from_dict"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "from_dict" => struct.from_dict,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule FromJSON do
   @enforce_keys [:from_json]
   defstruct [:from_json]
@@ -5079,45 +5118,6 @@ defmodule Go do
   end
 end
 
-defmodule Goto do
-  @enforce_keys [:goto]
-  defstruct [:goto]
-
-  @type t :: %__MODULE__{
-          goto: integer()
-        }
-
-  def decode_goto(value) when is_integer(value), do: value
-  def decode_goto(_), do: {:error, "Unexpected type when decoding Goto.goto"}
-
-  def encode_goto(value) when is_integer(value), do: value
-  def encode_goto(_), do: {:error, "Unexpected type when encoding Goto.goto"}
-
-  def from_map(m) do
-    %Goto{
-      goto: decode_goto(m["goto"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "goto" => struct.goto,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
 defmodule DefClass do
   @enforce_keys [:def_def]
   defstruct [:def_def]
@@ -5275,8 +5275,8 @@ defmodule FalseClass do
 end
 
 defmodule Obj2 do
-  @enforce_keys [:date_formatter, :date_only, :date_only_converter, :date_parse_handling, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :obj2_def, :obj2_do, :obj2_else, :obj2_false]
-  defstruct [:date_formatter, :date_only, :date_only_converter, :date_parse_handling, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :obj2_def, :obj2_do, :obj2_else, :obj2_false]
+  @enforce_keys [:date_formatter, :date_only, :date_only_converter, :date_parse_handling, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_dict, :from_json, :func, :function, :get, :global, :go, :obj2_def, :obj2_do, :obj2_else, :obj2_false]
+  defstruct [:date_formatter, :date_only, :date_only_converter, :date_parse_handling, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :double, :dummy, :dynamic, :dynamic_cast, :elif, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_dict, :from_json, :func, :function, :get, :global, :go, :obj2_def, :obj2_do, :obj2_else, :obj2_false]
 
   @type t :: %__MODULE__{
           date_formatter: DateFormatter.t(),
@@ -5333,13 +5333,13 @@ defmodule Obj2 do
           format_exception: FormatException.t(),
           friend: Friend.t(),
           from: From.t(),
+          from_dict: FromDict.t(),
           from_json: FromJSON.t(),
           func: Func.t(),
           function: FunctionClass.t(),
           get: Get.t(),
           global: Global.t(),
           go: Go.t(),
-          goto: Goto.t(),
           obj2_def: DefClass.t(),
           obj2_do: DoClass.t(),
           obj2_else: ElseClass.t(),
@@ -5408,13 +5408,13 @@ defmodule Obj2 do
       format_exception: FormatException.from_map(m["FormatException"]),
       friend: Friend.from_map(m["friend"]),
       from: From.from_map(m["from"]),
+      from_dict: FromDict.from_map(m["from_dict"]),
       from_json: FromJSON.from_map(m["from_json"]),
       func: Func.from_map(m["func"]),
       function: FunctionClass.from_map(m["function"]),
       get: Get.from_map(m["get"]),
       global: Global.from_map(m["global"]),
       go: Go.from_map(m["go"]),
-      goto: Goto.from_map(m["goto"]),
       obj2_def: DefClass.from_map(m["def"]),
       obj2_do: DoClass.from_map(m["do"]),
       obj2_else: ElseClass.from_map(m["else"]),
@@ -5484,13 +5484,13 @@ defmodule Obj2 do
       "FormatException" => FormatException.to_map(struct.format_exception),
       "friend" => Friend.to_map(struct.friend),
       "from" => From.to_map(struct.from),
+      "from_dict" => FromDict.to_map(struct.from_dict),
       "from_json" => FromJSON.to_map(struct.from_json),
       "func" => Func.to_map(struct.func),
       "function" => FunctionClass.to_map(struct.function),
       "get" => Get.to_map(struct.get),
       "global" => Global.to_map(struct.global),
       "go" => Go.to_map(struct.go),
-      "goto" => Goto.to_map(struct.goto),
       "def" => DefClass.to_map(struct.obj2_def),
       "do" => DoClass.to_map(struct.obj2_do),
       "else" => ElseClass.to_map(struct.obj2_else),
@@ -5505,6 +5505,45 @@ defmodule Obj2 do
   end
 end
 
+defmodule Goto do
+  @enforce_keys [:goto]
+  defstruct [:goto]
+
+  @type t :: %__MODULE__{
+          goto: integer()
+        }
+
+  def decode_goto(value) when is_integer(value), do: value
+  def decode_goto(_), do: {:error, "Unexpected type when decoding Goto.goto"}
+
+  def encode_goto(value) when is_integer(value), do: value
+  def encode_goto(_), do: {:error, "Unexpected type when encoding Goto.goto"}
+
+  def from_map(m) do
+    %Goto{
+      goto: decode_goto(m["goto"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "goto" => struct.goto,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Guard do
   @enforce_keys [:guard]
   defstruct [:guard]
@@ -7494,6 +7533,45 @@ defmodule MapEntry do
   end
 end
 
+defmodule MarshalJSON do
+  @enforce_keys [:marshal_json]
+  defstruct [:marshal_json]
+
+  @type t :: %__MODULE__{
+          marshal_json: integer()
+        }
+
+  def decode_marshal_json(value) when is_integer(value), do: value
+  def decode_marshal_json(_), do: {:error, "Unexpected type when decoding MarshalJSON.marshal_json"}
+
+  def encode_marshal_json(value) when is_integer(value), do: value
+  def encode_marshal_json(_), do: {:error, "Unexpected type when encoding MarshalJSON.marshal_json"}
+
+  def from_map(m) do
+    %MarshalJSON{
+      marshal_json: decode_marshal_json(m["MarshalJSON"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "MarshalJSON" => struct.marshal_json,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule MetadataPropertyHandling do
   @enforce_keys [:metadata_property_handling]
   defstruct [:metadata_property_handling]
@@ -7845,45 +7923,6 @@ defmodule No do
   end
 end
 
-defmodule Noexcept do
-  @enforce_keys [:noexcept]
-  defstruct [:noexcept]
-
-  @type t :: %__MODULE__{
-          noexcept: integer()
-        }
-
-  def decode_noexcept(value) when is_integer(value), do: value
-  def decode_noexcept(_), do: {:error, "Unexpected type when decoding Noexcept.noexcept"}
-
-  def encode_noexcept(value) when is_integer(value), do: value
-  def encode_noexcept(_), do: {:error, "Unexpected type when encoding Noexcept.noexcept"}
-
-  def from_map(m) do
-    %Noexcept{
-      noexcept: decode_noexcept(m["noexcept"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "noexcept" => struct.noexcept,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
 defmodule ImportClass do
   @enforce_keys [:import_import]
   defstruct [:import_import]
@@ -8002,11 +8041,12 @@ defmodule NilClass do
 end
 
 defmodule Obj3 do
-  @enforce_keys [:dummy, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :noexcept, :obj3_import, :obj3_in, :obj3_nil]
-  defstruct [:dummy, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :noexcept, :obj3_import, :obj3_in, :obj3_nil]
+  @enforce_keys [:dummy, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :obj3_import, :obj3_in, :obj3_nil]
+  defstruct [:dummy, :goto, :guard, :has_own_property, :hash_code, :hashable, :hasher, :id, :if, :imp, :implements, :implicit, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_any, :json_coding_key, :json_converter, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_serializer, :json_token, :json_token_type, :json_writer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :no, :obj3_import, :obj3_in, :obj3_nil]
 
   @type t :: %__MODULE__{
           dummy: integer(),
+          goto: Goto.t(),
           guard: Guard.t(),
           has_own_property: HasOwnProperty.t(),
           hash_code: HashCode.t(),
@@ -8058,6 +8098,7 @@ defmodule Obj3 do
           long: Long.t(),
           map: MapClass.t(),
           map_entry: MapEntry.t(),
+          marshal_json: MarshalJSON.t(),
           metadata_property_handling: MetadataPropertyHandling.t(),
           module: ModuleClass.t(),
           mutable: Mutable.t(),
@@ -8067,7 +8108,6 @@ defmodule Obj3 do
           new: New.t(),
           newtonsoft: Newtonsoft.t(),
           no: No.t(),
-          noexcept: Noexcept.t(),
           obj3_import: ImportClass.t(),
           obj3_in: InClass.t(),
           obj3_nil: NilClass.t()
@@ -8082,6 +8122,7 @@ defmodule Obj3 do
   def from_map(m) do
     %Obj3{
       dummy: decode_dummy(m["dummy"]),
+      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"]),
@@ -8133,6 +8174,7 @@ defmodule Obj3 do
       long: Long.from_map(m["long"]),
       map: MapClass.from_map(m["map"]),
       map_entry: MapEntry.from_map(m["MapEntry"]),
+      marshal_json: MarshalJSON.from_map(m["MarshalJSON"]),
       metadata_property_handling: MetadataPropertyHandling.from_map(m["metadata_property_handling"]),
       module: ModuleClass.from_map(m["module"]),
       mutable: Mutable.from_map(m["mutable"]),
@@ -8142,7 +8184,6 @@ defmodule Obj3 do
       new: New.from_map(m["new"]),
       newtonsoft: Newtonsoft.from_map(m["newtonsoft"]),
       no: No.from_map(m["NO"]),
-      noexcept: Noexcept.from_map(m["noexcept"]),
       obj3_import: ImportClass.from_map(m["import"]),
       obj3_in: InClass.from_map(m["in"]),
       obj3_nil: NilClass.from_map(m["nil"]),
@@ -8158,6 +8199,7 @@ defmodule Obj3 do
   def to_map(struct) do
     %{
       "dummy" => struct.dummy,
+      "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),
@@ -8209,6 +8251,7 @@ defmodule Obj3 do
       "long" => Long.to_map(struct.long),
       "map" => MapClass.to_map(struct.map),
       "MapEntry" => MapEntry.to_map(struct.map_entry),
+      "MarshalJSON" => MarshalJSON.to_map(struct.marshal_json),
       "metadata_property_handling" => MetadataPropertyHandling.to_map(struct.metadata_property_handling),
       "module" => ModuleClass.to_map(struct.module),
       "mutable" => Mutable.to_map(struct.mutable),
@@ -8218,7 +8261,6 @@ defmodule Obj3 do
       "new" => New.to_map(struct.new),
       "newtonsoft" => Newtonsoft.to_map(struct.newtonsoft),
       "NO" => No.to_map(struct.no),
-      "noexcept" => Noexcept.to_map(struct.noexcept),
       "import" => ImportClass.to_map(struct.obj3_import),
       "in" => InClass.to_map(struct.obj3_in),
       "nil" => NilClass.to_map(struct.obj3_nil),
@@ -8271,6 +8313,45 @@ defmodule NoSuchMethod do
   end
 end
 
+defmodule Noexcept do
+  @enforce_keys [:noexcept]
+  defstruct [:noexcept]
+
+  @type t :: %__MODULE__{
+          noexcept: integer()
+        }
+
+  def decode_noexcept(value) when is_integer(value), do: value
+  def decode_noexcept(_), do: {:error, "Unexpected type when decoding Noexcept.noexcept"}
+
+  def encode_noexcept(value) when is_integer(value), do: value
+  def encode_noexcept(_), do: {:error, "Unexpected type when encoding Noexcept.noexcept"}
+
+  def from_map(m) do
+    %Noexcept{
+      noexcept: decode_noexcept(m["noexcept"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "noexcept" => struct.noexcept,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Nonatomic do
   @enforce_keys [:nonatomic]
   defstruct [:nonatomic]
@@ -10689,52 +10770,14 @@ defmodule Sel do
   end
 end
 
-defmodule Select do
-  @enforce_keys [:select]
-  defstruct [:select]
-
-  @type t :: %__MODULE__{
-          select: integer()
-        }
-
-  def decode_select(value) when is_integer(value), do: value
-  def decode_select(_), do: {:error, "Unexpected type when decoding Select.select"}
-
-  def encode_select(value) when is_integer(value), do: value
-  def encode_select(_), do: {:error, "Unexpected type when encoding Select.select"}
-
-  def from_map(m) do
-    %Select{
-      select: decode_select(m["select"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "select" => struct.select,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
-defmodule Obj4 do
-  @enforce_keys [:dummy, :no_such_method, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :nullptr, :number, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select]
-  defstruct [:dummy, :no_such_method, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :nullptr, :number, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select]
+defmodule Obj4 do
+  @enforce_keys [:dummy, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :nullptr, :number, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel]
+  defstruct [:dummy, :no_such_method, :noexcept, :nonatomic, :none, :nonlocal, :nonmutating, :not_eq, :ns_error, :ns_object, :ns_string, :null, :nullptr, :number, :obj4_none, :obj4_not, :obj4_null, :obj4_or, :obj4_protocol, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :print, :print_members, :printf, :private, :protected, :protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel]
 
   @type t :: %__MODULE__{
           dummy: integer(),
           no_such_method: NoSuchMethod.t(),
+          noexcept: Noexcept.t(),
           nonatomic: Nonatomic.t(),
           none: None.t(),
           nonlocal: Nonlocal.t(),
@@ -10796,8 +10839,7 @@ defmodule Obj4 do
           s: S.t(),
           sbyte: Sbyte.t(),
           sealed: Sealed.t(),
-          sel: Sel.t(),
-          select: Select.t()
+          sel: Sel.t()
         }
 
   def decode_dummy(value) when is_integer(value), do: value
@@ -10810,6 +10852,7 @@ defmodule Obj4 do
     %Obj4{
       dummy: decode_dummy(m["dummy"]),
       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"]),
       nonlocal: Nonlocal.from_map(m["nonlocal"]),
@@ -10872,7 +10915,6 @@ defmodule Obj4 do
       sbyte: Sbyte.from_map(m["sbyte"]),
       sealed: Sealed.from_map(m["sealed"]),
       sel: Sel.from_map(m["SEL"]),
-      select: Select.from_map(m["select"]),
     }
   end
 
@@ -10886,6 +10928,7 @@ defmodule Obj4 do
     %{
       "dummy" => struct.dummy,
       "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),
       "nonlocal" => Nonlocal.to_map(struct.nonlocal),
@@ -10948,7 +10991,6 @@ defmodule Obj4 do
       "sbyte" => Sbyte.to_map(struct.sbyte),
       "sealed" => Sealed.to_map(struct.sealed),
       "SEL" => Sel.to_map(struct.sel),
-      "select" => Select.to_map(struct.select),
     }
   end
 
@@ -11154,6 +11196,45 @@ defmodule PrimitiveKind do
   end
 end
 
+defmodule Select do
+  @enforce_keys [:select]
+  defstruct [:select]
+
+  @type t :: %__MODULE__{
+          select: integer()
+        }
+
+  def decode_select(value) when is_integer(value), do: value
+  def decode_select(_), do: {:error, "Unexpected type when decoding Select.select"}
+
+  def encode_select(value) when is_integer(value), do: value
+  def encode_select(_), do: {:error, "Unexpected type when encoding Select.select"}
+
+  def from_map(m) do
+    %Select{
+      select: decode_select(m["select"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "select" => struct.select,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Self do
   @enforce_keys [:self]
   defstruct [:self]
@@ -12597,6 +12678,45 @@ defmodule TimeZone do
   end
 end
 
+defmodule ToDict do
+  @enforce_keys [:to_dict]
+  defstruct [:to_dict]
+
+  @type t :: %__MODULE__{
+          to_dict: integer()
+        }
+
+  def decode_to_dict(value) when is_integer(value), do: value
+  def decode_to_dict(_), do: {:error, "Unexpected type when decoding ToDict.to_dict"}
+
+  def encode_to_dict(value) when is_integer(value), do: value
+  def encode_to_dict(_), do: {:error, "Unexpected type when encoding ToDict.to_dict"}
+
+  def from_map(m) do
+    %ToDict{
+      to_dict: decode_to_dict(m["to_dict"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "to_dict" => struct.to_dict,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule ToJSON do
   @enforce_keys [:to_json]
   defstruct [:to_json]
@@ -13260,23 +13380,23 @@ defmodule Union do
   end
 end
 
-defmodule Unowned do
-  @enforce_keys [:unowned]
-  defstruct [:unowned]
+defmodule UnmarshalJSON do
+  @enforce_keys [:unmarshal_json]
+  defstruct [:unmarshal_json]
 
   @type t :: %__MODULE__{
-          unowned: integer()
+          unmarshal_json: integer()
         }
 
-  def decode_unowned(value) when is_integer(value), do: value
-  def decode_unowned(_), do: {:error, "Unexpected type when decoding Unowned.unowned"}
+  def decode_unmarshal_json(value) when is_integer(value), do: value
+  def decode_unmarshal_json(_), do: {:error, "Unexpected type when decoding UnmarshalJSON.unmarshal_json"}
 
-  def encode_unowned(value) when is_integer(value), do: value
-  def encode_unowned(_), do: {:error, "Unexpected type when encoding Unowned.unowned"}
+  def encode_unmarshal_json(value) when is_integer(value), do: value
+  def encode_unmarshal_json(_), do: {:error, "Unexpected type when encoding UnmarshalJSON.unmarshal_json"}
 
   def from_map(m) do
-    %Unowned{
-      unowned: decode_unowned(m["unowned"]),
+    %UnmarshalJSON{
+      unmarshal_json: decode_unmarshal_json(m["UnmarshalJSON"]),
     }
   end
 
@@ -13288,7 +13408,7 @@ defmodule Unowned do
 
   def to_map(struct) do
     %{
-      "unowned" => struct.unowned,
+      "UnmarshalJSON" => struct.unmarshal_json,
     }
   end
 
@@ -13299,23 +13419,23 @@ defmodule Unowned do
   end
 end
 
-defmodule Unsafe do
-  @enforce_keys [:unsafe]
-  defstruct [:unsafe]
+defmodule Unowned do
+  @enforce_keys [:unowned]
+  defstruct [:unowned]
 
   @type t :: %__MODULE__{
-          unsafe: integer()
+          unowned: integer()
         }
 
-  def decode_unsafe(value) when is_integer(value), do: value
-  def decode_unsafe(_), do: {:error, "Unexpected type when decoding Unsafe.unsafe"}
+  def decode_unowned(value) when is_integer(value), do: value
+  def decode_unowned(_), do: {:error, "Unexpected type when decoding Unowned.unowned"}
 
-  def encode_unsafe(value) when is_integer(value), do: value
-  def encode_unsafe(_), do: {:error, "Unexpected type when encoding Unsafe.unsafe"}
+  def encode_unowned(value) when is_integer(value), do: value
+  def encode_unowned(_), do: {:error, "Unexpected type when encoding Unowned.unowned"}
 
   def from_map(m) do
-    %Unsafe{
-      unsafe: decode_unsafe(m["unsafe"]),
+    %Unowned{
+      unowned: decode_unowned(m["unowned"]),
     }
   end
 
@@ -13327,7 +13447,7 @@ defmodule Unsafe do
 
   def to_map(struct) do
     %{
-      "unsafe" => struct.unsafe,
+      "unowned" => struct.unowned,
     }
   end
 
@@ -13338,23 +13458,23 @@ defmodule Unsafe do
   end
 end
 
-defmodule Unsigned do
-  @enforce_keys [:unsigned]
-  defstruct [:unsigned]
+defmodule Unsafe do
+  @enforce_keys [:unsafe]
+  defstruct [:unsafe]
 
   @type t :: %__MODULE__{
-          unsigned: integer()
+          unsafe: integer()
         }
 
-  def decode_unsigned(value) when is_integer(value), do: value
-  def decode_unsigned(_), do: {:error, "Unexpected type when decoding Unsigned.unsigned"}
+  def decode_unsafe(value) when is_integer(value), do: value
+  def decode_unsafe(_), do: {:error, "Unexpected type when decoding Unsafe.unsafe"}
 
-  def encode_unsigned(value) when is_integer(value), do: value
-  def encode_unsigned(_), do: {:error, "Unexpected type when encoding Unsigned.unsigned"}
+  def encode_unsafe(value) when is_integer(value), do: value
+  def encode_unsafe(_), do: {:error, "Unexpected type when encoding Unsafe.unsafe"}
 
   def from_map(m) do
-    %Unsigned{
-      unsigned: decode_unsigned(m["unsigned"]),
+    %Unsafe{
+      unsafe: decode_unsafe(m["unsafe"]),
     }
   end
 
@@ -13366,7 +13486,7 @@ defmodule Unsigned do
 
   def to_map(struct) do
     %{
-      "unsigned" => struct.unsigned,
+      "unsafe" => struct.unsafe,
     }
   end
 
@@ -13416,48 +13536,9 @@ defmodule UseSerializers do
   end
 end
 
-defmodule Ushort do
-  @enforce_keys [:ushort]
-  defstruct [:ushort]
-
-  @type t :: %__MODULE__{
-          ushort: integer()
-        }
-
-  def decode_ushort(value) when is_integer(value), do: value
-  def decode_ushort(_), do: {:error, "Unexpected type when decoding Ushort.ushort"}
-
-  def encode_ushort(value) when is_integer(value), do: value
-  def encode_ushort(_), do: {:error, "Unexpected type when encoding Ushort.ushort"}
-
-  def from_map(m) do
-    %Ushort{
-      ushort: decode_ushort(m["ushort"]),
-    }
-  end
-
-  def from_json(json) do
-    json
-          |> Jason.decode!()
-          |> from_map()
-  end
-
-  def to_map(struct) do
-    %{
-      "ushort" => struct.ushort,
-    }
-  end
-
-  def to_json(struct) do
-    struct
-          |> to_map()
-          |> Jason.encode!()
-  end
-end
-
 defmodule Obj5 do
-  @enforce_keys [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unowned, :unsafe, :unsigned, :use_serializers, :ushort]
-  defstruct [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unowned, :unsafe, :unsigned, :use_serializers, :ushort]
+  @enforce_keys [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :use_serializers]
+  defstruct [:dummy, :k_serializer, :obj5_self, :obj5_true, :obj5_type, :primitive_kind, :select, :self, :sendable, :serial_descriptor, :serial_name, :serializable, :serialize, :serializer_provider, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :to_string, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :use_serializers]
 
   @type t :: %__MODULE__{
           dummy: integer(),
@@ -13466,6 +13547,7 @@ defmodule Obj5 do
           obj5_true: TrueClass.t(),
           obj5_type: TypeClass.t(),
           primitive_kind: PrimitiveKind.t(),
+          select: Select.t(),
           self: Self.t(),
           sendable: Sendable.t(),
           serial_descriptor: SerialDescriptor.t(),
@@ -13503,6 +13585,7 @@ defmodule Obj5 do
           time_only: TimeOnly.t(),
           time_only_converter: TimeOnlyConverter.t(),
           time_zone: TimeZone.t(),
+          to_dict: ToDict.t(),
           to_json: ToJSON.t(),
           to_string: ToString.t(),
           top_level: TopLevelClass.t(),
@@ -13520,11 +13603,10 @@ defmodule Obj5 do
           unchecked: Unchecked.t(),
           undefined: Undefined.t(),
           union: Union.t(),
+          unmarshal_json: UnmarshalJSON.t(),
           unowned: Unowned.t(),
           unsafe: Unsafe.t(),
-          unsigned: Unsigned.t(),
-          use_serializers: UseSerializers.t(),
-          ushort: Ushort.t()
+          use_serializers: UseSerializers.t()
         }
 
   def decode_dummy(value) when is_integer(value), do: value
@@ -13541,6 +13623,7 @@ defmodule Obj5 do
       obj5_true: TrueClass.from_map(m["True"]),
       obj5_type: TypeClass.from_map(m["type"]),
       primitive_kind: PrimitiveKind.from_map(m["PrimitiveKind"]),
+      select: Select.from_map(m["select"]),
       self: Self.from_map(m["Self"]),
       sendable: Sendable.from_map(m["Sendable"]),
       serial_descriptor: SerialDescriptor.from_map(m["SerialDescriptor"]),
@@ -13578,6 +13661,7 @@ defmodule Obj5 do
       time_only: TimeOnly.from_map(m["TimeOnly"]),
       time_only_converter: TimeOnlyConverter.from_map(m["TimeOnlyConverter"]),
       time_zone: TimeZone.from_map(m["TimeZone"]),
+      to_dict: ToDict.from_map(m["to_dict"]),
       to_json: ToJSON.from_map(m["to_json"]),
       to_string: ToString.from_map(m["toString"]),
       top_level: TopLevelClass.from_map(m["top_level"]),
@@ -13595,11 +13679,10 @@ defmodule Obj5 do
       unchecked: Unchecked.from_map(m["unchecked"]),
       undefined: Undefined.from_map(m["undefined"]),
       union: Union.from_map(m["union"]),
+      unmarshal_json: UnmarshalJSON.from_map(m["UnmarshalJSON"]),
       unowned: Unowned.from_map(m["unowned"]),
       unsafe: Unsafe.from_map(m["unsafe"]),
-      unsigned: Unsigned.from_map(m["unsigned"]),
       use_serializers: UseSerializers.from_map(m["UseSerializers"]),
-      ushort: Ushort.from_map(m["ushort"]),
     }
   end
 
@@ -13617,6 +13700,7 @@ defmodule Obj5 do
       "True" => TrueClass.to_map(struct.obj5_true),
       "type" => TypeClass.to_map(struct.obj5_type),
       "PrimitiveKind" => PrimitiveKind.to_map(struct.primitive_kind),
+      "select" => Select.to_map(struct.select),
       "Self" => Self.to_map(struct.self),
       "Sendable" => Sendable.to_map(struct.sendable),
       "SerialDescriptor" => SerialDescriptor.to_map(struct.serial_descriptor),
@@ -13654,6 +13738,7 @@ defmodule Obj5 do
       "TimeOnly" => TimeOnly.to_map(struct.time_only),
       "TimeOnlyConverter" => TimeOnlyConverter.to_map(struct.time_only_converter),
       "TimeZone" => TimeZone.to_map(struct.time_zone),
+      "to_dict" => ToDict.to_map(struct.to_dict),
       "to_json" => ToJSON.to_map(struct.to_json),
       "toString" => ToString.to_map(struct.to_string),
       "top_level" => TopLevelClass.to_map(struct.top_level),
@@ -13671,11 +13756,88 @@ defmodule Obj5 do
       "unchecked" => Unchecked.to_map(struct.unchecked),
       "undefined" => Undefined.to_map(struct.undefined),
       "union" => Union.to_map(struct.union),
+      "UnmarshalJSON" => UnmarshalJSON.to_map(struct.unmarshal_json),
       "unowned" => Unowned.to_map(struct.unowned),
       "unsafe" => Unsafe.to_map(struct.unsafe),
-      "unsigned" => Unsigned.to_map(struct.unsigned),
       "UseSerializers" => UseSerializers.to_map(struct.use_serializers),
-      "ushort" => Ushort.to_map(struct.ushort),
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Unsigned do
+  @enforce_keys [:unsigned]
+  defstruct [:unsigned]
+
+  @type t :: %__MODULE__{
+          unsigned: integer()
+        }
+
+  def decode_unsigned(value) when is_integer(value), do: value
+  def decode_unsigned(_), do: {:error, "Unexpected type when decoding Unsigned.unsigned"}
+
+  def encode_unsigned(value) when is_integer(value), do: value
+  def encode_unsigned(_), do: {:error, "Unexpected type when encoding Unsigned.unsigned"}
+
+  def from_map(m) do
+    %Unsigned{
+      unsigned: decode_unsigned(m["unsigned"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "unsigned" => struct.unsigned,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
+defmodule Ushort do
+  @enforce_keys [:ushort]
+  defstruct [:ushort]
+
+  @type t :: %__MODULE__{
+          ushort: integer()
+        }
+
+  def decode_ushort(value) when is_integer(value), do: value
+  def decode_ushort(_), do: {:error, "Unexpected type when decoding Ushort.ushort"}
+
+  def encode_ushort(value) when is_integer(value), do: value
+  def encode_ushort(_), do: {:error, "Unexpected type when encoding Ushort.ushort"}
+
+  def from_map(m) do
+    %Ushort{
+      ushort: decode_ushort(m["ushort"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "ushort" => struct.ushort,
     }
   end
 
@@ -14389,11 +14551,13 @@ defmodule Yield do
 end
 
 defmodule Obj6 do
-  @enforce_keys [:dummy, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
-  defstruct [:dummy, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  @enforce_keys [:dummy, :unsigned, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  defstruct [:dummy, :unsigned, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
 
   @type t :: %__MODULE__{
           dummy: integer(),
+          unsigned: Unsigned.t(),
+          ushort: Ushort.t(),
           using: Using.t(),
           utf8_json_reader: Utf8JSONReader.t(),
           utf8_json_writer: Utf8JSONWriter.t(),
@@ -14423,6 +14587,8 @@ defmodule Obj6 do
   def from_map(m) do
     %Obj6{
       dummy: decode_dummy(m["dummy"]),
+      unsigned: Unsigned.from_map(m["unsigned"]),
+      ushort: Ushort.from_map(m["ushort"]),
       using: Using.from_map(m["using"]),
       utf8_json_reader: Utf8JSONReader.from_map(m["Utf8JsonReader"]),
       utf8_json_writer: Utf8JSONWriter.from_map(m["Utf8JsonWriter"]),
@@ -14453,6 +14619,8 @@ defmodule Obj6 do
   def to_map(struct) do
     %{
       "dummy" => struct.dummy,
+      "unsigned" => Unsigned.to_map(struct.unsigned),
+      "ushort" => Ushort.to_map(struct.ushort),
       "using" => Using.to_map(struct.using),
       "Utf8JsonReader" => Utf8JSONReader.to_map(struct.utf8_json_reader),
       "Utf8JsonWriter" => Utf8JSONWriter.to_map(struct.utf8_json_writer),
diff --git a/base/elm/test/inputs/json/misc/00ec5.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/00ec5.json/default/QuickType.elm
index 286ecb4..20ac735 100644
--- a/base/elm/test/inputs/json/misc/00ec5.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/00ec5.json/default/QuickType.elm
@@ -160,7 +160,7 @@ provider =
 encodeProvider : Provider -> Jenc.Value
 encodeProvider x =
     Jenc.object
-        [ ("properties", Jenc.dict identity encodeProperty x.properties)
+        [ ("properties", makeDictEncoder identity encodeProperty x.properties)
         ]
 
 property : Jdec.Decoder Property
@@ -303,6 +303,14 @@ encodeSchema x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/033b1.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/033b1.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/033b1.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/033b1.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/09f54.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/09f54.json/default/QuickType.elm
index b7adef0..8b79e00 100644
--- a/base/elm/test/inputs/json/misc/09f54.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/09f54.json/default/QuickType.elm
@@ -61,7 +61,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("data", Jenc.dict identity encodeDatum x.data)
+        [ ("data", makeDictEncoder identity encodeDatum x.data)
         , ("description", encodeDescription x.description)
         ]
 
@@ -97,6 +97,14 @@ encodeDescription x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/167d6.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/167d6.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/167d6.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/167d6.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/43eaf.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/43eaf.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/43eaf.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/43eaf.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/5f3a1.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/5f3a1.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/5f3a1.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/5f3a1.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/6260a.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/6260a.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/6260a.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/6260a.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/70c77.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/70c77.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/70c77.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/70c77.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/75912.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/75912.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/75912.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/75912.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/76ae1.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/76ae1.json/default/QuickType.elm
index 0c8edf9..206da10 100644
--- a/base/elm/test/inputs/json/misc/76ae1.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/76ae1.json/default/QuickType.elm
@@ -316,7 +316,7 @@ article =
 encodeArticle : Article -> Jenc.Value
 encodeArticle x =
     Jenc.object
-        [ ("properties", Jenc.dict identity encodeProperty x.properties)
+        [ ("properties", makeDictEncoder identity encodeProperty x.properties)
         ]
 
 property : Jdec.Decoder Property
@@ -722,6 +722,14 @@ encodeSchemaType x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/7d397.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/7d397.json/default/QuickType.elm
index f1f71b2..9366d1a 100644
--- a/base/elm/test/inputs/json/misc/7d397.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/7d397.json/default/QuickType.elm
@@ -170,7 +170,7 @@ listClass =
 encodeListClass : ListClass -> Jenc.Value
 encodeListClass x =
     Jenc.object
-        [ ("properties", Jenc.dict identity encodeProperty x.properties)
+        [ ("properties", makeDictEncoder identity encodeProperty x.properties)
         ]
 
 property : Jdec.Decoder Property
@@ -339,6 +339,14 @@ encodeItems x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/7f568.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/7f568.json/default/QuickType.elm
index 35c3eee..8d0421a 100644
--- a/base/elm/test/inputs/json/misc/7f568.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/7f568.json/default/QuickType.elm
@@ -103,7 +103,7 @@ encodeQuickTypeElement x =
         , ("commits_url", Jenc.string x.commitsURL)
         , ("created_at", Jenc.string x.createdAt)
         , ("description", makeNullableEncoder Jenc.string x.description)
-        , ("files", Jenc.dict identity encodeFile x.files)
+        , ("files", makeDictEncoder identity encodeFile x.files)
         , ("forks_url", Jenc.string x.forksURL)
         , ("git_pull_url", Jenc.string x.gitPullURL)
         , ("git_push_url", Jenc.string x.gitPushURL)
@@ -163,6 +163,14 @@ encodeLanguage x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/9617f.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/9617f.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/9617f.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/9617f.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/a9691.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/a9691.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/a9691.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/a9691.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/ac944.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/ac944.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/ac944.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/ac944.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/c0356.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/c0356.json/default/QuickType.elm
index 82cbe6f..4a91826 100644
--- a/base/elm/test/inputs/json/misc/c0356.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/c0356.json/default/QuickType.elm
@@ -60,7 +60,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("data", Jenc.dict identity encodeDatum x.data)
+        [ ("data", makeDictEncoder identity encodeDatum x.data)
         , ("description", encodeDescription x.description)
         ]
 
@@ -94,6 +94,14 @@ encodeDescription x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/cb81e.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/cb81e.json/default/QuickType.elm
index 9354bd5..2ee6a9e 100644
--- a/base/elm/test/inputs/json/misc/cb81e.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/cb81e.json/default/QuickType.elm
@@ -55,7 +55,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("data", Jenc.dict identity Jenc.string x.data)
+        [ ("data", makeDictEncoder identity Jenc.string x.data)
         , ("description", encodeDescription x.description)
         ]
 
@@ -78,6 +78,14 @@ encodeDescription x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/cd463.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/cd463.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/cd463.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/cd463.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/cfbce.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/cfbce.json/default/QuickType.elm
index a54c0ff..02718b9 100644
--- a/base/elm/test/inputs/json/misc/cfbce.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/cfbce.json/default/QuickType.elm
@@ -51,11 +51,19 @@ encodeQuickType x =
     Jenc.object
         [ ("base", Jenc.string x.base)
         , ("date", Jenc.string x.date)
-        , ("rates", Jenc.dict identity Jenc.float x.rates)
+        , ("rates", makeDictEncoder identity Jenc.float x.rates)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/e324e.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/e324e.json/default/QuickType.elm
index 598ab89..a3f7298 100644
--- a/base/elm/test/inputs/json/misc/e324e.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/e324e.json/default/QuickType.elm
@@ -166,7 +166,7 @@ rate =
 encodeRate : Rate -> Jenc.Value
 encodeRate x =
     Jenc.object
-        [ ("properties", Jenc.dict identity encodeProperty x.properties)
+        [ ("properties", makeDictEncoder identity encodeProperty x.properties)
         ]
 
 property : Jdec.Decoder Property
@@ -322,6 +322,14 @@ encodeItems x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/ed095.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/ed095.json/default/QuickType.elm
index 7c5f919..323836c 100644
--- a/base/elm/test/inputs/json/misc/ed095.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/ed095.json/default/QuickType.elm
@@ -36,10 +36,18 @@ quickType : Jdec.Decoder QuickType
 quickType = Jdec.dict Jdec.string
 
 quickTypeToString : QuickType -> String
-quickTypeToString r = Jenc.encode 0 (Jenc.dict identity Jenc.string r)
+quickTypeToString r = Jenc.encode 0 (makeDictEncoder identity Jenc.string r)
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/misc/fd329.json/default/QuickType.elm b/head/elm/test/inputs/json/misc/fd329.json/default/QuickType.elm
index b7adef0..8b79e00 100644
--- a/base/elm/test/inputs/json/misc/fd329.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/misc/fd329.json/default/QuickType.elm
@@ -61,7 +61,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("data", Jenc.dict identity encodeDatum x.data)
+        [ ("data", makeDictEncoder identity encodeDatum x.data)
         , ("description", encodeDescription x.description)
         ]
 
@@ -97,6 +97,14 @@ encodeDescription x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/bug2037.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/bug2037.json/default/QuickType.elm
index 2be329e..ca3faea 100644
--- a/base/elm/test/inputs/json/priority/bug2037.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/bug2037.json/default/QuickType.elm
@@ -60,7 +60,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("mission_specs", Jenc.dict identity encodeMissionSpec x.missionSpecs)
+        [ ("mission_specs", makeDictEncoder identity encodeMissionSpec x.missionSpecs)
         ]
 
 missionSpec : Jdec.Decoder MissionSpec
@@ -71,7 +71,7 @@ missionSpec =
 encodeMissionSpec : MissionSpec -> Jenc.Value
 encodeMissionSpec x =
     Jenc.object
-        [ ("objectives", Jenc.dict identity encodeObjective x.objectives)
+        [ ("objectives", makeDictEncoder identity encodeObjective x.objectives)
         ]
 
 objective : Jdec.Decoder Objective
@@ -82,7 +82,7 @@ objective =
 encodeObjective : Objective -> Jenc.Value
 encodeObjective x =
     Jenc.object
-        [ ("rewards", Jenc.dict identity encodeReward x.rewards)
+        [ ("rewards", makeDictEncoder identity encodeReward x.rewards)
         ]
 
 reward : Jdec.Decoder Reward
@@ -97,6 +97,14 @@ encodeReward x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/bug855-short.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/bug855-short.json/default/QuickType.elm
index 6af0100..dd2a1cb 100644
--- a/base/elm/test/inputs/json/priority/bug855-short.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/bug855-short.json/default/QuickType.elm
@@ -45,7 +45,7 @@ quickType : Jdec.Decoder QuickType
 quickType = Jdec.dict quickTypeValue
 
 quickTypeToString : QuickType -> String
-quickTypeToString r = Jenc.encode 0 (Jenc.dict identity encodeQuickTypeValue r)
+quickTypeToString r = Jenc.encode 0 (makeDictEncoder identity encodeQuickTypeValue r)
 
 quickTypeValue : Jdec.Decoder QuickTypeValue
 quickTypeValue =
@@ -68,6 +68,14 @@ encodeQuickTypeValue x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/coin-pairs.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/coin-pairs.json/default/QuickType.elm
index a735414..8819cc5 100644
--- a/base/elm/test/inputs/json/priority/coin-pairs.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/coin-pairs.json/default/QuickType.elm
@@ -59,7 +59,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("pairs", Jenc.dict identity encodePair x.pairs)
+        [ ("pairs", makeDictEncoder identity encodePair x.pairs)
         , ("server_time", Jenc.int x.serverTime)
         ]
 
@@ -90,6 +90,14 @@ encodePair x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations1.json/array-type-array--eed288b23e27/QuickType.elm b/head/elm/test/inputs/json/priority/combinations1.json/array-type-array--eed288b23e27/QuickType.elm
index c216af5..04e92aa 100644
--- a/base/elm/test/inputs/json/priority/combinations1.json/array-type-array--eed288b23e27/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations1.json/array-type-array--eed288b23e27/QuickType.elm
@@ -642,7 +642,7 @@ encodeQuickType x =
         , ("fuzzy", Jenc.array encodeFuzzy x.fuzzy)
         , ("gardenwards", Jenc.array encodeGardenward x.gardenwards)
         , ("generalissimo", Jenc.array encodeGeneralissimo x.generalissimo)
-        , ("habeas", Jenc.array (makeNullableEncoder (Jenc.dict identity Jenc.int)) x.habeas)
+        , ("habeas", Jenc.array (makeNullableEncoder (makeDictEncoder identity Jenc.int)) x.habeas)
         , ("hemicrystalline", Jenc.array encodeHemicrystalline x.hemicrystalline)
         , ("hemocoele", Jenc.array encodeHemocoeleElement x.hemocoele)
         , ("hoister", Jenc.array encodeHoister x.hoister)
@@ -916,7 +916,7 @@ consilience =
 encodeConsilience : Consilience -> Jenc.Value
 encodeConsilience x = case x of
     DoubleInConsilience y -> Jenc.float y
-    IntegerMapInConsilience y -> Jenc.dict identity Jenc.int y
+    IntegerMapInConsilience y -> makeDictEncoder identity Jenc.int y
 
 constructor : Jdec.Decoder Constructor
 constructor =
@@ -928,7 +928,7 @@ constructor =
 encodeConstructor : Constructor -> Jenc.Value
 encodeConstructor x = case x of
     BoolInConstructor y -> Jenc.bool y
-    UnionMapInConstructor y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInConstructor y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 continuative : Jdec.Decoder Continuative
 continuative =
@@ -940,7 +940,7 @@ continuative =
 encodeContinuative : Continuative -> Jenc.Value
 encodeContinuative x = case x of
     StringInContinuative y -> Jenc.string y
-    IntegerMapInContinuative y -> Jenc.dict identity Jenc.int y
+    IntegerMapInContinuative y -> makeDictEncoder identity Jenc.int y
 
 credulityElement : Jdec.Decoder CredulityElement
 credulityElement =
@@ -1017,7 +1017,7 @@ encodeCreviced : Creviced -> Jenc.Value
 encodeCreviced x = case x of
     BoolInCreviced y -> Jenc.bool y
     StringInCreviced y -> Jenc.string y
-    IntegerMapInCreviced y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCreviced y -> makeDictEncoder identity Jenc.int y
 
 deruralizeElement : Jdec.Decoder DeruralizeElement
 deruralizeElement =
@@ -1171,7 +1171,7 @@ encodeEleutheromania : Eleutheromania -> Jenc.Value
 encodeEleutheromania x = case x of
     StringInEleutheromania y -> Jenc.string y
     DoubleInEleutheromania y -> Jenc.float y
-    IntegerMapInEleutheromania y -> Jenc.dict identity Jenc.int y
+    IntegerMapInEleutheromania y -> makeDictEncoder identity Jenc.int y
 
 encrust : Jdec.Decoder Encrust
 encrust =
@@ -1469,7 +1469,7 @@ fuzzy =
 encodeFuzzy : Fuzzy -> Jenc.Value
 encodeFuzzy x = case x of
     IntegerInFuzzy y -> Jenc.int y
-    UnionMapInFuzzy y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInFuzzy y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 gardenward : Jdec.Decoder Gardenward
 gardenward =
@@ -1497,7 +1497,7 @@ encodeGeneralissimo : Generalissimo -> Jenc.Value
 encodeGeneralissimo x = case x of
     BoolInGeneralissimo y -> Jenc.bool y
     NullInGeneralissimo -> Jenc.null
-    IntegerMapInGeneralissimo y -> Jenc.dict identity Jenc.int y
+    IntegerMapInGeneralissimo y -> makeDictEncoder identity Jenc.int y
 
 hemicrystalline : Jdec.Decoder Hemicrystalline
 hemicrystalline =
@@ -1695,10 +1695,18 @@ jacutinga =
 encodeJacutinga : Jacutinga -> Jenc.Value
 encodeJacutinga x = case x of
     IntegerArrayInJacutinga y -> Jenc.array Jenc.int y
-    UnionMapInJacutinga y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInJacutinga y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations1.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/combinations1.json/default/QuickType.elm
index 8d42014..1734735 100644
--- a/base/elm/test/inputs/json/priority/combinations1.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations1.json/default/QuickType.elm
@@ -641,7 +641,7 @@ encodeQuickType x =
         , ("fuzzy", Jenc.list encodeFuzzy x.fuzzy)
         , ("gardenwards", Jenc.list encodeGardenward x.gardenwards)
         , ("generalissimo", Jenc.list encodeGeneralissimo x.generalissimo)
-        , ("habeas", Jenc.list (makeNullableEncoder (Jenc.dict identity Jenc.int)) x.habeas)
+        , ("habeas", Jenc.list (makeNullableEncoder (makeDictEncoder identity Jenc.int)) x.habeas)
         , ("hemicrystalline", Jenc.list encodeHemicrystalline x.hemicrystalline)
         , ("hemocoele", Jenc.list encodeHemocoeleElement x.hemocoele)
         , ("hoister", Jenc.list encodeHoister x.hoister)
@@ -915,7 +915,7 @@ consilience =
 encodeConsilience : Consilience -> Jenc.Value
 encodeConsilience x = case x of
     DoubleInConsilience y -> Jenc.float y
-    IntegerMapInConsilience y -> Jenc.dict identity Jenc.int y
+    IntegerMapInConsilience y -> makeDictEncoder identity Jenc.int y
 
 constructor : Jdec.Decoder Constructor
 constructor =
@@ -927,7 +927,7 @@ constructor =
 encodeConstructor : Constructor -> Jenc.Value
 encodeConstructor x = case x of
     BoolInConstructor y -> Jenc.bool y
-    UnionMapInConstructor y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInConstructor y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 continuative : Jdec.Decoder Continuative
 continuative =
@@ -939,7 +939,7 @@ continuative =
 encodeContinuative : Continuative -> Jenc.Value
 encodeContinuative x = case x of
     StringInContinuative y -> Jenc.string y
-    IntegerMapInContinuative y -> Jenc.dict identity Jenc.int y
+    IntegerMapInContinuative y -> makeDictEncoder identity Jenc.int y
 
 credulityElement : Jdec.Decoder CredulityElement
 credulityElement =
@@ -1016,7 +1016,7 @@ encodeCreviced : Creviced -> Jenc.Value
 encodeCreviced x = case x of
     BoolInCreviced y -> Jenc.bool y
     StringInCreviced y -> Jenc.string y
-    IntegerMapInCreviced y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCreviced y -> makeDictEncoder identity Jenc.int y
 
 deruralizeElement : Jdec.Decoder DeruralizeElement
 deruralizeElement =
@@ -1170,7 +1170,7 @@ encodeEleutheromania : Eleutheromania -> Jenc.Value
 encodeEleutheromania x = case x of
     StringInEleutheromania y -> Jenc.string y
     DoubleInEleutheromania y -> Jenc.float y
-    IntegerMapInEleutheromania y -> Jenc.dict identity Jenc.int y
+    IntegerMapInEleutheromania y -> makeDictEncoder identity Jenc.int y
 
 encrust : Jdec.Decoder Encrust
 encrust =
@@ -1468,7 +1468,7 @@ fuzzy =
 encodeFuzzy : Fuzzy -> Jenc.Value
 encodeFuzzy x = case x of
     IntegerInFuzzy y -> Jenc.int y
-    UnionMapInFuzzy y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInFuzzy y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 gardenward : Jdec.Decoder Gardenward
 gardenward =
@@ -1496,7 +1496,7 @@ encodeGeneralissimo : Generalissimo -> Jenc.Value
 encodeGeneralissimo x = case x of
     BoolInGeneralissimo y -> Jenc.bool y
     NullInGeneralissimo -> Jenc.null
-    IntegerMapInGeneralissimo y -> Jenc.dict identity Jenc.int y
+    IntegerMapInGeneralissimo y -> makeDictEncoder identity Jenc.int y
 
 hemicrystalline : Jdec.Decoder Hemicrystalline
 hemicrystalline =
@@ -1694,10 +1694,18 @@ jacutinga =
 encodeJacutinga : Jacutinga -> Jenc.Value
 encodeJacutinga x = case x of
     IntegerArrayInJacutinga y -> Jenc.list Jenc.int y
-    UnionMapInJacutinga y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInJacutinga y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations2.json/array-type-array--eed288b23e27/QuickType.elm b/head/elm/test/inputs/json/priority/combinations2.json/array-type-array--eed288b23e27/QuickType.elm
index ebd3231..b0b1001 100644
--- a/base/elm/test/inputs/json/priority/combinations2.json/array-type-array--eed288b23e27/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations2.json/array-type-array--eed288b23e27/QuickType.elm
@@ -579,13 +579,13 @@ encodeQuickType x =
         , ("amphithyron", Jenc.array (makeNullableEncoder encodeAmphithyron) x.amphithyron)
         , ("Andriana", Jenc.array (makeNullableEncoder Jenc.string) x.andriana)
         , ("ankee", Jenc.array encodeAnkeeElement x.ankee)
-        , ("annihilator", Jenc.array (makeNullableEncoder (Jenc.dict identity (makeNullableEncoder Jenc.int))) x.annihilator)
+        , ("annihilator", Jenc.array (makeNullableEncoder (makeDictEncoder identity (makeNullableEncoder Jenc.int))) x.annihilator)
         , ("annulose", always Jenc.null x.annulose)
         , ("Ansarie", Jenc.array encodeAnsarieElement x.ansarie)
         , ("aphasia", Jenc.array encodeAphasia x.aphasia)
         , ("asprawl", Jenc.array encodeAsprawl x.asprawl)
         , ("attractive", Jenc.array (makeNullableEncoder Jenc.bool) x.attractive)
-        , ("barksome", Jenc.dict identity Jenc.int x.barksome)
+        , ("barksome", makeDictEncoder identity Jenc.int x.barksome)
         , ("bedesman", Jenc.array encodeBedesman x.bedesman)
         , ("belard", Jenc.array encodeBelard x.belard)
         , ("bocking", Jenc.array encodeBocking x.bocking)
@@ -612,7 +612,7 @@ encodeQuickType x =
         , ("School", Jenc.array encodeSchool x.school)
         , ("Shakespearolater", Jenc.array encodeShakespearolater x.shakespearolater)
         , ("Svan", Jenc.array Jenc.float x.svan)
-        , ("Wayao", Jenc.dict identity Jenc.float x.wayao)
+        , ("Wayao", makeDictEncoder identity Jenc.float x.wayao)
         ]
 
 abranchiata : Jdec.Decoder Abranchiata
@@ -641,7 +641,7 @@ encodeAcademe : Academe -> Jenc.Value
 encodeAcademe x = case x of
     IntegerArrayInAcademe y -> Jenc.array Jenc.int y
     IntegerInAcademe y -> Jenc.int y
-    IntegerMapInAcademe y -> Jenc.dict identity Jenc.int y
+    IntegerMapInAcademe y -> makeDictEncoder identity Jenc.int y
 
 acquirable : Jdec.Decoder Acquirable
 acquirable =
@@ -653,7 +653,7 @@ acquirable =
 encodeAcquirable : Acquirable -> Jenc.Value
 encodeAcquirable x = case x of
     UnionArrayInAcquirable y -> Jenc.array (makeNullableEncoder Jenc.int) y
-    IntegerMapInAcquirable y -> Jenc.dict identity Jenc.int y
+    IntegerMapInAcquirable y -> makeDictEncoder identity Jenc.int y
 
 aerometry : Jdec.Decoder Aerometry
 aerometry =
@@ -1034,7 +1034,7 @@ encodeBocking : Bocking -> Jenc.Value
 encodeBocking x = case x of
     IntegerArrayInBocking y -> Jenc.array Jenc.int y
     BoolInBocking y -> Jenc.bool y
-    IntegerMapInBocking y -> Jenc.dict identity Jenc.int y
+    IntegerMapInBocking y -> makeDictEncoder identity Jenc.int y
 
 brawlingly : Jdec.Decoder Brawlingly
 brawlingly =
@@ -1046,7 +1046,7 @@ brawlingly =
 encodeBrawlingly : Brawlingly -> Jenc.Value
 encodeBrawlingly x = case x of
     NullArrayInBrawlingly y -> Jenc.array (always Jenc.null) y
-    UnionMapInBrawlingly y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInBrawlingly y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 brookie : Jdec.Decoder Brookie
 brookie =
@@ -1098,7 +1098,7 @@ encodeCatallactic : Catallactic -> Jenc.Value
 encodeCatallactic x = case x of
     NullArrayInCatallactic y -> Jenc.array (always Jenc.null) y
     BoolInCatallactic y -> Jenc.bool y
-    IntegerMapInCatallactic y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCatallactic y -> makeDictEncoder identity Jenc.int y
 
 cemental : Jdec.Decoder Cemental
 cemental =
@@ -1112,7 +1112,7 @@ encodeCemental : Cemental -> Jenc.Value
 encodeCemental x = case x of
     IntegerArrayInCemental y -> Jenc.array Jenc.int y
     DoubleInCemental y -> Jenc.float y
-    IntegerMapInCemental y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCemental y -> makeDictEncoder identity Jenc.int y
 
 chytridiaceaeElement : Jdec.Decoder ChytridiaceaeElement
 chytridiaceaeElement =
@@ -1284,7 +1284,7 @@ eupatorium =
 encodeEupatorium : Eupatorium -> Jenc.Value
 encodeEupatorium x = case x of
     NullArrayInEupatorium y -> Jenc.array (always Jenc.null) y
-    IntegerMapInEupatorium y -> Jenc.dict identity Jenc.int y
+    IntegerMapInEupatorium y -> makeDictEncoder identity Jenc.int y
 
 gryphosaurusElement : Jdec.Decoder GryphosaurusElement
 gryphosaurusElement =
@@ -1359,7 +1359,7 @@ koryak =
 encodeKoryak : Koryak -> Jenc.Value
 encodeKoryak x = case x of
     StringInKoryak y -> Jenc.string y
-    UnionMapInKoryak y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInKoryak y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 laviniaElement : Jdec.Decoder LaviniaElement
 laviniaElement =
@@ -1547,7 +1547,7 @@ encodeSchool : School -> Jenc.Value
 encodeSchool x = case x of
     IntegerInSchool y -> Jenc.int y
     NullInSchool -> Jenc.null
-    IntegerMapInSchool y -> Jenc.dict identity Jenc.int y
+    IntegerMapInSchool y -> makeDictEncoder identity Jenc.int y
 
 shakespearolater : Jdec.Decoder Shakespearolater
 shakespearolater =
@@ -1565,6 +1565,14 @@ encodeShakespearolater x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations2.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/combinations2.json/default/QuickType.elm
index 3d9652b..adec549 100644
--- a/base/elm/test/inputs/json/priority/combinations2.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations2.json/default/QuickType.elm
@@ -578,13 +578,13 @@ encodeQuickType x =
         , ("amphithyron", Jenc.list (makeNullableEncoder encodeAmphithyron) x.amphithyron)
         , ("Andriana", Jenc.list (makeNullableEncoder Jenc.string) x.andriana)
         , ("ankee", Jenc.list encodeAnkeeElement x.ankee)
-        , ("annihilator", Jenc.list (makeNullableEncoder (Jenc.dict identity (makeNullableEncoder Jenc.int))) x.annihilator)
+        , ("annihilator", Jenc.list (makeNullableEncoder (makeDictEncoder identity (makeNullableEncoder Jenc.int))) x.annihilator)
         , ("annulose", always Jenc.null x.annulose)
         , ("Ansarie", Jenc.list encodeAnsarieElement x.ansarie)
         , ("aphasia", Jenc.list encodeAphasia x.aphasia)
         , ("asprawl", Jenc.list encodeAsprawl x.asprawl)
         , ("attractive", Jenc.list (makeNullableEncoder Jenc.bool) x.attractive)
-        , ("barksome", Jenc.dict identity Jenc.int x.barksome)
+        , ("barksome", makeDictEncoder identity Jenc.int x.barksome)
         , ("bedesman", Jenc.list encodeBedesman x.bedesman)
         , ("belard", Jenc.list encodeBelard x.belard)
         , ("bocking", Jenc.list encodeBocking x.bocking)
@@ -611,7 +611,7 @@ encodeQuickType x =
         , ("School", Jenc.list encodeSchool x.school)
         , ("Shakespearolater", Jenc.list encodeShakespearolater x.shakespearolater)
         , ("Svan", Jenc.list Jenc.float x.svan)
-        , ("Wayao", Jenc.dict identity Jenc.float x.wayao)
+        , ("Wayao", makeDictEncoder identity Jenc.float x.wayao)
         ]
 
 abranchiata : Jdec.Decoder Abranchiata
@@ -640,7 +640,7 @@ encodeAcademe : Academe -> Jenc.Value
 encodeAcademe x = case x of
     IntegerArrayInAcademe y -> Jenc.list Jenc.int y
     IntegerInAcademe y -> Jenc.int y
-    IntegerMapInAcademe y -> Jenc.dict identity Jenc.int y
+    IntegerMapInAcademe y -> makeDictEncoder identity Jenc.int y
 
 acquirable : Jdec.Decoder Acquirable
 acquirable =
@@ -652,7 +652,7 @@ acquirable =
 encodeAcquirable : Acquirable -> Jenc.Value
 encodeAcquirable x = case x of
     UnionArrayInAcquirable y -> Jenc.list (makeNullableEncoder Jenc.int) y
-    IntegerMapInAcquirable y -> Jenc.dict identity Jenc.int y
+    IntegerMapInAcquirable y -> makeDictEncoder identity Jenc.int y
 
 aerometry : Jdec.Decoder Aerometry
 aerometry =
@@ -1033,7 +1033,7 @@ encodeBocking : Bocking -> Jenc.Value
 encodeBocking x = case x of
     IntegerArrayInBocking y -> Jenc.list Jenc.int y
     BoolInBocking y -> Jenc.bool y
-    IntegerMapInBocking y -> Jenc.dict identity Jenc.int y
+    IntegerMapInBocking y -> makeDictEncoder identity Jenc.int y
 
 brawlingly : Jdec.Decoder Brawlingly
 brawlingly =
@@ -1045,7 +1045,7 @@ brawlingly =
 encodeBrawlingly : Brawlingly -> Jenc.Value
 encodeBrawlingly x = case x of
     NullArrayInBrawlingly y -> Jenc.list (always Jenc.null) y
-    UnionMapInBrawlingly y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInBrawlingly y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 brookie : Jdec.Decoder Brookie
 brookie =
@@ -1097,7 +1097,7 @@ encodeCatallactic : Catallactic -> Jenc.Value
 encodeCatallactic x = case x of
     NullArrayInCatallactic y -> Jenc.list (always Jenc.null) y
     BoolInCatallactic y -> Jenc.bool y
-    IntegerMapInCatallactic y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCatallactic y -> makeDictEncoder identity Jenc.int y
 
 cemental : Jdec.Decoder Cemental
 cemental =
@@ -1111,7 +1111,7 @@ encodeCemental : Cemental -> Jenc.Value
 encodeCemental x = case x of
     IntegerArrayInCemental y -> Jenc.list Jenc.int y
     DoubleInCemental y -> Jenc.float y
-    IntegerMapInCemental y -> Jenc.dict identity Jenc.int y
+    IntegerMapInCemental y -> makeDictEncoder identity Jenc.int y
 
 chytridiaceaeElement : Jdec.Decoder ChytridiaceaeElement
 chytridiaceaeElement =
@@ -1283,7 +1283,7 @@ eupatorium =
 encodeEupatorium : Eupatorium -> Jenc.Value
 encodeEupatorium x = case x of
     NullArrayInEupatorium y -> Jenc.list (always Jenc.null) y
-    IntegerMapInEupatorium y -> Jenc.dict identity Jenc.int y
+    IntegerMapInEupatorium y -> makeDictEncoder identity Jenc.int y
 
 gryphosaurusElement : Jdec.Decoder GryphosaurusElement
 gryphosaurusElement =
@@ -1358,7 +1358,7 @@ koryak =
 encodeKoryak : Koryak -> Jenc.Value
 encodeKoryak x = case x of
     StringInKoryak y -> Jenc.string y
-    UnionMapInKoryak y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInKoryak y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 laviniaElement : Jdec.Decoder LaviniaElement
 laviniaElement =
@@ -1546,7 +1546,7 @@ encodeSchool : School -> Jenc.Value
 encodeSchool x = case x of
     IntegerInSchool y -> Jenc.int y
     NullInSchool -> Jenc.null
-    IntegerMapInSchool y -> Jenc.dict identity Jenc.int y
+    IntegerMapInSchool y -> makeDictEncoder identity Jenc.int y
 
 shakespearolater : Jdec.Decoder Shakespearolater
 shakespearolater =
@@ -1564,6 +1564,14 @@ encodeShakespearolater x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations3.json/array-type-array--eed288b23e27/QuickType.elm b/head/elm/test/inputs/json/priority/combinations3.json/array-type-array--eed288b23e27/QuickType.elm
index b7a4fb5..95c4162 100644
--- a/base/elm/test/inputs/json/priority/combinations3.json/array-type-array--eed288b23e27/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations3.json/array-type-array--eed288b23e27/QuickType.elm
@@ -714,7 +714,7 @@ encodeQuickType x =
         , ("prefreshman", Jenc.array encodePrefreshmanElement x.prefreshman)
         , ("prehensility", Jenc.array encodePrehensility x.prehensility)
         , ("prevoidance", Jenc.array encodePrevoidance x.prevoidance)
-        , ("probant", Jenc.array (Jenc.dict identity (makeNullableEncoder Jenc.int)) x.probant)
+        , ("probant", Jenc.array (makeDictEncoder identity (makeNullableEncoder Jenc.int)) x.probant)
         , ("protext", Jenc.array encodeProtext x.protext)
         ]
 
@@ -789,7 +789,7 @@ kongoni =
 encodeKongoni : Kongoni -> Jenc.Value
 encodeKongoni x = case x of
     IntegerArrayInKongoni y -> Jenc.array Jenc.int y
-    IntegerMapInKongoni y -> Jenc.dict identity Jenc.int y
+    IntegerMapInKongoni y -> makeDictEncoder identity Jenc.int y
 
 ladronismElement : Jdec.Decoder LadronismElement
 ladronismElement =
@@ -1462,7 +1462,7 @@ paleographically =
 encodePaleographically : Paleographically -> Jenc.Value
 encodePaleographically x = case x of
     DoubleInPaleographically y -> Jenc.float y
-    UnionMapInPaleographically y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInPaleographically y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 pamphletwise : Jdec.Decoder Pamphletwise
 pamphletwise =
@@ -1476,7 +1476,7 @@ encodePamphletwise : Pamphletwise -> Jenc.Value
 encodePamphletwise x = case x of
     IntegerInPamphletwise y -> Jenc.int y
     StringInPamphletwise y -> Jenc.string y
-    IntegerMapInPamphletwise y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPamphletwise y -> makeDictEncoder identity Jenc.int y
 
 pediatric : Jdec.Decoder Pediatric
 pediatric =
@@ -1613,7 +1613,7 @@ placuntiti =
 encodePlacuntiti : Placuntiti -> Jenc.Value
 encodePlacuntiti x = case x of
     IntegerInPlacuntiti y -> Jenc.int y
-    IntegerMapInPlacuntiti y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPlacuntiti y -> makeDictEncoder identity Jenc.int y
 
 plectopterous : Jdec.Decoder Plectopterous
 plectopterous =
@@ -1625,7 +1625,7 @@ plectopterous =
 encodePlectopterous : Plectopterous -> Jenc.Value
 encodePlectopterous x = case x of
     DoubleInPlectopterous y -> Jenc.float y
-    IntegerMapInPlectopterous y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPlectopterous y -> makeDictEncoder identity Jenc.int y
 
 pneumocele : Jdec.Decoder Pneumocele
 pneumocele =
@@ -1710,7 +1710,7 @@ encodePoormaster : Poormaster -> Jenc.Value
 encodePoormaster x = case x of
     IntegerArrayInPoormaster y -> Jenc.array Jenc.int y
     NullInPoormaster -> Jenc.null
-    IntegerMapInPoormaster y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPoormaster y -> makeDictEncoder identity Jenc.int y
 
 potwhiskyElement : Jdec.Decoder PotwhiskyElement
 potwhiskyElement =
@@ -1896,6 +1896,14 @@ encodeProtext x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations3.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/combinations3.json/default/QuickType.elm
index 8e8d31e..5e0c29d 100644
--- a/base/elm/test/inputs/json/priority/combinations3.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations3.json/default/QuickType.elm
@@ -713,7 +713,7 @@ encodeQuickType x =
         , ("prefreshman", Jenc.list encodePrefreshmanElement x.prefreshman)
         , ("prehensility", Jenc.list encodePrehensility x.prehensility)
         , ("prevoidance", Jenc.list encodePrevoidance x.prevoidance)
-        , ("probant", Jenc.list (Jenc.dict identity (makeNullableEncoder Jenc.int)) x.probant)
+        , ("probant", Jenc.list (makeDictEncoder identity (makeNullableEncoder Jenc.int)) x.probant)
         , ("protext", Jenc.list encodeProtext x.protext)
         ]
 
@@ -788,7 +788,7 @@ kongoni =
 encodeKongoni : Kongoni -> Jenc.Value
 encodeKongoni x = case x of
     IntegerArrayInKongoni y -> Jenc.list Jenc.int y
-    IntegerMapInKongoni y -> Jenc.dict identity Jenc.int y
+    IntegerMapInKongoni y -> makeDictEncoder identity Jenc.int y
 
 ladronismElement : Jdec.Decoder LadronismElement
 ladronismElement =
@@ -1461,7 +1461,7 @@ paleographically =
 encodePaleographically : Paleographically -> Jenc.Value
 encodePaleographically x = case x of
     DoubleInPaleographically y -> Jenc.float y
-    UnionMapInPaleographically y -> Jenc.dict identity (makeNullableEncoder Jenc.int) y
+    UnionMapInPaleographically y -> makeDictEncoder identity (makeNullableEncoder Jenc.int) y
 
 pamphletwise : Jdec.Decoder Pamphletwise
 pamphletwise =
@@ -1475,7 +1475,7 @@ encodePamphletwise : Pamphletwise -> Jenc.Value
 encodePamphletwise x = case x of
     IntegerInPamphletwise y -> Jenc.int y
     StringInPamphletwise y -> Jenc.string y
-    IntegerMapInPamphletwise y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPamphletwise y -> makeDictEncoder identity Jenc.int y
 
 pediatric : Jdec.Decoder Pediatric
 pediatric =
@@ -1612,7 +1612,7 @@ placuntiti =
 encodePlacuntiti : Placuntiti -> Jenc.Value
 encodePlacuntiti x = case x of
     IntegerInPlacuntiti y -> Jenc.int y
-    IntegerMapInPlacuntiti y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPlacuntiti y -> makeDictEncoder identity Jenc.int y
 
 plectopterous : Jdec.Decoder Plectopterous
 plectopterous =
@@ -1624,7 +1624,7 @@ plectopterous =
 encodePlectopterous : Plectopterous -> Jenc.Value
 encodePlectopterous x = case x of
     DoubleInPlectopterous y -> Jenc.float y
-    IntegerMapInPlectopterous y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPlectopterous y -> makeDictEncoder identity Jenc.int y
 
 pneumocele : Jdec.Decoder Pneumocele
 pneumocele =
@@ -1709,7 +1709,7 @@ encodePoormaster : Poormaster -> Jenc.Value
 encodePoormaster x = case x of
     IntegerArrayInPoormaster y -> Jenc.list Jenc.int y
     NullInPoormaster -> Jenc.null
-    IntegerMapInPoormaster y -> Jenc.dict identity Jenc.int y
+    IntegerMapInPoormaster y -> makeDictEncoder identity Jenc.int y
 
 potwhiskyElement : Jdec.Decoder PotwhiskyElement
 potwhiskyElement =
@@ -1895,6 +1895,14 @@ encodeProtext x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations4.json/array-type-array--eed288b23e27/QuickType.elm b/head/elm/test/inputs/json/priority/combinations4.json/array-type-array--eed288b23e27/QuickType.elm
index 9f255de..b198681 100644
--- a/base/elm/test/inputs/json/priority/combinations4.json/array-type-array--eed288b23e27/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations4.json/array-type-array--eed288b23e27/QuickType.elm
@@ -830,7 +830,7 @@ encodeQuickType x =
         , ("untasked", Jenc.array encodeUntasked x.untasked)
         , ("unvarying", Jenc.array encodeUnvarying x.unvarying)
         , ("vehemently", Jenc.array encodeVehemently x.vehemently)
-        , ("warriorship", Jenc.dict identity Jenc.bool x.warriorship)
+        , ("warriorship", makeDictEncoder identity Jenc.bool x.warriorship)
         , ("whitepot", Jenc.array encodeWhitepot x.whitepot)
         , ("wrothy", Jenc.array encodeWrothyElement x.wrothy)
         ]
@@ -1014,7 +1014,7 @@ querier =
 encodeQuerier : Querier -> Jenc.Value
 encodeQuerier x = case x of
     BoolInQuerier y -> Jenc.bool y
-    IntegerMapInQuerier y -> Jenc.dict identity Jenc.int y
+    IntegerMapInQuerier y -> makeDictEncoder identity Jenc.int y
 
 rebarbative : Jdec.Decoder Rebarbative
 rebarbative =
@@ -1312,7 +1312,7 @@ encodeSaprophilous : Saprophilous -> Jenc.Value
 encodeSaprophilous x = case x of
     NullInSaprophilous -> Jenc.null
     StringInSaprophilous y -> Jenc.string y
-    IntegerMapInSaprophilous y -> Jenc.dict identity Jenc.int y
+    IntegerMapInSaprophilous y -> makeDictEncoder identity Jenc.int y
 
 saxtenElement : Jdec.Decoder SaxtenElement
 saxtenElement =
@@ -1446,7 +1446,7 @@ encodeScoffer : Scoffer -> Jenc.Value
 encodeScoffer x = case x of
     NullArrayInScoffer y -> Jenc.array (always Jenc.null) y
     NullInScoffer -> Jenc.null
-    IntegerMapInScoffer y -> Jenc.dict identity Jenc.int y
+    IntegerMapInScoffer y -> makeDictEncoder identity Jenc.int y
 
 scrampum : Jdec.Decoder Scrampum
 scrampum =
@@ -1632,7 +1632,7 @@ encodeStimulability : Stimulability -> Jenc.Value
 encodeStimulability x = case x of
     BoolInStimulability y -> Jenc.bool y
     IntegerInStimulability y -> Jenc.int y
-    IntegerMapInStimulability y -> Jenc.dict identity Jenc.int y
+    IntegerMapInStimulability y -> makeDictEncoder identity Jenc.int y
 
 strangleable : Jdec.Decoder Strangleable
 strangleable =
@@ -1852,7 +1852,7 @@ encodeUnbeginning : Unbeginning -> Jenc.Value
 encodeUnbeginning x = case x of
     NullArrayInUnbeginning y -> Jenc.array (always Jenc.null) y
     StringInUnbeginning y -> Jenc.string y
-    IntegerMapInUnbeginning y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnbeginning y -> makeDictEncoder identity Jenc.int y
 
 undesirability : Jdec.Decoder Undesirability
 undesirability =
@@ -1866,7 +1866,7 @@ encodeUndesirability : Undesirability -> Jenc.Value
 encodeUndesirability x = case x of
     IntegerArrayInUndesirability y -> Jenc.array Jenc.int y
     StringInUndesirability y -> Jenc.string y
-    IntegerMapInUndesirability y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUndesirability y -> makeDictEncoder identity Jenc.int y
 
 unerasing : Jdec.Decoder Unerasing
 unerasing =
@@ -1880,7 +1880,7 @@ encodeUnerasing : Unerasing -> Jenc.Value
 encodeUnerasing x = case x of
     NullArrayInUnerasing y -> Jenc.array (always Jenc.null) y
     IntegerInUnerasing y -> Jenc.int y
-    IntegerMapInUnerasing y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnerasing y -> makeDictEncoder identity Jenc.int y
 
 unguentarium : Jdec.Decoder Unguentarium
 unguentarium =
@@ -1979,7 +1979,7 @@ encodeUnmortgaged : Unmortgaged -> Jenc.Value
 encodeUnmortgaged x = case x of
     NullInUnmortgaged -> Jenc.null
     DoubleInUnmortgaged y -> Jenc.float y
-    IntegerMapInUnmortgaged y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnmortgaged y -> makeDictEncoder identity Jenc.int y
 
 unobstructed : Jdec.Decoder Unobstructed
 unobstructed =
@@ -2098,7 +2098,7 @@ encodeUntasked : Untasked -> Jenc.Value
 encodeUntasked x = case x of
     NullArrayInUntasked y -> Jenc.array (always Jenc.null) y
     DoubleInUntasked y -> Jenc.float y
-    IntegerMapInUntasked y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUntasked y -> makeDictEncoder identity Jenc.int y
 
 unvarying : Jdec.Decoder Unvarying
 unvarying =
@@ -2112,7 +2112,7 @@ encodeUnvarying : Unvarying -> Jenc.Value
 encodeUnvarying x = case x of
     BoolInUnvarying y -> Jenc.bool y
     DoubleInUnvarying y -> Jenc.float y
-    IntegerMapInUnvarying y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnvarying y -> makeDictEncoder identity Jenc.int y
 
 vehemently : Jdec.Decoder Vehemently
 vehemently =
@@ -2203,6 +2203,14 @@ encodeWrothyClass x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/combinations4.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/combinations4.json/default/QuickType.elm
index a334fbe..689f2dd 100644
--- a/base/elm/test/inputs/json/priority/combinations4.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/combinations4.json/default/QuickType.elm
@@ -829,7 +829,7 @@ encodeQuickType x =
         , ("untasked", Jenc.list encodeUntasked x.untasked)
         , ("unvarying", Jenc.list encodeUnvarying x.unvarying)
         , ("vehemently", Jenc.list encodeVehemently x.vehemently)
-        , ("warriorship", Jenc.dict identity Jenc.bool x.warriorship)
+        , ("warriorship", makeDictEncoder identity Jenc.bool x.warriorship)
         , ("whitepot", Jenc.list encodeWhitepot x.whitepot)
         , ("wrothy", Jenc.list encodeWrothyElement x.wrothy)
         ]
@@ -1013,7 +1013,7 @@ querier =
 encodeQuerier : Querier -> Jenc.Value
 encodeQuerier x = case x of
     BoolInQuerier y -> Jenc.bool y
-    IntegerMapInQuerier y -> Jenc.dict identity Jenc.int y
+    IntegerMapInQuerier y -> makeDictEncoder identity Jenc.int y
 
 rebarbative : Jdec.Decoder Rebarbative
 rebarbative =
@@ -1311,7 +1311,7 @@ encodeSaprophilous : Saprophilous -> Jenc.Value
 encodeSaprophilous x = case x of
     NullInSaprophilous -> Jenc.null
     StringInSaprophilous y -> Jenc.string y
-    IntegerMapInSaprophilous y -> Jenc.dict identity Jenc.int y
+    IntegerMapInSaprophilous y -> makeDictEncoder identity Jenc.int y
 
 saxtenElement : Jdec.Decoder SaxtenElement
 saxtenElement =
@@ -1445,7 +1445,7 @@ encodeScoffer : Scoffer -> Jenc.Value
 encodeScoffer x = case x of
     NullArrayInScoffer y -> Jenc.list (always Jenc.null) y
     NullInScoffer -> Jenc.null
-    IntegerMapInScoffer y -> Jenc.dict identity Jenc.int y
+    IntegerMapInScoffer y -> makeDictEncoder identity Jenc.int y
 
 scrampum : Jdec.Decoder Scrampum
 scrampum =
@@ -1631,7 +1631,7 @@ encodeStimulability : Stimulability -> Jenc.Value
 encodeStimulability x = case x of
     BoolInStimulability y -> Jenc.bool y
     IntegerInStimulability y -> Jenc.int y
-    IntegerMapInStimulability y -> Jenc.dict identity Jenc.int y
+    IntegerMapInStimulability y -> makeDictEncoder identity Jenc.int y
 
 strangleable : Jdec.Decoder Strangleable
 strangleable =
@@ -1851,7 +1851,7 @@ encodeUnbeginning : Unbeginning -> Jenc.Value
 encodeUnbeginning x = case x of
     NullArrayInUnbeginning y -> Jenc.list (always Jenc.null) y
     StringInUnbeginning y -> Jenc.string y
-    IntegerMapInUnbeginning y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnbeginning y -> makeDictEncoder identity Jenc.int y
 
 undesirability : Jdec.Decoder Undesirability
 undesirability =
@@ -1865,7 +1865,7 @@ encodeUndesirability : Undesirability -> Jenc.Value
 encodeUndesirability x = case x of
     IntegerArrayInUndesirability y -> Jenc.list Jenc.int y
     StringInUndesirability y -> Jenc.string y
-    IntegerMapInUndesirability y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUndesirability y -> makeDictEncoder identity Jenc.int y
 
 unerasing : Jdec.Decoder Unerasing
 unerasing =
@@ -1879,7 +1879,7 @@ encodeUnerasing : Unerasing -> Jenc.Value
 encodeUnerasing x = case x of
     NullArrayInUnerasing y -> Jenc.list (always Jenc.null) y
     IntegerInUnerasing y -> Jenc.int y
-    IntegerMapInUnerasing y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnerasing y -> makeDictEncoder identity Jenc.int y
 
 unguentarium : Jdec.Decoder Unguentarium
 unguentarium =
@@ -1978,7 +1978,7 @@ encodeUnmortgaged : Unmortgaged -> Jenc.Value
 encodeUnmortgaged x = case x of
     NullInUnmortgaged -> Jenc.null
     DoubleInUnmortgaged y -> Jenc.float y
-    IntegerMapInUnmortgaged y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnmortgaged y -> makeDictEncoder identity Jenc.int y
 
 unobstructed : Jdec.Decoder Unobstructed
 unobstructed =
@@ -2097,7 +2097,7 @@ encodeUntasked : Untasked -> Jenc.Value
 encodeUntasked x = case x of
     NullArrayInUntasked y -> Jenc.list (always Jenc.null) y
     DoubleInUntasked y -> Jenc.float y
-    IntegerMapInUntasked y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUntasked y -> makeDictEncoder identity Jenc.int y
 
 unvarying : Jdec.Decoder Unvarying
 unvarying =
@@ -2111,7 +2111,7 @@ encodeUnvarying : Unvarying -> Jenc.Value
 encodeUnvarying x = case x of
     BoolInUnvarying y -> Jenc.bool y
     DoubleInUnvarying y -> Jenc.float y
-    IntegerMapInUnvarying y -> Jenc.dict identity Jenc.int y
+    IntegerMapInUnvarying y -> makeDictEncoder identity Jenc.int y
 
 vehemently : Jdec.Decoder Vehemently
 vehemently =
@@ -2202,6 +2202,14 @@ encodeWrothyClass x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
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 2cf97f0..bdfd658 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
@@ -133,19 +133,20 @@ module QuickType exposing
     , FormatException
     , Friend
     , From
+    , FromDict
     , FromJSON
     , Func
     , Function
     , Get
     , Global
     , Go
-    , Goto
     , Decoder
     , Else
     , Exposing
     , Obj2False
     , FloatClass
     , Obj3
+    , Goto
     , Guard
     , HasOwnProperty
     , HashCode
@@ -193,6 +194,7 @@ module QuickType exposing
     , Long
     , Map
     , MapEntry
+    , MarshalJSON
     , MetadataPropertyHandling
     , Mutable
     , Mutating
@@ -202,7 +204,6 @@ module QuickType exposing
     , Newtonsoft
     , Nil
     , No
-    , Noexcept
     , If
     , Import
     , In
@@ -212,6 +213,7 @@ module QuickType exposing
     , Module
     , Obj4
     , NoSuchMethod
+    , Noexcept
     , Nonatomic
     , None
     , Nonlocal
@@ -274,7 +276,6 @@ module QuickType exposing
     , Sbyte
     , Sealed
     , Sel
-    , Select
     , Obj5
     , KSerializer
     , SelfClass
@@ -284,6 +285,7 @@ module QuickType exposing
     , Type
     , PrimitiveKind
     , TypeClass
+    , Select
     , Self
     , Sendable
     , SerialDescriptor
@@ -319,6 +321,7 @@ module QuickType exposing
     , TimeOnly
     , TimeOnlyConverter
     , TimeZone
+    , ToDict
     , ToJSON
     , ToString
     , TopLevel
@@ -335,13 +338,14 @@ module QuickType exposing
     , Unchecked
     , Undefined
     , Union
+    , UnmarshalJSON
     , Unowned
     , Unsafe
-    , Unsigned
     , UseSerializers
-    , Ushort
     , Obj6
     , Where
+    , Unsigned
+    , Ushort
     , Using
     , Utf8JSONReader
     , Utf8JSONWriter
@@ -755,13 +759,13 @@ type alias Obj2 =
     , formatException : FormatException
     , friend : Friend
     , from : From
+    , fromDict : FromDict
     , fromJSON : FromJSON
     , func : Func
     , function : Function
     , get : Get
     , global : Global
     , go : Go
-    , goto : Goto
     , obj2Decoder : Decoder
     , obj2Else : Else
     , obj2Exposing : Exposing
@@ -981,6 +985,10 @@ type alias From =
     { from : Int
     }
 
+type alias FromDict =
+    { fromDict : Int
+    }
+
 type alias FromJSON =
     { fromJSON : Int
     }
@@ -1005,10 +1013,6 @@ type alias Go =
     { go : Int
     }
 
-type alias Goto =
-    { goto : Int
-    }
-
 type alias Decoder =
     { decoderDecoder : Int
     }
@@ -1031,6 +1035,7 @@ type alias FloatClass =
 
 type alias Obj3 =
     { dummy : Int
+    , goto : Goto
     , guard : Guard
     , hasOwnProperty : HasOwnProperty
     , hashCode : HashCode
@@ -1078,6 +1083,7 @@ type alias Obj3 =
     , long : Long
     , map : Map
     , mapEntry : MapEntry
+    , marshalJSON : MarshalJSON
     , metadataPropertyHandling : MetadataPropertyHandling
     , mutable : Mutable
     , mutating : Mutating
@@ -1087,7 +1093,6 @@ type alias Obj3 =
     , newtonsoft : Newtonsoft
     , nil : Nil
     , no : No
-    , noexcept : Noexcept
     , obj3If : If
     , obj3Import : Import
     , obj3In : In
@@ -1097,6 +1102,10 @@ type alias Obj3 =
     , obj3Module : Module
     }
 
+type alias Goto =
+    { goto : Int
+    }
+
 type alias Guard =
     { guard : Int
     }
@@ -1285,6 +1294,10 @@ type alias MapEntry =
     { mapEntry : Int
     }
 
+type alias MarshalJSON =
+    { marshalJSON : Int
+    }
+
 type alias MetadataPropertyHandling =
     { metadataPropertyHandling : Int
     }
@@ -1321,10 +1334,6 @@ type alias No =
     { no : Int
     }
 
-type alias Noexcept =
-    { noexcept : Int
-    }
-
 type alias If =
     { ifIf : Int
     }
@@ -1356,6 +1365,7 @@ type alias Module =
 type alias Obj4 =
     { dummy : Int
     , noSuchMethod : NoSuchMethod
+    , noexcept : Noexcept
     , nonatomic : Nonatomic
     , none : None
     , nonlocal : Nonlocal
@@ -1418,13 +1428,16 @@ type alias Obj4 =
     , sbyte : Sbyte
     , sealed : Sealed
     , sel : Sel
-    , select : Select
     }
 
 type alias NoSuchMethod =
     { noSuchMethod : Int
     }
 
+type alias Noexcept =
+    { noexcept : Int
+    }
+
 type alias Nonatomic =
     { nonatomic : Int
     }
@@ -1673,10 +1686,6 @@ type alias Sel =
     { sel : Int
     }
 
-type alias Select =
-    { select : Int
-    }
-
 type alias Obj5 =
     { dummy : Int
     , kSerializer : KSerializer
@@ -1687,6 +1696,7 @@ type alias Obj5 =
     , obj5Type : Type
     , primitiveKind : PrimitiveKind
     , purpleType : TypeClass
+    , select : Select
     , self : Self
     , sendable : Sendable
     , serialDescriptor : SerialDescriptor
@@ -1722,6 +1732,7 @@ type alias Obj5 =
     , timeOnly : TimeOnly
     , timeOnlyConverter : TimeOnlyConverter
     , timeZone : TimeZone
+    , toDict : ToDict
     , toJSON : ToJSON
     , toString : ToString
     , topLevel : TopLevel
@@ -1738,11 +1749,10 @@ type alias Obj5 =
     , unchecked : Unchecked
     , undefined : Undefined
     , union : Union
+    , unmarshalJSON : UnmarshalJSON
     , unowned : Unowned
     , unsafe : Unsafe
-    , unsigned : Unsigned
     , useSerializers : UseSerializers
-    , ushort : Ushort
     }
 
 type alias KSerializer =
@@ -1777,6 +1787,10 @@ type alias TypeClass =
     { typeType : Int
     }
 
+type alias Select =
+    { select : Int
+    }
+
 type alias Self =
     { self : Int
     }
@@ -1917,6 +1931,10 @@ type alias TimeZone =
     { timeZone : Int
     }
 
+type alias ToDict =
+    { toDict : Int
+    }
+
 type alias ToJSON =
     { toJSON : Int
     }
@@ -1981,6 +1999,10 @@ type alias Union =
     { union : Int
     }
 
+type alias UnmarshalJSON =
+    { unmarshalJSON : Int
+    }
+
 type alias Unowned =
     { unowned : Int
     }
@@ -1989,21 +2011,15 @@ type alias Unsafe =
     { unsafe : Int
     }
 
-type alias Unsigned =
-    { unsigned : Int
-    }
-
 type alias UseSerializers =
     { useSerializers : Int
     }
 
-type alias Ushort =
-    { ushort : Int
-    }
-
 type alias Obj6 =
     { dummy : Int
     , obj6Where : Where
+    , unsigned : Unsigned
+    , ushort : Ushort
     , using : Using
     , utf8JSONReader : Utf8JSONReader
     , utf8JSONWriter : Utf8JSONWriter
@@ -2027,6 +2043,14 @@ type alias Where =
     { whereWhere : Int
     }
 
+type alias Unsigned =
+    { unsigned : Int
+    }
+
+type alias Ushort =
+    { ushort : Int
+    }
+
 type alias Using =
     { using : Int
     }
@@ -3028,13 +3052,13 @@ obj2 =
         |> Jpipe.required "FormatException" formatException
         |> Jpipe.required "friend" friend
         |> Jpipe.required "from" from
+        |> Jpipe.required "from_dict" fromDict
         |> Jpipe.required "from_json" fromJSON
         |> Jpipe.required "func" func
         |> Jpipe.required "function" function
         |> Jpipe.required "get" get
         |> Jpipe.required "global" global
         |> Jpipe.required "go" go
-        |> Jpipe.required "goto" goto
         |> Jpipe.required "Decoder" purpleDecoder
         |> Jpipe.required "else" purpleElse
         |> Jpipe.required "exposing" purpleExposing
@@ -3097,13 +3121,13 @@ encodeObj2 x =
         , ("FormatException", encodeFormatException x.formatException)
         , ("friend", encodeFriend x.friend)
         , ("from", encodeFrom x.from)
+        , ("from_dict", encodeFromDict x.fromDict)
         , ("from_json", encodeFromJSON x.fromJSON)
         , ("func", encodeFunc x.func)
         , ("function", encodeFunction x.function)
         , ("get", encodeGet x.get)
         , ("global", encodeGlobal x.global)
         , ("go", encodeGo x.go)
-        , ("goto", encodeGoto x.goto)
         , ("Decoder", encodeDecoder x.obj2Decoder)
         , ("else", encodeElse x.obj2Else)
         , ("exposing", encodeExposing x.obj2Exposing)
@@ -3698,6 +3722,17 @@ encodeFrom x =
         [ ("from", Jenc.int x.from)
         ]
 
+fromDict : Jdec.Decoder FromDict
+fromDict =
+    Jdec.succeed FromDict
+        |> Jpipe.required "from_dict" Jdec.int
+
+encodeFromDict : FromDict -> Jenc.Value
+encodeFromDict x =
+    Jenc.object
+        [ ("from_dict", Jenc.int x.fromDict)
+        ]
+
 fromJSON : Jdec.Decoder FromJSON
 fromJSON =
     Jdec.succeed FromJSON
@@ -3764,17 +3799,6 @@ encodeGo x =
         [ ("go", Jenc.int x.go)
         ]
 
-goto : Jdec.Decoder Goto
-goto =
-    Jdec.succeed Goto
-        |> Jpipe.required "goto" Jdec.int
-
-encodeGoto : Goto -> Jenc.Value
-encodeGoto x =
-    Jenc.object
-        [ ("goto", Jenc.int x.goto)
-        ]
-
 purpleDecoder : Jdec.Decoder Decoder
 purpleDecoder =
     Jdec.succeed Decoder
@@ -3834,6 +3858,7 @@ obj3 : Jdec.Decoder Obj3
 obj3 =
     Jdec.succeed Obj3
         |> Jpipe.required "dummy" Jdec.int
+        |> Jpipe.required "goto" goto
         |> Jpipe.required "guard" guard
         |> Jpipe.required "hasOwnProperty" hasOwnProperty
         |> Jpipe.required "hashCode" hashCode
@@ -3881,6 +3906,7 @@ obj3 =
         |> Jpipe.required "long" long
         |> Jpipe.required "map" map
         |> Jpipe.required "MapEntry" mapEntry
+        |> Jpipe.required "MarshalJSON" marshalJSON
         |> Jpipe.required "metadata_property_handling" metadataPropertyHandling
         |> Jpipe.required "mutable" mutable
         |> Jpipe.required "mutating" mutating
@@ -3890,7 +3916,6 @@ obj3 =
         |> Jpipe.required "newtonsoft" newtonsoft
         |> Jpipe.required "nil" nil
         |> Jpipe.required "NO" no
-        |> Jpipe.required "noexcept" noexcept
         |> Jpipe.required "if" purpleIf
         |> Jpipe.required "import" purpleImport
         |> Jpipe.required "in" purpleIn
@@ -3903,6 +3928,7 @@ encodeObj3 : Obj3 -> Jenc.Value
 encodeObj3 x =
     Jenc.object
         [ ("dummy", Jenc.int x.dummy)
+        , ("goto", encodeGoto x.goto)
         , ("guard", encodeGuard x.guard)
         , ("hasOwnProperty", encodeHasOwnProperty x.hasOwnProperty)
         , ("hashCode", encodeHashCode x.hashCode)
@@ -3950,6 +3976,7 @@ encodeObj3 x =
         , ("long", encodeLong x.long)
         , ("map", encodeMap x.map)
         , ("MapEntry", encodeMapEntry x.mapEntry)
+        , ("MarshalJSON", encodeMarshalJSON x.marshalJSON)
         , ("metadata_property_handling", encodeMetadataPropertyHandling x.metadataPropertyHandling)
         , ("mutable", encodeMutable x.mutable)
         , ("mutating", encodeMutating x.mutating)
@@ -3959,7 +3986,6 @@ encodeObj3 x =
         , ("newtonsoft", encodeNewtonsoft x.newtonsoft)
         , ("nil", encodeNil x.nil)
         , ("NO", encodeNo x.no)
-        , ("noexcept", encodeNoexcept x.noexcept)
         , ("if", encodeIf x.obj3If)
         , ("import", encodeImport x.obj3Import)
         , ("in", encodeIn x.obj3In)
@@ -3969,6 +3995,17 @@ encodeObj3 x =
         , ("module", encodeModule x.obj3Module)
         ]
 
+goto : Jdec.Decoder Goto
+goto =
+    Jdec.succeed Goto
+        |> Jpipe.required "goto" Jdec.int
+
+encodeGoto : Goto -> Jenc.Value
+encodeGoto x =
+    Jenc.object
+        [ ("goto", Jenc.int x.goto)
+        ]
+
 guard : Jdec.Decoder Guard
 guard =
     Jdec.succeed Guard
@@ -4486,6 +4523,17 @@ encodeMapEntry x =
         [ ("MapEntry", Jenc.int x.mapEntry)
         ]
 
+marshalJSON : Jdec.Decoder MarshalJSON
+marshalJSON =
+    Jdec.succeed MarshalJSON
+        |> Jpipe.required "MarshalJSON" Jdec.int
+
+encodeMarshalJSON : MarshalJSON -> Jenc.Value
+encodeMarshalJSON x =
+    Jenc.object
+        [ ("MarshalJSON", Jenc.int x.marshalJSON)
+        ]
+
 metadataPropertyHandling : Jdec.Decoder MetadataPropertyHandling
 metadataPropertyHandling =
     Jdec.succeed MetadataPropertyHandling
@@ -4585,17 +4633,6 @@ encodeNo x =
         [ ("NO", Jenc.int x.no)
         ]
 
-noexcept : Jdec.Decoder Noexcept
-noexcept =
-    Jdec.succeed Noexcept
-        |> Jpipe.required "noexcept" Jdec.int
-
-encodeNoexcept : Noexcept -> Jenc.Value
-encodeNoexcept x =
-    Jenc.object
-        [ ("noexcept", Jenc.int x.noexcept)
-        ]
-
 purpleIf : Jdec.Decoder If
 purpleIf =
     Jdec.succeed If
@@ -4678,6 +4715,7 @@ obj4 =
     Jdec.succeed Obj4
         |> Jpipe.required "dummy" Jdec.int
         |> Jpipe.required "noSuchMethod" noSuchMethod
+        |> Jpipe.required "noexcept" noexcept
         |> Jpipe.required "nonatomic" nonatomic
         |> Jpipe.required "None" none
         |> Jpipe.required "nonlocal" nonlocal
@@ -4740,13 +4778,13 @@ obj4 =
         |> Jpipe.required "sbyte" sbyte
         |> Jpipe.required "sealed" sealed
         |> Jpipe.required "SEL" sel
-        |> Jpipe.required "select" select
 
 encodeObj4 : Obj4 -> Jenc.Value
 encodeObj4 x =
     Jenc.object
         [ ("dummy", Jenc.int x.dummy)
         , ("noSuchMethod", encodeNoSuchMethod x.noSuchMethod)
+        , ("noexcept", encodeNoexcept x.noexcept)
         , ("nonatomic", encodeNonatomic x.nonatomic)
         , ("None", encodeNone x.none)
         , ("nonlocal", encodeNonlocal x.nonlocal)
@@ -4809,7 +4847,6 @@ encodeObj4 x =
         , ("sbyte", encodeSbyte x.sbyte)
         , ("sealed", encodeSealed x.sealed)
         , ("SEL", encodeSel x.sel)
-        , ("select", encodeSelect x.select)
         ]
 
 noSuchMethod : Jdec.Decoder NoSuchMethod
@@ -4823,6 +4860,17 @@ encodeNoSuchMethod x =
         [ ("noSuchMethod", Jenc.int x.noSuchMethod)
         ]
 
+noexcept : Jdec.Decoder Noexcept
+noexcept =
+    Jdec.succeed Noexcept
+        |> Jpipe.required "noexcept" Jdec.int
+
+encodeNoexcept : Noexcept -> Jenc.Value
+encodeNoexcept x =
+    Jenc.object
+        [ ("noexcept", Jenc.int x.noexcept)
+        ]
+
 nonatomic : Jdec.Decoder Nonatomic
 nonatomic =
     Jdec.succeed Nonatomic
@@ -5505,17 +5553,6 @@ encodeSel x =
         [ ("SEL", Jenc.int x.sel)
         ]
 
-select : Jdec.Decoder Select
-select =
-    Jdec.succeed Select
-        |> Jpipe.required "select" Jdec.int
-
-encodeSelect : Select -> Jenc.Value
-encodeSelect x =
-    Jenc.object
-        [ ("select", Jenc.int x.select)
-        ]
-
 obj5 : Jdec.Decoder Obj5
 obj5 =
     Jdec.succeed Obj5
@@ -5528,6 +5565,7 @@ obj5 =
         |> Jpipe.required "Type" purpleType
         |> Jpipe.required "PrimitiveKind" primitiveKind
         |> Jpipe.required "type" typeClass
+        |> Jpipe.required "select" select
         |> Jpipe.required "Self" self
         |> Jpipe.required "Sendable" sendable
         |> Jpipe.required "SerialDescriptor" serialDescriptor
@@ -5563,6 +5601,7 @@ obj5 =
         |> Jpipe.required "TimeOnly" timeOnly
         |> Jpipe.required "TimeOnlyConverter" timeOnlyConverter
         |> Jpipe.required "TimeZone" timeZone
+        |> Jpipe.required "to_dict" toDict
         |> Jpipe.required "to_json" toJSON
         |> Jpipe.required "toString" toString
         |> Jpipe.required "top_level" topLevel
@@ -5579,11 +5618,10 @@ obj5 =
         |> Jpipe.required "unchecked" unchecked
         |> Jpipe.required "undefined" undefined
         |> Jpipe.required "union" union
+        |> Jpipe.required "UnmarshalJSON" unmarshalJSON
         |> Jpipe.required "unowned" unowned
         |> Jpipe.required "unsafe" unsafe
-        |> Jpipe.required "unsigned" unsigned
         |> Jpipe.required "UseSerializers" useSerializers
-        |> Jpipe.required "ushort" ushort
 
 encodeObj5 : Obj5 -> Jenc.Value
 encodeObj5 x =
@@ -5597,6 +5635,7 @@ encodeObj5 x =
         , ("Type", encodeType x.obj5Type)
         , ("PrimitiveKind", encodePrimitiveKind x.primitiveKind)
         , ("type", encodeTypeClass x.purpleType)
+        , ("select", encodeSelect x.select)
         , ("Self", encodeSelf x.self)
         , ("Sendable", encodeSendable x.sendable)
         , ("SerialDescriptor", encodeSerialDescriptor x.serialDescriptor)
@@ -5632,6 +5671,7 @@ encodeObj5 x =
         , ("TimeOnly", encodeTimeOnly x.timeOnly)
         , ("TimeOnlyConverter", encodeTimeOnlyConverter x.timeOnlyConverter)
         , ("TimeZone", encodeTimeZone x.timeZone)
+        , ("to_dict", encodeToDict x.toDict)
         , ("to_json", encodeToJSON x.toJSON)
         , ("toString", encodeToString x.toString)
         , ("top_level", encodeTopLevel x.topLevel)
@@ -5648,11 +5688,10 @@ encodeObj5 x =
         , ("unchecked", encodeUnchecked x.unchecked)
         , ("undefined", encodeUndefined x.undefined)
         , ("union", encodeUnion x.union)
+        , ("UnmarshalJSON", encodeUnmarshalJSON x.unmarshalJSON)
         , ("unowned", encodeUnowned x.unowned)
         , ("unsafe", encodeUnsafe x.unsafe)
-        , ("unsigned", encodeUnsigned x.unsigned)
         , ("UseSerializers", encodeUseSerializers x.useSerializers)
-        , ("ushort", encodeUshort x.ushort)
         ]
 
 kSerializer : Jdec.Decoder KSerializer
@@ -5743,6 +5782,17 @@ encodeTypeClass x =
         [ ("type", Jenc.int x.typeType)
         ]
 
+select : Jdec.Decoder Select
+select =
+    Jdec.succeed Select
+        |> Jpipe.required "select" Jdec.int
+
+encodeSelect : Select -> Jenc.Value
+encodeSelect x =
+    Jenc.object
+        [ ("select", Jenc.int x.select)
+        ]
+
 self : Jdec.Decoder Self
 self =
     Jdec.succeed Self
@@ -6128,6 +6178,17 @@ encodeTimeZone x =
         [ ("TimeZone", Jenc.int x.timeZone)
         ]
 
+toDict : Jdec.Decoder ToDict
+toDict =
+    Jdec.succeed ToDict
+        |> Jpipe.required "to_dict" Jdec.int
+
+encodeToDict : ToDict -> Jenc.Value
+encodeToDict x =
+    Jenc.object
+        [ ("to_dict", Jenc.int x.toDict)
+        ]
+
 toJSON : Jdec.Decoder ToJSON
 toJSON =
     Jdec.succeed ToJSON
@@ -6304,6 +6365,17 @@ encodeUnion x =
         [ ("union", Jenc.int x.union)
         ]
 
+unmarshalJSON : Jdec.Decoder UnmarshalJSON
+unmarshalJSON =
+    Jdec.succeed UnmarshalJSON
+        |> Jpipe.required "UnmarshalJSON" Jdec.int
+
+encodeUnmarshalJSON : UnmarshalJSON -> Jenc.Value
+encodeUnmarshalJSON x =
+    Jenc.object
+        [ ("UnmarshalJSON", Jenc.int x.unmarshalJSON)
+        ]
+
 unowned : Jdec.Decoder Unowned
 unowned =
     Jdec.succeed Unowned
@@ -6326,17 +6398,6 @@ encodeUnsafe x =
         [ ("unsafe", Jenc.int x.unsafe)
         ]
 
-unsigned : Jdec.Decoder Unsigned
-unsigned =
-    Jdec.succeed Unsigned
-        |> Jpipe.required "unsigned" Jdec.int
-
-encodeUnsigned : Unsigned -> Jenc.Value
-encodeUnsigned x =
-    Jenc.object
-        [ ("unsigned", Jenc.int x.unsigned)
-        ]
-
 useSerializers : Jdec.Decoder UseSerializers
 useSerializers =
     Jdec.succeed UseSerializers
@@ -6348,22 +6409,13 @@ encodeUseSerializers x =
         [ ("UseSerializers", Jenc.int x.useSerializers)
         ]
 
-ushort : Jdec.Decoder Ushort
-ushort =
-    Jdec.succeed Ushort
-        |> Jpipe.required "ushort" Jdec.int
-
-encodeUshort : Ushort -> Jenc.Value
-encodeUshort x =
-    Jenc.object
-        [ ("ushort", Jenc.int x.ushort)
-        ]
-
 obj6 : Jdec.Decoder Obj6
 obj6 =
     Jdec.succeed Obj6
         |> Jpipe.required "dummy" Jdec.int
         |> Jpipe.required "where" purpleWhere
+        |> Jpipe.required "unsigned" unsigned
+        |> Jpipe.required "ushort" ushort
         |> Jpipe.required "using" using
         |> Jpipe.required "Utf8JsonReader" utf8JSONReader
         |> Jpipe.required "Utf8JsonWriter" utf8JSONWriter
@@ -6387,6 +6439,8 @@ encodeObj6 x =
     Jenc.object
         [ ("dummy", Jenc.int x.dummy)
         , ("where", encodeWhere x.obj6Where)
+        , ("unsigned", encodeUnsigned x.unsigned)
+        , ("ushort", encodeUshort x.ushort)
         , ("using", encodeUsing x.using)
         , ("Utf8JsonReader", encodeUtf8JSONReader x.utf8JSONReader)
         , ("Utf8JsonWriter", encodeUtf8JSONWriter x.utf8JSONWriter)
@@ -6417,6 +6471,28 @@ encodeWhere x =
         [ ("where", Jenc.int x.whereWhere)
         ]
 
+unsigned : Jdec.Decoder Unsigned
+unsigned =
+    Jdec.succeed Unsigned
+        |> Jpipe.required "unsigned" Jdec.int
+
+encodeUnsigned : Unsigned -> Jenc.Value
+encodeUnsigned x =
+    Jenc.object
+        [ ("unsigned", Jenc.int x.unsigned)
+        ]
+
+ushort : Jdec.Decoder Ushort
+ushort =
+    Jdec.succeed Ushort
+        |> Jpipe.required "ushort" Jdec.int
+
+encodeUshort : Ushort -> Jenc.Value
+encodeUshort x =
+    Jenc.object
+        [ ("ushort", Jenc.int x.ushort)
+        ]
+
 using : Jdec.Decoder Using
 using =
     Jdec.succeed Using
diff --git a/base/elm/test/inputs/json/priority/nbl-stats.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/nbl-stats.json/default/QuickType.elm
index 1c0ae78..10c6581 100644
--- a/base/elm/test/inputs/json/priority/nbl-stats.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/nbl-stats.json/default/QuickType.elm
@@ -436,9 +436,9 @@ encodeQuickType x =
         , ("periodLengthREGULAR", Jenc.int x.periodLengthREGULAR)
         , ("periodType", encodePerType x.periodType)
         , ("periodsMax", Jenc.int x.periodsMax)
-        , ("scorers", Jenc.dict identity (Jenc.list encodeScorer) x.scorers)
+        , ("scorers", makeDictEncoder identity (Jenc.list encodeScorer) x.scorers)
         , ("timeline", Jenc.list identity x.timeline)
-        , ("tm", Jenc.dict identity encodeTm x.tm)
+        , ("tm", makeDictEncoder identity encodeTm x.tm)
         , ("totalTimeAdded", Jenc.int x.totalTimeAdded)
         , ("totallds", encodeTotallds x.totallds)
         ]
@@ -878,7 +878,7 @@ encodeTm x =
         , ("p2_score", Jenc.int x.p2Score)
         , ("p3_score", Jenc.int x.p3Score)
         , ("p4_score", Jenc.int x.p4Score)
-        , ("pl", Jenc.dict identity encodePl x.pl)
+        , ("pl", makeDictEncoder identity encodePl x.pl)
         , ("score", Jenc.int x.score)
         , ("scoring", Jenc.list encodeScorer x.scoring)
         , ("shortName", Jenc.string x.shortName)
@@ -945,11 +945,11 @@ lds =
 encodeLds : Lds -> Jenc.Value
 encodeLds x =
     Jenc.object
-        [ ("sAssists", Jenc.dict identity encodeScorer x.sAssists)
+        [ ("sAssists", makeDictEncoder identity encodeScorer x.sAssists)
         , ("sBlocks", encodeSBlocks x.sBlocks)
-        , ("sPoints", Jenc.dict identity encodeScorer x.sPoints)
-        , ("sReboundsTotal", Jenc.dict identity encodeScorer x.sReboundsTotal)
-        , ("sSteals", Jenc.dict identity encodeScorer x.sSteals)
+        , ("sPoints", makeDictEncoder identity encodeScorer x.sPoints)
+        , ("sReboundsTotal", makeDictEncoder identity encodeScorer x.sReboundsTotal)
+        , ("sSteals", makeDictEncoder identity encodeScorer x.sSteals)
         ]
 
 sBlocks : Jdec.Decoder SBlocks
@@ -1163,15 +1163,23 @@ totallds =
 encodeTotallds : Totallds -> Jenc.Value
 encodeTotallds x =
     Jenc.object
-        [ ("sAssists", Jenc.dict identity encodeScorer x.sAssists)
-        , ("sBlocks", Jenc.dict identity encodeScorer x.sBlocks)
-        , ("sPoints", Jenc.dict identity encodeScorer x.sPoints)
-        , ("sReboundsTotal", Jenc.dict identity encodeScorer x.sReboundsTotal)
-        , ("sSteals", Jenc.dict identity encodeScorer x.sSteals)
+        [ ("sAssists", makeDictEncoder identity encodeScorer x.sAssists)
+        , ("sBlocks", makeDictEncoder identity encodeScorer x.sBlocks)
+        , ("sPoints", makeDictEncoder identity encodeScorer x.sPoints)
+        , ("sReboundsTotal", makeDictEncoder identity encodeScorer x.sReboundsTotal)
+        , ("sSteals", makeDictEncoder identity encodeScorer x.sSteals)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/nested-objects.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/nested-objects.json/default/QuickType.elm
index 7b4fab7..1bf4bde 100644
--- a/base/elm/test/inputs/json/priority/nested-objects.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/nested-objects.json/default/QuickType.elm
@@ -47,12 +47,20 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("a", Jenc.dict identity Jenc.int x.a)
-        , ("b", Jenc.dict identity Jenc.int x.b)
+        [ ("a", makeDictEncoder identity Jenc.int x.a)
+        , ("b", makeDictEncoder identity Jenc.int x.b)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/priority/number-map.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/number-map.json/default/QuickType.elm
index 5f50911..335c6bc 100644
--- a/base/elm/test/inputs/json/priority/number-map.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/number-map.json/default/QuickType.elm
@@ -45,11 +45,19 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("foo", Jenc.dict identity Jenc.float x.foo)
+        [ ("foo", makeDictEncoder identity Jenc.float x.foo)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/samples/kitchen-sink.json/default/QuickType.elm b/head/elm/test/inputs/json/samples/kitchen-sink.json/default/QuickType.elm
index 2c4d0ae..797d894 100644
--- a/base/elm/test/inputs/json/samples/kitchen-sink.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/samples/kitchen-sink.json/default/QuickType.elm
@@ -105,10 +105,10 @@ encodeQuickType x =
         , ("differentThings", Jenc.list encodeDifferentThingElement x.differentThings)
         , ("doubleValue", Jenc.float x.doubleValue)
         , ("intValue", Jenc.int x.intValue)
-        , ("mapValue", Jenc.dict identity (makeNullableEncoder Jenc.int) x.mapValue)
+        , ("mapValue", makeDictEncoder identity (makeNullableEncoder Jenc.int) x.mapValue)
         , ("name with spaces", always Jenc.null x.nameWithSpaces)
         , ("nullValue", always Jenc.null x.nullValue)
-        , ("nullableMapValue", Jenc.dict identity (makeNullableEncoder Jenc.int) x.nullableMapValue)
+        , ("nullableMapValue", makeDictEncoder identity (makeNullableEncoder Jenc.int) x.nullableMapValue)
         , ("people", Jenc.list encodePersonElement x.people)
         , ("person", encodePurplePerson x.person)
         , ("stringValue", Jenc.string x.stringValue)
@@ -183,6 +183,14 @@ encodePurplePerson x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/elm/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.elm b/head/elm/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.elm
index b7adef0..8b79e00 100644
--- a/base/elm/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/samples/us-avg-temperatures.json/default/QuickType.elm
@@ -61,7 +61,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("data", Jenc.dict identity encodeDatum x.data)
+        [ ("data", makeDictEncoder identity encodeDatum x.data)
         , ("description", encodeDescription x.description)
         ]
 
@@ -97,6 +97,14 @@ encodeDescription x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
index 162dbc2..7eebad2 100644
--- a/base/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
index 4d45847..01cc1b8 100644
--- a/base/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
@@ -174,7 +174,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -185,7 +185,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/016af.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
index 6c1c8a4..21a854f 100644
--- a/base/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -174,7 +174,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
index e124161..5a0b524 100644
--- a/base/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/07540.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
index d9826f0..503b7cb 100644
--- a/base/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
index a298561..7a8a97d 100644
--- a/base/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
index 1eccbad..22f369c 100644
--- a/base/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
index fdf8c01..f9a1579 100644
--- a/base/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
index 82bc4f2..0908f0d 100644
--- a/base/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
@@ -327,7 +327,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -338,7 +338,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
index 209fdf8..60f4667 100644
--- a/base/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
index 9b7923c..921544b 100644
--- a/base/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
@@ -222,7 +222,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
index 407cad3..da70a86 100644
--- a/base/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
@@ -184,7 +184,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -195,7 +195,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
index 3ee24ee..2cc1039 100644
--- a/base/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
index 63eecca..44b2ca4 100644
--- a/base/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
@@ -174,7 +174,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -185,7 +185,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
index f9cab5b..eac113f 100644
--- a/base/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
index 3e28e99..535cac4 100644
--- a/base/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -232,7 +232,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
index 48593f5..2e44462 100644
--- a/base/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
index 713e56b..7b56c90 100644
--- a/base/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
index db78db6..319d9f8 100644
--- a/base/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
index 56b0139..fb52e30 100644
--- a/base/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
@@ -198,7 +198,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -209,7 +209,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
index e283f26..0e6c0ae 100644
--- a/base/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
@@ -180,7 +180,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
index 1dc4430..f81251b 100644
--- a/base/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
@@ -210,7 +210,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
index c9ba533..cb0c67c 100644
--- a/base/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -230,7 +230,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
index d4b28ed..9b151fa 100644
--- a/base/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
@@ -294,7 +294,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -305,7 +305,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/27332.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
index 934296a..2f9d303 100644
--- a/base/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
@@ -260,7 +260,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -271,7 +271,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
index 6c6029e..6ea2f5d 100644
--- a/base/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
@@ -246,7 +246,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -257,7 +257,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
index 50f7c40..4062586 100644
--- a/base/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
@@ -214,7 +214,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -225,7 +225,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
index e8a7f8a..6b37c06 100644
--- a/base/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
@@ -180,7 +180,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/31189.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
index 4fb8245..09427be 100644
--- a/base/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/32431.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
index 9b836ab..c34e316 100644
--- a/base/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
@@ -178,7 +178,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
index 8f57115..a11f988 100644
--- a/base/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
index 400a636..de62c4e 100644
--- a/base/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -186,7 +186,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
index 954c924..d6913e1 100644
--- a/base/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -171,7 +171,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/34702.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
index f14ce92..f7219b6 100644
--- a/base/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
@@ -195,7 +195,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
index 4c5794e..5a74561 100644
--- a/base/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
index db78db6..319d9f8 100644
--- a/base/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
index 870cf6a..76c6c27 100644
--- a/base/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
index 5d852e7..051c669 100644
--- a/base/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -232,7 +232,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
index 46aad64..ba501ee 100644
--- a/base/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -227,7 +227,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/43970.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
index 96da4f2..4665310 100644
--- a/base/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/458db.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
index 602758a..f043a8e 100644
--- a/base/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
index af5a140..4d82661 100644
--- a/base/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -161,7 +161,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
index e9dc36d..931e768 100644
--- a/base/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
@@ -255,7 +255,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -266,7 +266,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/54147.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
index ebba231..4c8c228 100644
--- a/base/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
index d884bb6..4b3e4f4 100644
--- a/base/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
index df6a35e..a5a4f74 100644
--- a/base/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
index 2d34873..14ab7bb 100644
--- a/base/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
index e0c97d0..43d12f2 100644
--- a/base/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
@@ -295,7 +295,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -306,7 +306,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
index 772ffb1..9e3059b 100644
--- a/base/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
@@ -294,7 +294,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -305,7 +305,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
index 5439a46..99004d8 100644
--- a/base/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
@@ -194,7 +194,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/66121.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
index e1199ed..72dc9e9 100644
--- a/base/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
index 2c7f4a6..e8d1bfe 100644
--- a/base/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
index d156dcd..d197725 100644
--- a/base/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
index 46cf69f..3a222bb 100644
--- a/base/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
index c7e4986..efeec9e 100644
--- a/base/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -171,7 +171,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
index 7b5ef08..6ee2b85 100644
--- a/base/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
@@ -255,7 +255,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -266,7 +266,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
index 3c0767b..e7a636f 100644
--- a/base/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
@@ -210,7 +210,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
index 7d2b1cf..5b80136 100644
--- a/base/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
index 1966444..6ef2318 100644
--- a/base/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
@@ -181,7 +181,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -192,7 +192,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/75912.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
index 5ffad09..b7b9fb9 100644
--- a/base/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -234,7 +234,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
index f4001ff..9505580 100644
--- a/base/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
@@ -291,7 +291,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -302,7 +302,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/77392.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
index ec26653..019aea5 100644
--- a/base/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
index daed49b..84b9c32 100644
--- a/base/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
@@ -182,7 +182,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -193,7 +193,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
index 46994ca..ef84f68 100644
--- a/base/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
index 5932680..df827d6 100644
--- a/base/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
index 6f21818..2bcc4cc 100644
--- a/base/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
index d84d9a6..9319ea9 100644
--- a/base/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
index f58d28c..b9e08a4 100644
--- a/base/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/82509.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
index 12cc75e..4a10d4a 100644
--- a/base/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
index 6ba8b46..1b4095f 100644
--- a/base/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
@@ -230,7 +230,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -241,7 +241,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/88130.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/908db.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
index 0a7d4d3..a3a695e 100644
--- a/base/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
index ef14be8..345f004 100644
--- a/base/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
index 6533855..c5eded5 100644
--- a/base/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
index f298931..b18a4e6 100644
--- a/base/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
index 7a5b1c5..395074c 100644
--- a/base/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
index be0be36..f5736f2 100644
--- a/base/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
index 83fa291..3a783b8 100644
--- a/base/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
index 5725050..664e64c 100644
--- a/base/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
index 43e579f..deeb4c5 100644
--- a/base/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -234,7 +234,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
index 63eecca..44b2ca4 100644
--- a/base/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
@@ -174,7 +174,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -185,7 +185,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
index f6846b2..d03dd39 100644
--- a/base/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
@@ -204,7 +204,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
index 670c8dd..0289e96 100644
--- a/base/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
index a3bad4d..fa19db9 100644
--- a/base/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
index c90ee85..ff51e69 100644
--- a/base/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
index e38f3a8..1845440 100644
--- a/base/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
index 8fa46b9..77e9dd0 100644
--- a/base/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/be234.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
index 0cb3e64..5694092 100644
--- a/base/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
@@ -269,7 +269,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -280,7 +280,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
index c715046..97954b8 100644
--- a/base/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
index c0554e5..6a8dce9 100644
--- a/base/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
@@ -220,7 +220,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -231,7 +231,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
index ff97c25..cf17077 100644
--- a/base/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
index 2655a97..a52dfa4 100644
--- a/base/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
index 1ae3eae..0f5b4c6 100644
--- a/base/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
index d6a0df8..5775425 100644
--- a/base/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
index c7ac2de..ad4ec40 100644
--- a/base/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
index bb61a30..ed7c3e9 100644
--- a/base/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
index 3bb973a..fdf3b5a 100644
--- a/base/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
index 6cc839f..745fefb 100644
--- a/base/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
index 61d1e3f..77ae604 100644
--- a/base/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
index 91a80f8..ca9919a 100644
--- a/base/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
@@ -209,7 +209,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -220,7 +220,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
index ff5cb85..bb205d5 100644
--- a/base/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
index ff5cb85..bb205d5 100644
--- a/base/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
index 2eed152..7aff8a9 100644
--- a/base/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/df957.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
index 6dba12d..a579f9d 100644
--- a/base/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
index ab2051d..de76368 100644
--- a/base/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
@@ -217,7 +217,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -228,7 +228,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
index e774dfd..0b2bc84 100644
--- a/base/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
index 6ab5788..3bbcea2 100644
--- a/base/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
index 6f4278c..bdb48a1 100644
--- a/base/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -190,7 +190,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
index 15ed332..8275b18 100644
--- a/base/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
index f9cab5b..eac113f 100644
--- a/base/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
index 1459701..aab46ec 100644
--- a/base/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
@@ -377,7 +377,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -388,7 +388,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
index e58461b..30247d3 100644
--- a/base/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
index ba01b2c..fef1440 100644
--- a/base/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
@@ -201,7 +201,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -212,7 +212,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
index 6533855..c5eded5 100644
--- a/base/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
index 89794b9..bcf4607 100644
--- a/base/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
index 3b08027..e80ee0f 100644
--- a/base/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
@@ -224,7 +224,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
index f85b0f6..bdbb0dc 100644
--- a/base/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -234,7 +234,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
index f0c5302..2ca5f4b 100644
--- a/base/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
@@ -192,7 +192,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -203,7 +203,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
index 639b694..dd4155e 100644
--- a/base/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
index 2425915..75a5e56 100644
--- a/base/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
index b7ca334..041eda2 100644
--- a/base/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
@@ -320,7 +320,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -331,7 +331,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
index 1eccbad..22f369c 100644
--- a/base/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
index 4486ec1..2aa5030 100644
--- a/base/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
@@ -702,7 +702,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -713,7 +713,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
index 6524a5e..3f6959b 100644
--- a/base/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
index 7d43d7b..21f11dc 100644
--- a/base/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
index 31d6694..0b93750 100644
--- a/base/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
index b0f0629..5f3f0d6 100644
--- a/base/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
index 40f8379..0263cfc 100644
--- a/base/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
index 87141a4..752a1c7 100644
--- a/base/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
@@ -718,7 +718,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -729,7 +729,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
index 61aae0c..a653798 100644
--- a/base/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
index 9228688..0484f98 100644
--- a/base/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
index 2d45f63..b279e5d 100644
--- a/base/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
@@ -193,7 +193,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -204,7 +204,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
index ce2c15a..1aac081 100644
--- a/base/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
index 892898a..d38ad26 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index 8bdf8ea..934c304 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index 892898a..d38ad26 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index 892898a..d38ad26 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 3e621e4..26958d3 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
index 5199f24..c8ed5a7 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index c66bd33..43c7b65 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index 5199f24..c8ed5a7 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index 5199f24..c8ed5a7 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index e565a44..898833a 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
index a84f903..7aab8c3 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index 0be9d36..bc7ad49 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index a84f903..7aab8c3 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index a84f903..7aab8c3 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 1e61073..d8bc3d6 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
index fb135e5..5172ba0 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index 4859842..177b92a 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index fb135e5..5172ba0 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index fb135e5..5172ba0 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index ecd1d0c..36ce1d2 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
index f1b13bb..422d447 100644
--- a/base/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
index 57ff834..93591c3 100644
--- a/base/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
index 3eb2ee8..06a1baf 100644
--- a/base/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
index 7b97fb6..822c35a 100644
--- a/base/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
index 3304381..c71f035 100644
--- a/base/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
index 57ef2c0..a894724 100644
--- a/base/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 c6c8e63..d76a6c7 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
@@ -402,13 +402,13 @@ export type Obj2 = {
     foreach:             Foreach;
     friend:              Friend;
     from:                From;
+    from_dict:           FromDict;
     from_json:           FromJSON;
     func:                Func;
     function:            Function;
     get:                 Get;
     global:              Global;
     go:                  Go;
-    goto:                Goto;
 };
 
 export type DateFormatter = {
@@ -643,6 +643,10 @@ export type From = {
     from: number;
 };
 
+export type FromDict = {
+    from_dict: number;
+};
+
 export type FromJSON = {
     from_json: number;
 };
@@ -667,10 +671,6 @@ export type Go = {
     go: number;
 };
 
-export type Goto = {
-    goto: number;
-};
-
 export type Obj3 = {
     Hashable:                   Hashable;
     Hasher:                     Hasher;
@@ -689,8 +689,10 @@ export type Obj3 = {
     JsonTokenType:              JSONTokenType;
     Locale:                     Locale;
     MapEntry:                   MapEntry;
+    MarshalJSON:                MarshalJSON;
     NO:                         No;
     dummy:                      number;
+    goto:                       Goto;
     guard:                      Guard;
     hasOwnProperty:             HasOwnProperty;
     hashCode:                   HashCode;
@@ -736,7 +738,6 @@ export type Obj3 = {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
-    noexcept:                   Noexcept;
 };
 
 export type Hashable = {
@@ -807,10 +808,18 @@ export type MapEntry = {
     MapEntry: number;
 };
 
+export type MarshalJSON = {
+    MarshalJSON: number;
+};
+
 export type No = {
     NO: number;
 };
 
+export type Goto = {
+    goto: number;
+};
+
 export type Guard = {
     guard: number;
 };
@@ -991,10 +1000,6 @@ export type Nil = {
     nil: number;
 };
 
-export type Noexcept = {
-    noexcept: number;
-};
-
 export type Obj4 = {
     NSError:          NSError;
     NSObject:         NSObject;
@@ -1007,6 +1012,7 @@ export type Obj4 = {
     SEL:              Sel;
     dummy:            number;
     noSuchMethod:     NoSuchMethod;
+    noexcept:         Noexcept;
     nonatomic:        Nonatomic;
     none:             NoneClass;
     nonlocal:         Nonlocal;
@@ -1060,7 +1066,6 @@ export type Obj4 = {
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
-    select:           Select;
 };
 
 export type NSError = {
@@ -1103,6 +1108,10 @@ export type NoSuchMethod = {
     noSuchMethod: number;
 };
 
+export type Noexcept = {
+    noexcept: number;
+};
+
 export type Nonatomic = {
     nonatomic: number;
 };
@@ -1315,10 +1324,6 @@ export type Sealed = {
     sealed: number;
 };
 
-export type Select = {
-    select: number;
-};
-
 export type Obj5 = {
     KSerializer:        KSerializer;
     PrimitiveKind:      PrimitiveKind;
@@ -1337,8 +1342,10 @@ export type Obj5 = {
     TimeZone:           TimeZone;
     True:               True;
     Type:               Type;
+    UnmarshalJSON:      UnmarshalJSON;
     UseSerializers:     UseSerializers;
     dummy:              number;
+    select:             Select;
     self:               SelfClass;
     serialize:          Serialize;
     set:                Set;
@@ -1365,6 +1372,7 @@ export type Obj5 = {
     throw:              Throw;
     throws:             Throws;
     toString:           ToString;
+    to_dict:            ToDict;
     to_json:            ToJSON;
     top_level:          TopLevelClass;
     transient:          Transient;
@@ -1383,8 +1391,6 @@ export type Obj5 = {
     union:              Union;
     unowned:            Unowned;
     unsafe:             Unsafe;
-    unsigned:           Unsigned;
-    ushort:             Ushort;
 };
 
 export type KSerializer = {
@@ -1455,10 +1461,18 @@ export type Type = {
     Type: number;
 };
 
+export type UnmarshalJSON = {
+    UnmarshalJSON: number;
+};
+
 export type UseSerializers = {
     UseSerializers: number;
 };
 
+export type Select = {
+    select: number;
+};
+
 export type SelfClass = {
     self: number;
 };
@@ -1563,6 +1577,10 @@ export type ToString = {
     toString: number;
 };
 
+export type ToDict = {
+    to_dict: number;
+};
+
 export type ToJSON = {
     to_json: number;
 };
@@ -1635,20 +1653,14 @@ export type Unsafe = {
     unsafe: number;
 };
 
-export type Unsigned = {
-    unsigned: number;
-};
-
-export type Ushort = {
-    ushort: number;
-};
-
 export type Obj6 = {
     UUID:           UUID;
     Utf8JsonReader: Utf8JSONReader;
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    unsigned:       Unsigned;
+    ushort:         Ushort;
     using:          Using;
     var:            Var;
     virtual:        Virtual;
@@ -1681,6 +1693,14 @@ export type Yes = {
     YES: number;
 };
 
+export type Unsigned = {
+    unsigned: number;
+};
+
+export type Ushort = {
+    ushort: number;
+};
+
 export type Using = {
     using: number;
 };
@@ -1831,7 +1851,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -1842,7 +1862,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -2250,13 +2270,13 @@ const typeMap: any = {
         { json: "foreach", js: "foreach", typ: r("Foreach") },
         { json: "friend", js: "friend", typ: r("Friend") },
         { json: "from", js: "from", typ: r("From") },
+        { json: "from_dict", js: "from_dict", typ: r("FromDict") },
         { json: "from_json", js: "from_json", typ: r("FromJSON") },
         { json: "func", js: "func", typ: r("Func") },
         { json: "function", js: "function", typ: r("Function") },
         { json: "get", js: "get", typ: r("Get") },
         { json: "global", js: "global", typ: r("Global") },
         { json: "go", js: "go", typ: r("Go") },
-        { json: "goto", js: "goto", typ: r("Goto") },
     ], false),
     "DateFormatter": o([
         { json: "DateFormatter", js: "DateFormatter", typ: i(0) },
@@ -2429,6 +2449,9 @@ const typeMap: any = {
     "From": o([
         { json: "from", js: "from", typ: i(0) },
     ], false),
+    "FromDict": o([
+        { json: "from_dict", js: "from_dict", typ: i(0) },
+    ], false),
     "FromJSON": o([
         { json: "from_json", js: "from_json", typ: i(0) },
     ], false),
@@ -2447,9 +2470,6 @@ const typeMap: any = {
     "Go": o([
         { json: "go", js: "go", typ: i(0) },
     ], false),
-    "Goto": o([
-        { json: "goto", js: "goto", typ: i(0) },
-    ], false),
     "Obj3": o([
         { json: "Hashable", js: "Hashable", typ: r("Hashable") },
         { json: "Hasher", js: "Hasher", typ: r("Hasher") },
@@ -2468,8 +2488,10 @@ const typeMap: any = {
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: r("MarshalJSON") },
         { json: "NO", js: "NO", typ: r("No") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { 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") },
@@ -2515,7 +2537,6 @@ 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: "noexcept", js: "noexcept", typ: r("Noexcept") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2568,9 +2589,15 @@ const typeMap: any = {
     "MapEntry": o([
         { json: "MapEntry", js: "MapEntry", typ: i(0) },
     ], false),
+    "MarshalJSON": o([
+        { json: "MarshalJSON", js: "MarshalJSON", typ: i(0) },
+    ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
     ], false),
+    "Goto": o([
+        { json: "goto", js: "goto", typ: i(0) },
+    ], false),
     "Guard": o([
         { json: "guard", js: "guard", typ: i(0) },
     ], false),
@@ -2706,9 +2733,6 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
-    "Noexcept": o([
-        { json: "noexcept", js: "noexcept", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NSError", js: "NSError", typ: r("NSError") },
         { json: "NSObject", js: "NSObject", typ: r("NSObject") },
@@ -2721,6 +2745,7 @@ const typeMap: any = {
         { json: "SEL", js: "SEL", typ: r("Sel") },
         { json: "dummy", js: "dummy", typ: i(0) },
         { 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") },
         { json: "nonlocal", js: "nonlocal", typ: r("Nonlocal") },
@@ -2774,7 +2799,6 @@ const typeMap: any = {
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
-        { json: "select", js: "select", typ: r("Select") },
     ], false),
     "NSError": o([
         { json: "NSError", js: "NSError", typ: i(0) },
@@ -2806,6 +2830,9 @@ const typeMap: any = {
     "NoSuchMethod": o([
         { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
     ], false),
+    "Noexcept": o([
+        { json: "noexcept", js: "noexcept", typ: i(0) },
+    ], false),
     "Nonatomic": o([
         { json: "nonatomic", js: "nonatomic", typ: i(0) },
     ], false),
@@ -2965,9 +2992,6 @@ const typeMap: any = {
     "Sealed": o([
         { json: "sealed", js: "sealed", typ: i(0) },
     ], false),
-    "Select": o([
-        { json: "select", js: "select", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -2986,8 +3010,10 @@ const typeMap: any = {
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
         { json: "Type", js: "Type", typ: r("Type") },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "select", js: "select", typ: r("Select") },
         { json: "self", js: "self", typ: r("SelfClass") },
         { json: "serialize", js: "serialize", typ: r("Serialize") },
         { json: "set", js: "set", typ: r("Set") },
@@ -3014,6 +3040,7 @@ const typeMap: any = {
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
         { json: "toString", js: "toString", typ: r("ToString") },
+        { json: "to_dict", js: "to_dict", typ: r("ToDict") },
         { 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") },
@@ -3032,8 +3059,6 @@ const typeMap: any = {
         { json: "union", js: "union", typ: r("Union") },
         { json: "unowned", js: "unowned", typ: r("Unowned") },
         { json: "unsafe", js: "unsafe", typ: r("Unsafe") },
-        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
-        { json: "ushort", js: "ushort", typ: r("Ushort") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3086,9 +3111,15 @@ const typeMap: any = {
     "Type": o([
         { json: "Type", js: "Type", typ: i(0) },
     ], false),
+    "UnmarshalJSON": o([
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: i(0) },
+    ], false),
     "UseSerializers": o([
         { json: "UseSerializers", js: "UseSerializers", typ: i(0) },
     ], false),
+    "Select": o([
+        { json: "select", js: "select", typ: i(0) },
+    ], false),
     "SelfClass": o([
         { json: "self", js: "self", typ: i(0) },
     ], false),
@@ -3167,6 +3198,9 @@ const typeMap: any = {
     "ToString": o([
         { json: "toString", js: "toString", typ: i(0) },
     ], false),
+    "ToDict": o([
+        { json: "to_dict", js: "to_dict", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
@@ -3221,18 +3255,14 @@ const typeMap: any = {
     "Unsafe": o([
         { json: "unsafe", js: "unsafe", typ: i(0) },
     ], false),
-    "Unsigned": o([
-        { json: "unsigned", js: "unsigned", typ: i(0) },
-    ], false),
-    "Ushort": o([
-        { json: "ushort", js: "ushort", typ: i(0) },
-    ], false),
     "Obj6": o([
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "Utf8JsonReader", js: "Utf8JsonReader", typ: r("Utf8JSONReader") },
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
+        { json: "ushort", js: "ushort", typ: r("Ushort") },
         { json: "using", js: "using", typ: r("Using") },
         { json: "var", js: "var", typ: r("Var") },
         { json: "virtual", js: "virtual", typ: r("Virtual") },
@@ -3260,6 +3290,12 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Unsigned": o([
+        { json: "unsigned", js: "unsigned", typ: i(0) },
+    ], false),
+    "Ushort": o([
+        { json: "ushort", js: "ushort", typ: i(0) },
+    ], false),
     "Using": o([
         { json: "using", js: "using", typ: i(0) },
     ], false),
diff --git a/base/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
index f80ddb1..1909ad9 100644
--- a/base/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/list.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/list.json/default/TopLevel.js
index 46b9ee9..0280c74 100644
--- a/base/flow/test/inputs/json/priority/list.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/list.json/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
index 26fd739..bdba130 100644
--- a/base/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
index bc67efb..5d938b7 100644
--- a/base/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
@@ -439,7 +439,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -450,7 +450,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
index 70f13bb..0e3d338 100644
--- a/base/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
index a8973a2..39cc484 100644
--- a/base/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
index 5f71ad1..72b4770 100644
--- a/base/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
@@ -247,7 +247,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -258,7 +258,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
index cad18ef..30ae4d6 100644
--- a/base/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/head/flow/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.js b/head/flow/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.js
new file mode 100644
index 0000000..4095aa6
--- /dev/null
+++ b/head/flow/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.js
@@ -0,0 +1,209 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    +foo: { +[key: string]: number };
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = Object.create(null);
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return Object.setPrototypeOf(result, Object.prototype);
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && (typeof val === "string" || val instanceof Date)) return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "foo", js: "foo", typ: m(3.14) },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
index 0273271..c086ed3 100644
--- a/base/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
index 643d117..46ccba8 100644
--- a/base/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
index 4e4662d..323c98f 100644
--- a/base/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
index 8b5565e..4deac1c 100644
--- a/base/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
index 3e0e277..f68675a 100644
--- a/base/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -237,7 +237,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
index 4a7b9cd..d133076 100644
--- a/base/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
index a3987a9..d2e6730 100644
--- a/base/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/unions.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
index 283c106..522a302 100644
--- a/base/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/url.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/url.json/default/TopLevel.js
index 4c1410e..e99ecd9 100644
--- a/base/flow/test/inputs/json/priority/url.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/url.json/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
index ff9d6dd..f9ab3e8 100644
--- a/base/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
index 639b694..dd4155e 100644
--- a/base/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
index 9f7c83e..65a77d0 100644
--- a/base/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
index 0a0728d..c79238c 100644
--- a/base/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
index f17022b..513f04a 100644
--- a/base/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
@@ -395,7 +395,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -406,7 +406,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
index 536024f..e823cd2 100644
--- a/base/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
index aacaf95..63d0123 100644
--- a/base/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
index d7e76ba..e0052d5 100644
--- a/base/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
index 74b9473..2f1fb91 100644
--- a/base/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
index 2f58942..24bb42e 100644
--- a/base/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
@@ -248,7 +248,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -259,7 +259,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
index 381cd53..9c99e75 100644
--- a/base/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/head/flow/test/inputs/json/samples/simple-object.json/readonly-true--24da4fc107df/TopLevel.js b/head/flow/test/inputs/json/samples/simple-object.json/readonly-true--24da4fc107df/TopLevel.js
new file mode 100644
index 0000000..0e2d545
--- /dev/null
+++ b/head/flow/test/inputs/json/samples/simple-object.json/readonly-true--24da4fc107df/TopLevel.js
@@ -0,0 +1,213 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    +date:     number;
+    +title:    string;
+    +validity: boolean;
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = Object.create(null);
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return Object.setPrototypeOf(result, Object.prototype);
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && (typeof val === "string" || val instanceof Date)) return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "date", js: "date", typ: i(0) },
+        { json: "title", js: "title", typ: "" },
+        { json: "validity", js: "validity", typ: true },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
index 99106e9..cebdc47 100644
--- a/base/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
@@ -177,7 +177,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -188,7 +188,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
index 1eccbad..22f369c 100644
--- a/base/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
index a439e02..316d1f8 100644
--- a/base/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
@@ -212,7 +212,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 22e78ad..a60b41e 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
@@ -412,13 +412,13 @@ type Obj2 struct {
 	FormatException   FormatException   `json:"FormatException"`
 	Friend            Friend            `json:"friend"`
 	From              From              `json:"from"`
+	FromDict          FromDict          `json:"from_dict"`
 	FromJSON          FromJSON          `json:"from_json"`
 	Func              Func              `json:"func"`
 	Function          Function          `json:"function"`
 	Get               Get               `json:"get"`
 	Global            Global            `json:"global"`
 	Go                Go                `json:"go"`
-	Goto              Goto              `json:"goto"`
 	Obj2False         FalseClass        `json:"false"`
 }
 
@@ -646,6 +646,10 @@ type From struct {
 	From int64 `json:"from"`
 }
 
+type FromDict struct {
+	FromDict int64 `json:"from_dict"`
+}
+
 type FromJSON struct {
 	FromJSON int64 `json:"from_json"`
 }
@@ -670,16 +674,13 @@ type Go struct {
 	Go int64 `json:"go"`
 }
 
-type Goto struct {
-	Goto int64 `json:"goto"`
-}
-
 type FalseClass struct {
 	False int64 `json:"false"`
 }
 
 type Obj3 struct {
 	Dummy                      int64                      `json:"dummy"`
+	Goto                       Goto                       `json:"goto"`
 	Guard                      Guard                      `json:"guard"`
 	HasOwnProperty             HasOwnProperty             `json:"hasOwnProperty"`
 	HashCode                   HashCode                   `json:"hashCode"`
@@ -733,6 +734,7 @@ type Obj3 struct {
 	Long                       Long                       `json:"long"`
 	Map                        Map                        `json:"map"`
 	MapEntry                   MapEntry                   `json:"MapEntry"`
+	MarshalJSON                MarshalJSON                `json:"MarshalJSON"`
 	MetadataPropertyHandling   MetadataPropertyHandling   `json:"metadata_property_handling"`
 	Module                     Module                     `json:"module"`
 	Mutable                    Mutable                    `json:"mutable"`
@@ -743,7 +745,10 @@ type Obj3 struct {
 	Newtonsoft                 Newtonsoft                 `json:"newtonsoft"`
 	Nil                        Nil                        `json:"nil"`
 	No                         No                         `json:"NO"`
-	Noexcept                   Noexcept                   `json:"noexcept"`
+}
+
+type Goto struct {
+	Goto int64 `json:"goto"`
 }
 
 type Guard struct {
@@ -958,6 +963,10 @@ type MapEntry struct {
 	MapEntry int64 `json:"MapEntry"`
 }
 
+type MarshalJSON struct {
+	MarshalJSON int64 `json:"MarshalJSON"`
+}
+
 type MetadataPropertyHandling struct {
 	MetadataPropertyHandling int64 `json:"metadata_property_handling"`
 }
@@ -998,16 +1007,13 @@ type No struct {
 	No int64 `json:"NO"`
 }
 
-type Noexcept struct {
-	Noexcept int64 `json:"noexcept"`
-}
-
 type Obj4 struct {
 	Dummy           int64           `json:"dummy"`
 	NSError         NSError         `json:"NSError"`
 	NSObject        NSObject        `json:"NSObject"`
 	NSString        NSString        `json:"NSString"`
 	NoSuchMethod    NoSuchMethod    `json:"noSuchMethod"`
+	Noexcept        Noexcept        `json:"noexcept"`
 	Nonatomic       Nonatomic       `json:"nonatomic"`
 	None            None            `json:"None"`
 	Nonlocal        Nonlocal        `json:"nonlocal"`
@@ -1067,7 +1073,6 @@ type Obj4 struct {
 	Sbyte           Sbyte           `json:"sbyte"`
 	Sealed          Sealed          `json:"sealed"`
 	Sel             Sel             `json:"SEL"`
-	Select          Select          `json:"select"`
 }
 
 type NSError struct {
@@ -1086,6 +1091,10 @@ type NoSuchMethod struct {
 	NoSuchMethod int64 `json:"noSuchMethod"`
 }
 
+type Noexcept struct {
+	Noexcept int64 `json:"noexcept"`
+}
+
 type Nonatomic struct {
 	Nonatomic int64 `json:"nonatomic"`
 }
@@ -1322,10 +1331,6 @@ type Sel struct {
 	Sel int64 `json:"SEL"`
 }
 
-type Select struct {
-	Select int64 `json:"select"`
-}
-
 type Obj5 struct {
 	Dummy              int64              `json:"dummy"`
 	KSerializer        KSerializer        `json:"KSerializer"`
@@ -1333,6 +1338,7 @@ type Obj5 struct {
 	Obj5True           TrueClass          `json:"true"`
 	Obj5Type           TypeClass          `json:"type"`
 	PrimitiveKind      PrimitiveKind      `json:"PrimitiveKind"`
+	Select             Select             `json:"select"`
 	Self               Self               `json:"Self"`
 	Sendable           Sendable           `json:"Sendable"`
 	SerialDescriptor   SerialDescriptor   `json:"SerialDescriptor"`
@@ -1370,6 +1376,7 @@ type Obj5 struct {
 	TimeOnly           TimeOnly           `json:"TimeOnly"`
 	TimeOnlyConverter  TimeOnlyConverter  `json:"TimeOnlyConverter"`
 	TimeZone           TimeZone           `json:"TimeZone"`
+	ToDict             ToDict             `json:"to_dict"`
 	ToJSON             ToJSON             `json:"to_json"`
 	ToString           ToString           `json:"toString"`
 	TopLevel           TopLevelClass      `json:"top_level"`
@@ -1387,11 +1394,10 @@ type Obj5 struct {
 	Unchecked          Unchecked          `json:"unchecked"`
 	Undefined          Undefined          `json:"undefined"`
 	Union              Union              `json:"union"`
+	UnmarshalJSON      UnmarshalJSON      `json:"UnmarshalJSON"`
 	Unowned            Unowned            `json:"unowned"`
 	Unsafe             Unsafe             `json:"unsafe"`
-	Unsigned           Unsigned           `json:"unsigned"`
 	UseSerializers     UseSerializers     `json:"UseSerializers"`
-	Ushort             Ushort             `json:"ushort"`
 }
 
 type KSerializer struct {
@@ -1414,6 +1420,10 @@ type PrimitiveKind struct {
 	PrimitiveKind int64 `json:"PrimitiveKind"`
 }
 
+type Select struct {
+	Select int64 `json:"select"`
+}
+
 type Self struct {
 	Self int64 `json:"Self"`
 }
@@ -1562,6 +1572,10 @@ type TimeZone struct {
 	TimeZone int64 `json:"TimeZone"`
 }
 
+type ToDict struct {
+	ToDict int64 `json:"to_dict"`
+}
+
 type ToJSON struct {
 	ToJSON int64 `json:"to_json"`
 }
@@ -1630,6 +1644,10 @@ type Union struct {
 	Union int64 `json:"union"`
 }
 
+type UnmarshalJSON struct {
+	UnmarshalJSON int64 `json:"UnmarshalJSON"`
+}
+
 type Unowned struct {
 	Unowned int64 `json:"unowned"`
 }
@@ -1638,21 +1656,15 @@ type Unsafe struct {
 	Unsafe int64 `json:"unsafe"`
 }
 
-type Unsigned struct {
-	Unsigned int64 `json:"unsigned"`
-}
-
 type UseSerializers struct {
 	UseSerializers int64 `json:"UseSerializers"`
 }
 
-type Ushort struct {
-	Ushort int64 `json:"ushort"`
-}
-
 type Obj6 struct {
 	Dummy          int64          `json:"dummy"`
 	UUID           UUID           `json:"UUID"`
+	Unsigned       Unsigned       `json:"unsigned"`
+	Ushort         Ushort         `json:"ushort"`
 	Using          Using          `json:"using"`
 	Utf8JSONReader Utf8JSONReader `json:"Utf8JsonReader"`
 	Utf8JSONWriter Utf8JSONWriter `json:"Utf8JsonWriter"`
@@ -1676,6 +1688,14 @@ type UUID struct {
 	UUID int64 `json:"UUID"`
 }
 
+type Unsigned struct {
+	Unsigned int64 `json:"unsigned"`
+}
+
+type Ushort struct {
+	Ushort int64 `json:"ushort"`
+}
+
 type Using struct {
 	Using int64 `json:"using"`
 }
diff --git a/base/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
index e0890fb..aa140fd 100644
--- a/base/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
index 17c0615..970a805 100644
--- a/base/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
index 4e2fad5..a0a1eae 100644
--- a/base/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
index 6970141..eff8131 100644
--- a/base/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
index 6f93b2c..17d7020 100644
--- a/base/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
index 82910a8..3eec7e0 100644
--- a/base/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
index 144e435..b30a466 100644
--- a/base/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
index 0a8d281..7f153bb 100644
--- a/base/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
index 4244d70..760d886 100644
--- a/base/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
index a908803..adda7dc 100644
--- a/base/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
index 327d7fd..1326964 100644
--- a/base/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
index 1f86530..74ffea9 100644
--- a/base/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
index 9eae08b..aac5268 100644
--- a/base/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
index 420ace9..621c2a3 100644
--- a/base/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
index 15c6fba..4296f01 100644
--- a/base/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
index 4249720..5fc3c12 100644
--- a/base/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
index fd6d83e..1cfce39 100644
--- a/base/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
index f9c07fe..bc93726 100644
--- a/base/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
index 578c5da..16124f1 100644
--- a/base/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
index c8dc669..3451109 100644
--- a/base/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
index 3a9ea88..33e7581 100644
--- a/base/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
index 2365eaf..e7379b2 100644
--- a/base/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
index acdc9b7..5bf1752 100644
--- a/base/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
index 020032a..f146724 100644
--- a/base/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
index a0952a7..72a789e 100644
--- a/base/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
index 09a4037..4e38156 100644
--- a/base/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
index 9d653c2..1d89aba 100644
--- a/base/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 9ec107f..7542454 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
@@ -122,18 +122,19 @@ module QuickType
     , FormatException (..)
     , Friend (..)
     , From (..)
+    , FromDict (..)
     , FromJSONClass (..)
     , Func (..)
     , Function (..)
     , Get (..)
     , Global (..)
     , Go (..)
-    , Goto (..)
     , Default (..)
     , Do (..)
     , Else (..)
     , Obj2False (..)
     , Obj3 (..)
+    , Goto (..)
     , Guard (..)
     , HasOwnProperty (..)
     , HashCode (..)
@@ -181,6 +182,7 @@ module QuickType
     , Long (..)
     , MapClass (..)
     , MapEntry (..)
+    , MarshalJSON (..)
     , MetadataPropertyHandling (..)
     , Mutable (..)
     , Mutating (..)
@@ -190,7 +192,6 @@ module QuickType
     , Newtonsoft (..)
     , Nil (..)
     , No (..)
-    , Noexcept (..)
     , ID (..)
     , If (..)
     , Import (..)
@@ -200,6 +201,7 @@ module QuickType
     , Module (..)
     , Obj4 (..)
     , NoSuchMethod (..)
+    , Noexcept (..)
     , Nonatomic (..)
     , None (..)
     , Nonlocal (..)
@@ -262,7 +264,6 @@ module QuickType
     , Sbyte (..)
     , Sealed (..)
     , Sel (..)
-    , Select (..)
     , Obj5 (..)
     , KSerializer (..)
     , SelfClass (..)
@@ -271,6 +272,7 @@ module QuickType
     , Type (..)
     , PrimitiveKind (..)
     , TypeClass (..)
+    , Select (..)
     , Self (..)
     , Sendable (..)
     , SerialDescriptor (..)
@@ -307,6 +309,7 @@ module QuickType
     , TimeOnly (..)
     , TimeOnlyConverter (..)
     , TimeZone (..)
+    , ToDict (..)
     , ToJSONClass (..)
     , ToString (..)
     , TopLevel (..)
@@ -323,13 +326,14 @@ module QuickType
     , Unchecked (..)
     , Undefined (..)
     , Union (..)
+    , UnmarshalJSON (..)
     , Unowned (..)
     , Unsafe (..)
-    , Unsigned (..)
     , UseSerializers (..)
-    , Ushort (..)
     , Obj6 (..)
     , Where (..)
+    , Unsigned (..)
+    , Ushort (..)
     , Using (..)
     , Utf8JSONReader (..)
     , Utf8JSONWriter (..)
@@ -746,13 +750,13 @@ data Obj2 = Obj2
     , formatExceptionObj2 :: FormatException
     , friendObj2 :: Friend
     , fromObj2 :: From
+    , fromDictObj2 :: FromDict
     , fromJSONObj2 :: FromJSONClass
     , funcObj2 :: Func
     , functionObj2 :: Function
     , getObj2 :: Get
     , globalObj2 :: Global
     , goObj2 :: Go
-    , gotoObj2 :: Goto
     , obj2DefaultObj2 :: Default
     , obj2DoObj2 :: Do
     , obj2ElseObj2 :: Else
@@ -976,6 +980,10 @@ data From = From
     { fromFrom :: Int
     } deriving (Show)
 
+data FromDict = FromDict
+    { fromDictFromDict :: Int
+    } deriving (Show)
+
 data FromJSONClass = FromJSONClass
     { fromJSONFromJSONClass :: Int
     } deriving (Show)
@@ -1000,10 +1008,6 @@ data Go = Go
     { goGo :: Int
     } deriving (Show)
 
-data Goto = Goto
-    { gotoGoto :: Int
-    } deriving (Show)
-
 data Default = Default
     { defaultDefaultDefault :: Int
     } deriving (Show)
@@ -1022,6 +1026,7 @@ data Obj2False = Obj2False
 
 data Obj3 = Obj3
     { dummyObj3 :: Int
+    , gotoObj3 :: Goto
     , guardObj3 :: Guard
     , hasOwnPropertyObj3 :: HasOwnProperty
     , hashCodeObj3 :: HashCode
@@ -1069,6 +1074,7 @@ data Obj3 = Obj3
     , longObj3 :: Long
     , mapObj3 :: MapClass
     , mapEntryObj3 :: MapEntry
+    , marshalJSONObj3 :: MarshalJSON
     , metadataPropertyHandlingObj3 :: MetadataPropertyHandling
     , mutableObj3 :: Mutable
     , mutatingObj3 :: Mutating
@@ -1078,7 +1084,6 @@ data Obj3 = Obj3
     , newtonsoftObj3 :: Newtonsoft
     , nilObj3 :: Nil
     , noObj3 :: No
-    , noexceptObj3 :: Noexcept
     , obj3IDObj3 :: ID
     , obj3IfObj3 :: If
     , obj3ImportObj3 :: Import
@@ -1088,6 +1093,10 @@ data Obj3 = Obj3
     , obj3ModuleObj3 :: Module
     } deriving (Show)
 
+data Goto = Goto
+    { gotoGoto :: Int
+    } deriving (Show)
+
 data Guard = Guard
     { guardGuard :: Int
     } deriving (Show)
@@ -1276,6 +1285,10 @@ data MapEntry = MapEntry
     { mapEntryMapEntry :: Int
     } deriving (Show)
 
+data MarshalJSON = MarshalJSON
+    { marshalJSONMarshalJSON :: Int
+    } deriving (Show)
+
 data MetadataPropertyHandling = MetadataPropertyHandling
     { metadataPropertyHandlingMetadataPropertyHandling :: Int
     } deriving (Show)
@@ -1312,10 +1325,6 @@ data No = No
     { noNo :: Int
     } deriving (Show)
 
-data Noexcept = Noexcept
-    { noexceptNoexcept :: Int
-    } deriving (Show)
-
 data ID = ID
     { idIDID :: Int
     } deriving (Show)
@@ -1347,6 +1356,7 @@ data Module = Module
 data Obj4 = Obj4
     { dummyObj4 :: Int
     , noSuchMethodObj4 :: NoSuchMethod
+    , noexceptObj4 :: Noexcept
     , nonatomicObj4 :: Nonatomic
     , noneObj4 :: None
     , nonlocalObj4 :: Nonlocal
@@ -1409,13 +1419,16 @@ data Obj4 = Obj4
     , sbyteObj4 :: Sbyte
     , sealedObj4 :: Sealed
     , selObj4 :: Sel
-    , selectObj4 :: Select
     } deriving (Show)
 
 data NoSuchMethod = NoSuchMethod
     { noSuchMethodNoSuchMethod :: Int
     } deriving (Show)
 
+data Noexcept = Noexcept
+    { noexceptNoexcept :: Int
+    } deriving (Show)
+
 data Nonatomic = Nonatomic
     { nonatomicNonatomic :: Int
     } deriving (Show)
@@ -1664,10 +1677,6 @@ data Sel = Sel
     { selSel :: Int
     } deriving (Show)
 
-data Select = Select
-    { selectSelect :: Int
-    } deriving (Show)
-
 data Obj5 = Obj5
     { dummyObj5 :: Int
     , kSerializerObj5 :: KSerializer
@@ -1677,6 +1686,7 @@ data Obj5 = Obj5
     , obj5TypeObj5 :: Type
     , primitiveKindObj5 :: PrimitiveKind
     , purpleTypeObj5 :: TypeClass
+    , selectObj5 :: Select
     , selfObj5 :: Self
     , sendableObj5 :: Sendable
     , serialDescriptorObj5 :: SerialDescriptor
@@ -1713,6 +1723,7 @@ data Obj5 = Obj5
     , timeOnlyObj5 :: TimeOnly
     , timeOnlyConverterObj5 :: TimeOnlyConverter
     , timeZoneObj5 :: TimeZone
+    , toDictObj5 :: ToDict
     , toJSONObj5 :: ToJSONClass
     , toStringObj5 :: ToString
     , topLevelObj5 :: TopLevel
@@ -1729,11 +1740,10 @@ data Obj5 = Obj5
     , uncheckedObj5 :: Unchecked
     , undefinedObj5 :: Undefined
     , unionObj5 :: Union
+    , unmarshalJSONObj5 :: UnmarshalJSON
     , unownedObj5 :: Unowned
     , unsafeObj5 :: Unsafe
-    , unsignedObj5 :: Unsigned
     , useSerializersObj5 :: UseSerializers
-    , ushortObj5 :: Ushort
     } deriving (Show)
 
 data KSerializer = KSerializer
@@ -1764,6 +1774,10 @@ data TypeClass = TypeClass
     { typeTypeTypeClass :: Int
     } deriving (Show)
 
+data Select = Select
+    { selectSelect :: Int
+    } deriving (Show)
+
 data Self = Self
     { selfSelf :: Int
     } deriving (Show)
@@ -1908,6 +1922,10 @@ data TimeZone = TimeZone
     { timeZoneTimeZone :: Int
     } deriving (Show)
 
+data ToDict = ToDict
+    { toDictToDict :: Int
+    } deriving (Show)
+
 data ToJSONClass = ToJSONClass
     { toJSONToJSONClass :: Int
     } deriving (Show)
@@ -1972,6 +1990,10 @@ data Union = Union
     { unionUnion :: Int
     } deriving (Show)
 
+data UnmarshalJSON = UnmarshalJSON
+    { unmarshalJSONUnmarshalJSON :: Int
+    } deriving (Show)
+
 data Unowned = Unowned
     { unownedUnowned :: Int
     } deriving (Show)
@@ -1980,21 +2002,15 @@ data Unsafe = Unsafe
     { unsafeUnsafe :: Int
     } deriving (Show)
 
-data Unsigned = Unsigned
-    { unsignedUnsigned :: Int
-    } deriving (Show)
-
 data UseSerializers = UseSerializers
     { useSerializersUseSerializers :: Int
     } deriving (Show)
 
-data Ushort = Ushort
-    { ushortUshort :: Int
-    } deriving (Show)
-
 data Obj6 = Obj6
     { dummyObj6 :: Int
     , obj6WhereObj6 :: Where
+    , unsignedObj6 :: Unsigned
+    , ushortObj6 :: Ushort
     , usingObj6 :: Using
     , utf8JSONReaderObj6 :: Utf8JSONReader
     , utf8JSONWriterObj6 :: Utf8JSONWriter
@@ -2018,6 +2034,14 @@ data Where = Where
     { whereWhereWhere :: Int
     } deriving (Show)
 
+data Unsigned = Unsigned
+    { unsignedUnsigned :: Int
+    } deriving (Show)
+
+data Ushort = Ushort
+    { ushortUshort :: Int
+    } deriving (Show)
+
 data Using = Using
     { usingUsing :: Int
     } deriving (Show)
@@ -2890,7 +2914,7 @@ instance FromJSON ClassClass where
         <$> v .: "class"
 
 instance ToJSON Obj2 where
-    toJSON (Obj2 dateFormatterObj2 dateOnlyObj2 dateOnlyConverterObj2 dateParseHandlingObj2 dateTimeObj2 dateTimeStylesObj2 debuggerObj2 decimalObj2 declareObj2 decltypeObj2 decodeStringObj2 decoderObj2 decodingErrorObj2 defObj2 deferObj2 deinitObj2 delObj2 delegateObj2 deleteObj2 dictObj2 dictionaryObj2 didSetObj2 doubleObj2 dummyObj2 dynamicObj2 dynamicCastObj2 elifObj2 encodeQuickTypeObj2 encoderObj2 enumObj2 enumValuesObj2 equalityContractObj2 equatableObj2 eventObj2 exceptObj2 exceptionObj2 explicitObj2 exportObj2 exposingObj2 extendsObj2 extensionObj2 externObj2 fallthroughObj2 falseObj2 fileprivateObj2 finalObj2 finallyObj2 fixedObj2 floatObj2 forObj2 foreachObj2 formatExceptionObj2 friendObj2 fromObj2 fromJSONObj2 funcObj2 functionObj2 getObj2 globalObj2 goObj2 gotoObj2 obj2DefaultObj2 obj2DoObj2 obj2ElseObj2 obj2FalseObj2) =
+    toJSON (Obj2 dateFormatterObj2 dateOnlyObj2 dateOnlyConverterObj2 dateParseHandlingObj2 dateTimeObj2 dateTimeStylesObj2 debuggerObj2 decimalObj2 declareObj2 decltypeObj2 decodeStringObj2 decoderObj2 decodingErrorObj2 defObj2 deferObj2 deinitObj2 delObj2 delegateObj2 deleteObj2 dictObj2 dictionaryObj2 didSetObj2 doubleObj2 dummyObj2 dynamicObj2 dynamicCastObj2 elifObj2 encodeQuickTypeObj2 encoderObj2 enumObj2 enumValuesObj2 equalityContractObj2 equatableObj2 eventObj2 exceptObj2 exceptionObj2 explicitObj2 exportObj2 exposingObj2 extendsObj2 extensionObj2 externObj2 fallthroughObj2 falseObj2 fileprivateObj2 finalObj2 finallyObj2 fixedObj2 floatObj2 forObj2 foreachObj2 formatExceptionObj2 friendObj2 fromObj2 fromDictObj2 fromJSONObj2 funcObj2 functionObj2 getObj2 globalObj2 goObj2 obj2DefaultObj2 obj2DoObj2 obj2ElseObj2 obj2FalseObj2) =
         object $ foldMap (maybe [] pure)
         [ Just $ "DateFormatter" .= dateFormatterObj2
         , Just $ "DateOnly" .= dateOnlyObj2
@@ -2946,13 +2970,13 @@ instance ToJSON Obj2 where
         , Just $ "FormatException" .= formatExceptionObj2
         , Just $ "friend" .= friendObj2
         , Just $ "from" .= fromObj2
+        , Just $ "from_dict" .= fromDictObj2
         , Just $ "from_json" .= fromJSONObj2
         , Just $ "func" .= funcObj2
         , Just $ "function" .= functionObj2
         , Just $ "get" .= getObj2
         , Just $ "global" .= globalObj2
         , Just $ "go" .= goObj2
-        , Just $ "goto" .= gotoObj2
         , Just $ "default" .= obj2DefaultObj2
         , Just $ "do" .= obj2DoObj2
         , Just $ "else" .= obj2ElseObj2
@@ -3015,13 +3039,13 @@ instance FromJSON Obj2 where
         <*> v .: "FormatException"
         <*> v .: "friend"
         <*> v .: "from"
+        <*> v .: "from_dict"
         <*> v .: "from_json"
         <*> v .: "func"
         <*> v .: "function"
         <*> v .: "get"
         <*> v .: "global"
         <*> v .: "go"
-        <*> v .: "goto"
         <*> v .: "default"
         <*> v .: "do"
         <*> v .: "else"
@@ -3567,6 +3591,16 @@ instance FromJSON From where
     parseJSON (Object v) = From
         <$> v .: "from"
 
+instance ToJSON FromDict where
+    toJSON (FromDict fromDictFromDict) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "from_dict" .= fromDictFromDict
+        ]
+
+instance FromJSON FromDict where
+    parseJSON (Object v) = FromDict
+        <$> v .: "from_dict"
+
 instance ToJSON FromJSONClass where
     toJSON (FromJSONClass fromJSONFromJSONClass) =
         object $ foldMap (maybe [] pure)
@@ -3627,16 +3661,6 @@ instance FromJSON Go where
     parseJSON (Object v) = Go
         <$> v .: "go"
 
-instance ToJSON Goto where
-    toJSON (Goto gotoGoto) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "goto" .= gotoGoto
-        ]
-
-instance FromJSON Goto where
-    parseJSON (Object v) = Goto
-        <$> v .: "goto"
-
 instance ToJSON Default where
     toJSON (Default defaultDefaultDefault) =
         object $ foldMap (maybe [] pure)
@@ -3678,9 +3702,10 @@ instance FromJSON Obj2False where
         <$> v .: "false"
 
 instance ToJSON Obj3 where
-    toJSON (Obj3 dummyObj3 guardObj3 hasOwnPropertyObj3 hashCodeObj3 hashableObj3 hasherObj3 impObj3 implementsObj3 implicitObj3 indirectObj3 initObj3 inlineObj3 inoutObj3 instanceofObj3 intObj3 interfaceObj3 internalObj3 isObj3 isoDateTimeOffsetConverterObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonAnyObj3 jsonCodingKeyObj3 jsonConverterObj3 jsonDecoderObj3 jsonEncoderObj3 jsonExceptionObj3 jsonGeneratorObj3 jsonNodeObj3 jsonNullObj3 jsonParserObj3 jsonReaderObj3 jsonSerializerObj3 jsonTokenObj3 jsonTokenTypeObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 localeObj3 lockObj3 longObj3 mapObj3 mapEntryObj3 metadataPropertyHandlingObj3 mutableObj3 mutatingObj3 namespaceObj3 nativeObj3 newObj3 newtonsoftObj3 nilObj3 noObj3 noexceptObj3 obj3IDObj3 obj3IfObj3 obj3ImportObj3 obj3InObj3 obj3InfixObj3 obj3LetObj3 obj3ModuleObj3) =
+    toJSON (Obj3 dummyObj3 gotoObj3 guardObj3 hasOwnPropertyObj3 hashCodeObj3 hashableObj3 hasherObj3 impObj3 implementsObj3 implicitObj3 indirectObj3 initObj3 inlineObj3 inoutObj3 instanceofObj3 intObj3 interfaceObj3 internalObj3 isObj3 isoDateTimeOffsetConverterObj3 iterableObj3 jdecObj3 jencObj3 jpipeObj3 jsonObj3 jsonAnyObj3 jsonCodingKeyObj3 jsonConverterObj3 jsonDecoderObj3 jsonEncoderObj3 jsonExceptionObj3 jsonGeneratorObj3 jsonNodeObj3 jsonNullObj3 jsonParserObj3 jsonReaderObj3 jsonSerializerObj3 jsonTokenObj3 jsonTokenTypeObj3 jsonWriterObj3 lambdaObj3 lazyObj3 leftObj3 listObj3 localeObj3 lockObj3 longObj3 mapObj3 mapEntryObj3 marshalJSONObj3 metadataPropertyHandlingObj3 mutableObj3 mutatingObj3 namespaceObj3 nativeObj3 newObj3 newtonsoftObj3 nilObj3 noObj3 obj3IDObj3 obj3IfObj3 obj3ImportObj3 obj3InObj3 obj3InfixObj3 obj3LetObj3 obj3ModuleObj3) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj3
+        , Just $ "goto" .= gotoObj3
         , Just $ "guard" .= guardObj3
         , Just $ "hasOwnProperty" .= hasOwnPropertyObj3
         , Just $ "hashCode" .= hashCodeObj3
@@ -3728,6 +3753,7 @@ instance ToJSON Obj3 where
         , Just $ "long" .= longObj3
         , Just $ "map" .= mapObj3
         , Just $ "MapEntry" .= mapEntryObj3
+        , Just $ "MarshalJSON" .= marshalJSONObj3
         , Just $ "metadata_property_handling" .= metadataPropertyHandlingObj3
         , Just $ "mutable" .= mutableObj3
         , Just $ "mutating" .= mutatingObj3
@@ -3737,7 +3763,6 @@ instance ToJSON Obj3 where
         , Just $ "newtonsoft" .= newtonsoftObj3
         , Just $ "nil" .= nilObj3
         , Just $ "NO" .= noObj3
-        , Just $ "noexcept" .= noexceptObj3
         , Just $ "id" .= obj3IDObj3
         , Just $ "if" .= obj3IfObj3
         , Just $ "import" .= obj3ImportObj3
@@ -3750,6 +3775,7 @@ instance ToJSON Obj3 where
 instance FromJSON Obj3 where
     parseJSON (Object v) = Obj3
         <$> v .: "dummy"
+        <*> v .: "goto"
         <*> v .: "guard"
         <*> v .: "hasOwnProperty"
         <*> v .: "hashCode"
@@ -3797,6 +3823,7 @@ instance FromJSON Obj3 where
         <*> v .: "long"
         <*> v .: "map"
         <*> v .: "MapEntry"
+        <*> v .: "MarshalJSON"
         <*> v .: "metadata_property_handling"
         <*> v .: "mutable"
         <*> v .: "mutating"
@@ -3806,7 +3833,6 @@ instance FromJSON Obj3 where
         <*> v .: "newtonsoft"
         <*> v .: "nil"
         <*> v .: "NO"
-        <*> v .: "noexcept"
         <*> v .: "id"
         <*> v .: "if"
         <*> v .: "import"
@@ -3815,6 +3841,16 @@ instance FromJSON Obj3 where
         <*> v .: "let"
         <*> v .: "module"
 
+instance ToJSON Goto where
+    toJSON (Goto gotoGoto) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "goto" .= gotoGoto
+        ]
+
+instance FromJSON Goto where
+    parseJSON (Object v) = Goto
+        <$> v .: "goto"
+
 instance ToJSON Guard where
     toJSON (Guard guardGuard) =
         object $ foldMap (maybe [] pure)
@@ -4285,6 +4321,16 @@ instance FromJSON MapEntry where
     parseJSON (Object v) = MapEntry
         <$> v .: "MapEntry"
 
+instance ToJSON MarshalJSON where
+    toJSON (MarshalJSON marshalJSONMarshalJSON) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "MarshalJSON" .= marshalJSONMarshalJSON
+        ]
+
+instance FromJSON MarshalJSON where
+    parseJSON (Object v) = MarshalJSON
+        <$> v .: "MarshalJSON"
+
 instance ToJSON MetadataPropertyHandling where
     toJSON (MetadataPropertyHandling metadataPropertyHandlingMetadataPropertyHandling) =
         object $ foldMap (maybe [] pure)
@@ -4375,16 +4421,6 @@ instance FromJSON No where
     parseJSON (Object v) = No
         <$> v .: "NO"
 
-instance ToJSON Noexcept where
-    toJSON (Noexcept noexceptNoexcept) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "noexcept" .= noexceptNoexcept
-        ]
-
-instance FromJSON Noexcept where
-    parseJSON (Object v) = Noexcept
-        <$> v .: "noexcept"
-
 instance ToJSON ID where
     toJSON (ID idIDID) =
         object $ foldMap (maybe [] pure)
@@ -4456,10 +4492,11 @@ instance FromJSON Module where
         <$> v .: "module"
 
 instance ToJSON Obj4 where
-    toJSON (Obj4 dummyObj4 noSuchMethodObj4 nonatomicObj4 noneObj4 nonlocalObj4 nonmutatingObj4 notObj4 notEqObj4 nsErrorObj4 nsObjectObj4 nsStringObj4 nullObj4 nullptrObj4 numberObj4 obj4NoneObj4 obj4NullObj4 obj4OfObj4 obj4ProtocolObj4 objectObj4 objectMapperObj4 onewayObj4 openObj4 operatorObj4 optionalObj4 orObj4 orEqObj4 outObj4 overrideObj4 packageObj4 paramsObj4 passObj4 portObj4 postfixObj4 precedenceObj4 prefixObj4 printObj4 printMembersObj4 printfObj4 privateObj4 protectedObj4 protocolObj4 publicObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 regExpObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 runtimeTypeObj4 sObj4 sbyteObj4 sealedObj4 selObj4 selectObj4) =
+    toJSON (Obj4 dummyObj4 noSuchMethodObj4 noexceptObj4 nonatomicObj4 noneObj4 nonlocalObj4 nonmutatingObj4 notObj4 notEqObj4 nsErrorObj4 nsObjectObj4 nsStringObj4 nullObj4 nullptrObj4 numberObj4 obj4NoneObj4 obj4NullObj4 obj4OfObj4 obj4ProtocolObj4 objectObj4 objectMapperObj4 onewayObj4 openObj4 operatorObj4 optionalObj4 orObj4 orEqObj4 outObj4 overrideObj4 packageObj4 paramsObj4 passObj4 portObj4 postfixObj4 precedenceObj4 prefixObj4 printObj4 printMembersObj4 printfObj4 privateObj4 protectedObj4 protocolObj4 publicObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 regExpObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 runtimeTypeObj4 sObj4 sbyteObj4 sealedObj4 selObj4) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj4
         , Just $ "noSuchMethod" .= noSuchMethodObj4
+        , Just $ "noexcept" .= noexceptObj4
         , Just $ "nonatomic" .= nonatomicObj4
         , Just $ "None" .= noneObj4
         , Just $ "nonlocal" .= nonlocalObj4
@@ -4522,13 +4559,13 @@ instance ToJSON Obj4 where
         , Just $ "sbyte" .= sbyteObj4
         , Just $ "sealed" .= sealedObj4
         , Just $ "SEL" .= selObj4
-        , Just $ "select" .= selectObj4
         ]
 
 instance FromJSON Obj4 where
     parseJSON (Object v) = Obj4
         <$> v .: "dummy"
         <*> v .: "noSuchMethod"
+        <*> v .: "noexcept"
         <*> v .: "nonatomic"
         <*> v .: "None"
         <*> v .: "nonlocal"
@@ -4591,7 +4628,6 @@ instance FromJSON Obj4 where
         <*> v .: "sbyte"
         <*> v .: "sealed"
         <*> v .: "SEL"
-        <*> v .: "select"
 
 instance ToJSON NoSuchMethod where
     toJSON (NoSuchMethod noSuchMethodNoSuchMethod) =
@@ -4603,6 +4639,16 @@ instance FromJSON NoSuchMethod where
     parseJSON (Object v) = NoSuchMethod
         <$> v .: "noSuchMethod"
 
+instance ToJSON Noexcept where
+    toJSON (Noexcept noexceptNoexcept) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "noexcept" .= noexceptNoexcept
+        ]
+
+instance FromJSON Noexcept where
+    parseJSON (Object v) = Noexcept
+        <$> v .: "noexcept"
+
 instance ToJSON Nonatomic where
     toJSON (Nonatomic nonatomicNonatomic) =
         object $ foldMap (maybe [] pure)
@@ -5223,18 +5269,8 @@ instance FromJSON Sel where
     parseJSON (Object v) = Sel
         <$> v .: "SEL"
 
-instance ToJSON Select where
-    toJSON (Select selectSelect) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "select" .= selectSelect
-        ]
-
-instance FromJSON Select where
-    parseJSON (Object v) = Select
-        <$> v .: "select"
-
 instance ToJSON Obj5 where
-    toJSON (Obj5 dummyObj5 kSerializerObj5 obj5SelfObj5 obj5ThenObj5 obj5TrueObj5 obj5TypeObj5 primitiveKindObj5 purpleTypeObj5 selfObj5 sendableObj5 serialDescriptorObj5 serialNameObj5 serializableObj5 serializeObj5 serializerProviderObj5 setObj5 shortObj5 signedObj5 simpleModuleObj5 sizeofObj5 stackallocObj5 standardsObj5 staticObj5 staticAssertObj5 staticCastObj5 stdDeserializerObj5 stdSerializerObj5 strictfpObj5 stringObj5 structObj5 subscriptObj5 superObj5 switchObj5 symbolObj5 synchronizedObj5 systemObj5 templateObj5 thisObj5 threadLocalObj5 throwObj5 throwsObj5 timeOnlyObj5 timeOnlyConverterObj5 timeZoneObj5 toJSONObj5 toStringObj5 topLevelObj5 transientObj5 trueObj5 tryObj5 typealiasObj5 typedefObj5 typeidObj5 typenameObj5 typeofObj5 uintObj5 ulongObj5 uncheckedObj5 undefinedObj5 unionObj5 unownedObj5 unsafeObj5 unsignedObj5 useSerializersObj5 ushortObj5) =
+    toJSON (Obj5 dummyObj5 kSerializerObj5 obj5SelfObj5 obj5ThenObj5 obj5TrueObj5 obj5TypeObj5 primitiveKindObj5 purpleTypeObj5 selectObj5 selfObj5 sendableObj5 serialDescriptorObj5 serialNameObj5 serializableObj5 serializeObj5 serializerProviderObj5 setObj5 shortObj5 signedObj5 simpleModuleObj5 sizeofObj5 stackallocObj5 standardsObj5 staticObj5 staticAssertObj5 staticCastObj5 stdDeserializerObj5 stdSerializerObj5 strictfpObj5 stringObj5 structObj5 subscriptObj5 superObj5 switchObj5 symbolObj5 synchronizedObj5 systemObj5 templateObj5 thisObj5 threadLocalObj5 throwObj5 throwsObj5 timeOnlyObj5 timeOnlyConverterObj5 timeZoneObj5 toDictObj5 toJSONObj5 toStringObj5 topLevelObj5 transientObj5 trueObj5 tryObj5 typealiasObj5 typedefObj5 typeidObj5 typenameObj5 typeofObj5 uintObj5 ulongObj5 uncheckedObj5 undefinedObj5 unionObj5 unmarshalJSONObj5 unownedObj5 unsafeObj5 useSerializersObj5) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj5
         , Just $ "KSerializer" .= kSerializerObj5
@@ -5244,6 +5280,7 @@ instance ToJSON Obj5 where
         , Just $ "Type" .= obj5TypeObj5
         , Just $ "PrimitiveKind" .= primitiveKindObj5
         , Just $ "type" .= purpleTypeObj5
+        , Just $ "select" .= selectObj5
         , Just $ "Self" .= selfObj5
         , Just $ "Sendable" .= sendableObj5
         , Just $ "SerialDescriptor" .= serialDescriptorObj5
@@ -5280,6 +5317,7 @@ instance ToJSON Obj5 where
         , Just $ "TimeOnly" .= timeOnlyObj5
         , Just $ "TimeOnlyConverter" .= timeOnlyConverterObj5
         , Just $ "TimeZone" .= timeZoneObj5
+        , Just $ "to_dict" .= toDictObj5
         , Just $ "to_json" .= toJSONObj5
         , Just $ "toString" .= toStringObj5
         , Just $ "top_level" .= topLevelObj5
@@ -5296,11 +5334,10 @@ instance ToJSON Obj5 where
         , Just $ "unchecked" .= uncheckedObj5
         , Just $ "undefined" .= undefinedObj5
         , Just $ "union" .= unionObj5
+        , Just $ "UnmarshalJSON" .= unmarshalJSONObj5
         , Just $ "unowned" .= unownedObj5
         , Just $ "unsafe" .= unsafeObj5
-        , Just $ "unsigned" .= unsignedObj5
         , Just $ "UseSerializers" .= useSerializersObj5
-        , Just $ "ushort" .= ushortObj5
         ]
 
 instance FromJSON Obj5 where
@@ -5313,6 +5350,7 @@ instance FromJSON Obj5 where
         <*> v .: "Type"
         <*> v .: "PrimitiveKind"
         <*> v .: "type"
+        <*> v .: "select"
         <*> v .: "Self"
         <*> v .: "Sendable"
         <*> v .: "SerialDescriptor"
@@ -5349,6 +5387,7 @@ instance FromJSON Obj5 where
         <*> v .: "TimeOnly"
         <*> v .: "TimeOnlyConverter"
         <*> v .: "TimeZone"
+        <*> v .: "to_dict"
         <*> v .: "to_json"
         <*> v .: "toString"
         <*> v .: "top_level"
@@ -5365,11 +5404,10 @@ instance FromJSON Obj5 where
         <*> v .: "unchecked"
         <*> v .: "undefined"
         <*> v .: "union"
+        <*> v .: "UnmarshalJSON"
         <*> v .: "unowned"
         <*> v .: "unsafe"
-        <*> v .: "unsigned"
         <*> v .: "UseSerializers"
-        <*> v .: "ushort"
 
 instance ToJSON KSerializer where
     toJSON (KSerializer kSerializerKSerializer) =
@@ -5441,6 +5479,16 @@ instance FromJSON TypeClass where
     parseJSON (Object v) = TypeClass
         <$> v .: "type"
 
+instance ToJSON Select where
+    toJSON (Select selectSelect) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "select" .= selectSelect
+        ]
+
+instance FromJSON Select where
+    parseJSON (Object v) = Select
+        <$> v .: "select"
+
 instance ToJSON Self where
     toJSON (Self selfSelf) =
         object $ foldMap (maybe [] pure)
@@ -5801,6 +5849,16 @@ instance FromJSON TimeZone where
     parseJSON (Object v) = TimeZone
         <$> v .: "TimeZone"
 
+instance ToJSON ToDict where
+    toJSON (ToDict toDictToDict) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "to_dict" .= toDictToDict
+        ]
+
+instance FromJSON ToDict where
+    parseJSON (Object v) = ToDict
+        <$> v .: "to_dict"
+
 instance ToJSON ToJSONClass where
     toJSON (ToJSONClass toJSONToJSONClass) =
         object $ foldMap (maybe [] pure)
@@ -5961,6 +6019,16 @@ instance FromJSON Union where
     parseJSON (Object v) = Union
         <$> v .: "union"
 
+instance ToJSON UnmarshalJSON where
+    toJSON (UnmarshalJSON unmarshalJSONUnmarshalJSON) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "UnmarshalJSON" .= unmarshalJSONUnmarshalJSON
+        ]
+
+instance FromJSON UnmarshalJSON where
+    parseJSON (Object v) = UnmarshalJSON
+        <$> v .: "UnmarshalJSON"
+
 instance ToJSON Unowned where
     toJSON (Unowned unownedUnowned) =
         object $ foldMap (maybe [] pure)
@@ -5981,16 +6049,6 @@ instance FromJSON Unsafe where
     parseJSON (Object v) = Unsafe
         <$> v .: "unsafe"
 
-instance ToJSON Unsigned where
-    toJSON (Unsigned unsignedUnsigned) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "unsigned" .= unsignedUnsigned
-        ]
-
-instance FromJSON Unsigned where
-    parseJSON (Object v) = Unsigned
-        <$> v .: "unsigned"
-
 instance ToJSON UseSerializers where
     toJSON (UseSerializers useSerializersUseSerializers) =
         object $ foldMap (maybe [] pure)
@@ -6001,21 +6059,13 @@ instance FromJSON UseSerializers where
     parseJSON (Object v) = UseSerializers
         <$> v .: "UseSerializers"
 
-instance ToJSON Ushort where
-    toJSON (Ushort ushortUshort) =
-        object $ foldMap (maybe [] pure)
-        [ Just $ "ushort" .= ushortUshort
-        ]
-
-instance FromJSON Ushort where
-    parseJSON (Object v) = Ushort
-        <$> v .: "ushort"
-
 instance ToJSON Obj6 where
-    toJSON (Obj6 dummyObj6 obj6WhereObj6 usingObj6 utf8JSONReaderObj6 utf8JSONWriterObj6 uuidObj6 varObj6 virtualObj6 voidObj6 volatileObj6 wcharTObj6 weakObj6 whileObj6 willSetObj6 withObj6 xorObj6 xorEqObj6 yesObj6 yieldObj6) =
+    toJSON (Obj6 dummyObj6 obj6WhereObj6 unsignedObj6 ushortObj6 usingObj6 utf8JSONReaderObj6 utf8JSONWriterObj6 uuidObj6 varObj6 virtualObj6 voidObj6 volatileObj6 wcharTObj6 weakObj6 whileObj6 willSetObj6 withObj6 xorObj6 xorEqObj6 yesObj6 yieldObj6) =
         object $ foldMap (maybe [] pure)
         [ Just $ "dummy" .= dummyObj6
         , Just $ "where" .= obj6WhereObj6
+        , Just $ "unsigned" .= unsignedObj6
+        , Just $ "ushort" .= ushortObj6
         , Just $ "using" .= usingObj6
         , Just $ "Utf8JsonReader" .= utf8JSONReaderObj6
         , Just $ "Utf8JsonWriter" .= utf8JSONWriterObj6
@@ -6039,6 +6089,8 @@ instance FromJSON Obj6 where
     parseJSON (Object v) = Obj6
         <$> v .: "dummy"
         <*> v .: "where"
+        <*> v .: "unsigned"
+        <*> v .: "ushort"
         <*> v .: "using"
         <*> v .: "Utf8JsonReader"
         <*> v .: "Utf8JsonWriter"
@@ -6067,6 +6119,26 @@ instance FromJSON Where where
     parseJSON (Object v) = Where
         <$> v .: "where"
 
+instance ToJSON Unsigned where
+    toJSON (Unsigned unsignedUnsigned) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "unsigned" .= unsignedUnsigned
+        ]
+
+instance FromJSON Unsigned where
+    parseJSON (Object v) = Unsigned
+        <$> v .: "unsigned"
+
+instance ToJSON Ushort where
+    toJSON (Ushort ushortUshort) =
+        object $ foldMap (maybe [] pure)
+        [ Just $ "ushort" .= ushortUshort
+        ]
+
+instance FromJSON Ushort where
+    parseJSON (Object v) = Ushort
+        <$> v .: "ushort"
+
 instance ToJSON Using where
     toJSON (Using usingUsing) =
         object $ foldMap (maybe [] pure)
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..375eb92
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class FromDict {
+    private long fromDict;
+
+    @JsonProperty("from_dict")
+    public long getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(long value) { this.fromDict = value; }
+}
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..4e34ced
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class MarshalJSON {
+    private long marshalJSON;
+
+    @JsonProperty("MarshalJSON")
+    public long getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(long value) { this.marshalJSON = 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 cfe0a34..1713953 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
@@ -49,6 +49,7 @@ public class Obj2 {
     private FormatException formatException;
     private Friend friend;
     private From from;
+    private FromDict fromDict;
     private FromJSON fromJSON;
     private Func func;
     private Function function;
@@ -66,7 +67,6 @@ public class Obj2 {
     private Finally obj2Finally;
     private Float obj2Float;
     private For obj2For;
-    private Goto obj2Goto;
     private FalseClass purpleFalse;
 
     @JsonProperty("DateFormatter")
@@ -299,6 +299,11 @@ public class Obj2 {
     @JsonProperty("from")
     public void setFrom(From value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public FromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(FromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public FromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -384,11 +389,6 @@ public class Obj2 {
     @JsonProperty("for")
     public void setObj2For(For value) { this.obj2For = value; }
 
-    @JsonProperty("goto")
-    public Goto getObj2Goto() { return obj2Goto; }
-    @JsonProperty("goto")
-    public void setObj2Goto(Goto value) { this.obj2Goto = value; }
-
     @JsonProperty("false")
     public FalseClass getPurpleFalse() { return purpleFalse; }
     @JsonProperty("false")
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 1edbb6b..e49f07b 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
@@ -50,6 +50,7 @@ public class Obj3 {
     private Lock lock;
     private MapClass map;
     private MapEntry mapEntry;
+    private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
     private Mutable mutable;
@@ -58,7 +59,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
-    private Noexcept noexcept;
+    private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
     private Import obj3Import;
@@ -304,6 +305,11 @@ public class Obj3 {
     @JsonProperty("MapEntry")
     public void setMapEntry(MapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public MarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(MarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public MetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -344,10 +350,10 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
-    @JsonProperty("noexcept")
-    public Noexcept getNoexcept() { return noexcept; }
-    @JsonProperty("noexcept")
-    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+    @JsonProperty("goto")
+    public Goto getObj3Goto() { return obj3Goto; }
+    @JsonProperty("goto")
+    public void setObj3Goto(Goto value) { this.obj3Goto = value; }
 
     @JsonProperty("if")
     public If getObj3If() { return obj3If; }
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 6003abf..5042a3c 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
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.*;
 public class Obj4 {
     private long dummy;
     private NoSuchMethod noSuchMethod;
+    private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
     private Nonlocal nonlocal;
@@ -67,7 +68,6 @@ public class Obj4 {
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
-    private Select select;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -79,6 +79,11 @@ public class Obj4 {
     @JsonProperty("noSuchMethod")
     public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
 
+    @JsonProperty("noexcept")
+    public Noexcept getNoexcept() { return noexcept; }
+    @JsonProperty("noexcept")
+    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+
     @JsonProperty("nonatomic")
     public Nonatomic getNonatomic() { return nonatomic; }
     @JsonProperty("nonatomic")
@@ -388,9 +393,4 @@ public class Obj4 {
     public Sel getSel() { return sel; }
     @JsonProperty("SEL")
     public void setSel(Sel value) { this.sel = value; }
-
-    @JsonProperty("select")
-    public Select getSelect() { return select; }
-    @JsonProperty("select")
-    public void setSelect(Select value) { this.select = value; }
 }
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 7bbcb6c..5539fb2 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -21,6 +21,7 @@ public class Obj5 {
     private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Select select;
     private Self self;
     private Sendable sendable;
     private SerialDescriptor serialDescriptor;
@@ -49,6 +50,7 @@ public class Obj5 {
     private TimeOnly timeOnly;
     private TimeOnlyConverter timeOnlyConverter;
     private TimeZone timeZone;
+    private ToDict toDict;
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
@@ -63,11 +65,10 @@ public class Obj5 {
     private Unchecked unchecked;
     private Undefined undefined;
     private Union union;
+    private UnmarshalJSON unmarshalJSON;
     private Unowned unowned;
     private Unsafe unsafe;
-    private Unsigned unsigned;
     private UseSerializers useSerializers;
-    private Ushort ushort;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -159,6 +160,11 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("select")
+    public Select getSelect() { return select; }
+    @JsonProperty("select")
+    public void setSelect(Select value) { this.select = value; }
+
     @JsonProperty("Self")
     public Self getSelf() { return self; }
     @JsonProperty("Self")
@@ -299,6 +305,11 @@ public class Obj5 {
     @JsonProperty("TimeZone")
     public void setTimeZone(TimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public ToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(ToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public ToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -369,6 +380,11 @@ public class Obj5 {
     @JsonProperty("union")
     public void setUnion(Union value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public Unowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
@@ -379,18 +395,8 @@ public class Obj5 {
     @JsonProperty("unsafe")
     public void setUnsafe(Unsafe value) { this.unsafe = value; }
 
-    @JsonProperty("unsigned")
-    public Unsigned getUnsigned() { return unsigned; }
-    @JsonProperty("unsigned")
-    public void setUnsigned(Unsigned value) { this.unsigned = value; }
-
     @JsonProperty("UseSerializers")
     public UseSerializers getUseSerializers() { return useSerializers; }
     @JsonProperty("UseSerializers")
     public void setUseSerializers(UseSerializers value) { this.useSerializers = value; }
-
-    @JsonProperty("ushort")
-    public Ushort getUshort() { return ushort; }
-    @JsonProperty("ushort")
-    public void setUshort(Ushort value) { this.ushort = value; }
 }
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index cf660b9..6b9909d 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -7,6 +7,8 @@ public class Obj6 {
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Unsigned unsigned;
+    private Ushort ushort;
     private Using using;
     private Utf8JSONReader utf8JSONReader;
     private Utf8JSONWriter utf8JSONWriter;
@@ -43,6 +45,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("unsigned")
+    public Unsigned getUnsigned() { return unsigned; }
+    @JsonProperty("unsigned")
+    public void setUnsigned(Unsigned value) { this.unsigned = value; }
+
+    @JsonProperty("ushort")
+    public Ushort getUshort() { return ushort; }
+    @JsonProperty("ushort")
+    public void setUshort(Ushort value) { this.ushort = value; }
+
     @JsonProperty("using")
     public Using getUsing() { return using; }
     @JsonProperty("using")
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..036595d
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToDict {
+    private long toDict;
+
+    @JsonProperty("to_dict")
+    public long getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(long value) { this.toDict = value; }
+}
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..b7a7427
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class UnmarshalJSON {
+    private long unmarshalJSON;
+
+    @JsonProperty("UnmarshalJSON")
+    public long getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(long value) { this.unmarshalJSON = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..375eb92
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class FromDict {
+    private long fromDict;
+
+    @JsonProperty("from_dict")
+    public long getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(long value) { this.fromDict = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..4e34ced
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class MarshalJSON {
+    private long marshalJSON;
+
+    @JsonProperty("MarshalJSON")
+    public long getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(long value) { this.marshalJSON = 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 cfe0a34..1713953 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
@@ -49,6 +49,7 @@ public class Obj2 {
     private FormatException formatException;
     private Friend friend;
     private From from;
+    private FromDict fromDict;
     private FromJSON fromJSON;
     private Func func;
     private Function function;
@@ -66,7 +67,6 @@ public class Obj2 {
     private Finally obj2Finally;
     private Float obj2Float;
     private For obj2For;
-    private Goto obj2Goto;
     private FalseClass purpleFalse;
 
     @JsonProperty("DateFormatter")
@@ -299,6 +299,11 @@ public class Obj2 {
     @JsonProperty("from")
     public void setFrom(From value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public FromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(FromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public FromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -384,11 +389,6 @@ public class Obj2 {
     @JsonProperty("for")
     public void setObj2For(For value) { this.obj2For = value; }
 
-    @JsonProperty("goto")
-    public Goto getObj2Goto() { return obj2Goto; }
-    @JsonProperty("goto")
-    public void setObj2Goto(Goto value) { this.obj2Goto = value; }
-
     @JsonProperty("false")
     public FalseClass getPurpleFalse() { return purpleFalse; }
     @JsonProperty("false")
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 1edbb6b..e49f07b 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
@@ -50,6 +50,7 @@ public class Obj3 {
     private Lock lock;
     private MapClass map;
     private MapEntry mapEntry;
+    private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
     private Mutable mutable;
@@ -58,7 +59,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
-    private Noexcept noexcept;
+    private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
     private Import obj3Import;
@@ -304,6 +305,11 @@ public class Obj3 {
     @JsonProperty("MapEntry")
     public void setMapEntry(MapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public MarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(MarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public MetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -344,10 +350,10 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
-    @JsonProperty("noexcept")
-    public Noexcept getNoexcept() { return noexcept; }
-    @JsonProperty("noexcept")
-    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+    @JsonProperty("goto")
+    public Goto getObj3Goto() { return obj3Goto; }
+    @JsonProperty("goto")
+    public void setObj3Goto(Goto value) { this.obj3Goto = value; }
 
     @JsonProperty("if")
     public If getObj3If() { return obj3If; }
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 6003abf..5042a3c 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
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.*;
 public class Obj4 {
     private long dummy;
     private NoSuchMethod noSuchMethod;
+    private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
     private Nonlocal nonlocal;
@@ -67,7 +68,6 @@ public class Obj4 {
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
-    private Select select;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -79,6 +79,11 @@ public class Obj4 {
     @JsonProperty("noSuchMethod")
     public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
 
+    @JsonProperty("noexcept")
+    public Noexcept getNoexcept() { return noexcept; }
+    @JsonProperty("noexcept")
+    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+
     @JsonProperty("nonatomic")
     public Nonatomic getNonatomic() { return nonatomic; }
     @JsonProperty("nonatomic")
@@ -388,9 +393,4 @@ public class Obj4 {
     public Sel getSel() { return sel; }
     @JsonProperty("SEL")
     public void setSel(Sel value) { this.sel = value; }
-
-    @JsonProperty("select")
-    public Select getSelect() { return select; }
-    @JsonProperty("select")
-    public void setSelect(Select value) { this.select = value; }
 }
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 7bbcb6c..5539fb2 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -21,6 +21,7 @@ public class Obj5 {
     private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Select select;
     private Self self;
     private Sendable sendable;
     private SerialDescriptor serialDescriptor;
@@ -49,6 +50,7 @@ public class Obj5 {
     private TimeOnly timeOnly;
     private TimeOnlyConverter timeOnlyConverter;
     private TimeZone timeZone;
+    private ToDict toDict;
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
@@ -63,11 +65,10 @@ public class Obj5 {
     private Unchecked unchecked;
     private Undefined undefined;
     private Union union;
+    private UnmarshalJSON unmarshalJSON;
     private Unowned unowned;
     private Unsafe unsafe;
-    private Unsigned unsigned;
     private UseSerializers useSerializers;
-    private Ushort ushort;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -159,6 +160,11 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("select")
+    public Select getSelect() { return select; }
+    @JsonProperty("select")
+    public void setSelect(Select value) { this.select = value; }
+
     @JsonProperty("Self")
     public Self getSelf() { return self; }
     @JsonProperty("Self")
@@ -299,6 +305,11 @@ public class Obj5 {
     @JsonProperty("TimeZone")
     public void setTimeZone(TimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public ToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(ToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public ToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -369,6 +380,11 @@ public class Obj5 {
     @JsonProperty("union")
     public void setUnion(Union value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public Unowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
@@ -379,18 +395,8 @@ public class Obj5 {
     @JsonProperty("unsafe")
     public void setUnsafe(Unsafe value) { this.unsafe = value; }
 
-    @JsonProperty("unsigned")
-    public Unsigned getUnsigned() { return unsigned; }
-    @JsonProperty("unsigned")
-    public void setUnsigned(Unsigned value) { this.unsigned = value; }
-
     @JsonProperty("UseSerializers")
     public UseSerializers getUseSerializers() { return useSerializers; }
     @JsonProperty("UseSerializers")
     public void setUseSerializers(UseSerializers value) { this.useSerializers = value; }
-
-    @JsonProperty("ushort")
-    public Ushort getUshort() { return ushort; }
-    @JsonProperty("ushort")
-    public void setUshort(Ushort value) { this.ushort = value; }
 }
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index cf660b9..6b9909d 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -7,6 +7,8 @@ public class Obj6 {
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Unsigned unsigned;
+    private Ushort ushort;
     private Using using;
     private Utf8JSONReader utf8JSONReader;
     private Utf8JSONWriter utf8JSONWriter;
@@ -43,6 +45,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("unsigned")
+    public Unsigned getUnsigned() { return unsigned; }
+    @JsonProperty("unsigned")
+    public void setUnsigned(Unsigned value) { this.unsigned = value; }
+
+    @JsonProperty("ushort")
+    public Ushort getUshort() { return ushort; }
+    @JsonProperty("ushort")
+    public void setUshort(Ushort value) { this.ushort = value; }
+
     @JsonProperty("using")
     public Using getUsing() { return using; }
     @JsonProperty("using")
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..036595d
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToDict {
+    private long toDict;
+
+    @JsonProperty("to_dict")
+    public long getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(long value) { this.toDict = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..b7a7427
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class UnmarshalJSON {
+    private long unmarshalJSON;
+
+    @JsonProperty("UnmarshalJSON")
+    public long getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(long value) { this.unmarshalJSON = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..375eb92
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class FromDict {
+    private long fromDict;
+
+    @JsonProperty("from_dict")
+    public long getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(long value) { this.fromDict = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..4e34ced
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class MarshalJSON {
+    private long marshalJSON;
+
+    @JsonProperty("MarshalJSON")
+    public long getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(long value) { this.marshalJSON = 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 cfe0a34..1713953 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
@@ -49,6 +49,7 @@ public class Obj2 {
     private FormatException formatException;
     private Friend friend;
     private From from;
+    private FromDict fromDict;
     private FromJSON fromJSON;
     private Func func;
     private Function function;
@@ -66,7 +67,6 @@ public class Obj2 {
     private Finally obj2Finally;
     private Float obj2Float;
     private For obj2For;
-    private Goto obj2Goto;
     private FalseClass purpleFalse;
 
     @JsonProperty("DateFormatter")
@@ -299,6 +299,11 @@ public class Obj2 {
     @JsonProperty("from")
     public void setFrom(From value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public FromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(FromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public FromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -384,11 +389,6 @@ public class Obj2 {
     @JsonProperty("for")
     public void setObj2For(For value) { this.obj2For = value; }
 
-    @JsonProperty("goto")
-    public Goto getObj2Goto() { return obj2Goto; }
-    @JsonProperty("goto")
-    public void setObj2Goto(Goto value) { this.obj2Goto = value; }
-
     @JsonProperty("false")
     public FalseClass getPurpleFalse() { return purpleFalse; }
     @JsonProperty("false")
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 1edbb6b..e49f07b 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
@@ -50,6 +50,7 @@ public class Obj3 {
     private Lock lock;
     private MapClass map;
     private MapEntry mapEntry;
+    private MarshalJSON marshalJSON;
     private MetadataPropertyHandling metadataPropertyHandling;
     private Module module;
     private Mutable mutable;
@@ -58,7 +59,7 @@ public class Obj3 {
     private Newtonsoft newtonsoft;
     private Nil nil;
     private No no;
-    private Noexcept noexcept;
+    private Goto obj3Goto;
     private If obj3If;
     private Implements obj3Implements;
     private Import obj3Import;
@@ -304,6 +305,11 @@ public class Obj3 {
     @JsonProperty("MapEntry")
     public void setMapEntry(MapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public MarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(MarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public MetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -344,10 +350,10 @@ public class Obj3 {
     @JsonProperty("NO")
     public void setNo(No value) { this.no = value; }
 
-    @JsonProperty("noexcept")
-    public Noexcept getNoexcept() { return noexcept; }
-    @JsonProperty("noexcept")
-    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+    @JsonProperty("goto")
+    public Goto getObj3Goto() { return obj3Goto; }
+    @JsonProperty("goto")
+    public void setObj3Goto(Goto value) { this.obj3Goto = value; }
 
     @JsonProperty("if")
     public If getObj3If() { return obj3If; }
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 6003abf..5042a3c 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
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.*;
 public class Obj4 {
     private long dummy;
     private NoSuchMethod noSuchMethod;
+    private Noexcept noexcept;
     private Nonatomic nonatomic;
     private NoneClass none;
     private Nonlocal nonlocal;
@@ -67,7 +68,6 @@ public class Obj4 {
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
-    private Select select;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -79,6 +79,11 @@ public class Obj4 {
     @JsonProperty("noSuchMethod")
     public void setNoSuchMethod(NoSuchMethod value) { this.noSuchMethod = value; }
 
+    @JsonProperty("noexcept")
+    public Noexcept getNoexcept() { return noexcept; }
+    @JsonProperty("noexcept")
+    public void setNoexcept(Noexcept value) { this.noexcept = value; }
+
     @JsonProperty("nonatomic")
     public Nonatomic getNonatomic() { return nonatomic; }
     @JsonProperty("nonatomic")
@@ -388,9 +393,4 @@ public class Obj4 {
     public Sel getSel() { return sel; }
     @JsonProperty("SEL")
     public void setSel(Sel value) { this.sel = value; }
-
-    @JsonProperty("select")
-    public Select getSelect() { return select; }
-    @JsonProperty("select")
-    public void setSelect(Select value) { this.select = value; }
 }
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
index 7bbcb6c..5539fb2 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj5.java
@@ -21,6 +21,7 @@ public class Obj5 {
     private TypeClass obj5Type;
     private PrimitiveKind primitiveKind;
     private TrueClass purpleTrue;
+    private Select select;
     private Self self;
     private Sendable sendable;
     private SerialDescriptor serialDescriptor;
@@ -49,6 +50,7 @@ public class Obj5 {
     private TimeOnly timeOnly;
     private TimeOnlyConverter timeOnlyConverter;
     private TimeZone timeZone;
+    private ToDict toDict;
     private ToJSON toJSON;
     private ToString toString;
     private TopLevelClass topLevel;
@@ -63,11 +65,10 @@ public class Obj5 {
     private Unchecked unchecked;
     private Undefined undefined;
     private Union union;
+    private UnmarshalJSON unmarshalJSON;
     private Unowned unowned;
     private Unsafe unsafe;
-    private Unsigned unsigned;
     private UseSerializers useSerializers;
-    private Ushort ushort;
 
     @JsonProperty("dummy")
     public long getDummy() { return dummy; }
@@ -159,6 +160,11 @@ public class Obj5 {
     @JsonProperty("true")
     public void setPurpleTrue(TrueClass value) { this.purpleTrue = value; }
 
+    @JsonProperty("select")
+    public Select getSelect() { return select; }
+    @JsonProperty("select")
+    public void setSelect(Select value) { this.select = value; }
+
     @JsonProperty("Self")
     public Self getSelf() { return self; }
     @JsonProperty("Self")
@@ -299,6 +305,11 @@ public class Obj5 {
     @JsonProperty("TimeZone")
     public void setTimeZone(TimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public ToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(ToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public ToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -369,6 +380,11 @@ public class Obj5 {
     @JsonProperty("union")
     public void setUnion(Union value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public Unowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
@@ -379,18 +395,8 @@ public class Obj5 {
     @JsonProperty("unsafe")
     public void setUnsafe(Unsafe value) { this.unsafe = value; }
 
-    @JsonProperty("unsigned")
-    public Unsigned getUnsigned() { return unsigned; }
-    @JsonProperty("unsigned")
-    public void setUnsigned(Unsigned value) { this.unsigned = value; }
-
     @JsonProperty("UseSerializers")
     public UseSerializers getUseSerializers() { return useSerializers; }
     @JsonProperty("UseSerializers")
     public void setUseSerializers(UseSerializers value) { this.useSerializers = value; }
-
-    @JsonProperty("ushort")
-    public Ushort getUshort() { return ushort; }
-    @JsonProperty("ushort")
-    public void setUshort(Ushort value) { this.ushort = value; }
 }
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
index cf660b9..6b9909d 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj6.java
@@ -7,6 +7,8 @@ public class Obj6 {
     private Void obj6Void;
     private Volatile obj6Volatile;
     private While obj6While;
+    private Unsigned unsigned;
+    private Ushort ushort;
     private Using using;
     private Utf8JSONReader utf8JSONReader;
     private Utf8JSONWriter utf8JSONWriter;
@@ -43,6 +45,16 @@ public class Obj6 {
     @JsonProperty("while")
     public void setObj6While(While value) { this.obj6While = value; }
 
+    @JsonProperty("unsigned")
+    public Unsigned getUnsigned() { return unsigned; }
+    @JsonProperty("unsigned")
+    public void setUnsigned(Unsigned value) { this.unsigned = value; }
+
+    @JsonProperty("ushort")
+    public Ushort getUshort() { return ushort; }
+    @JsonProperty("ushort")
+    public void setUshort(Ushort value) { this.ushort = value; }
+
     @JsonProperty("using")
     public Using getUsing() { return using; }
     @JsonProperty("using")
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..036595d
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class ToDict {
+    private long toDict;
+
+    @JsonProperty("to_dict")
+    public long getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(long value) { this.toDict = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..b7a7427
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class UnmarshalJSON {
+    private long unmarshalJSON;
+
+    @JsonProperty("UnmarshalJSON")
+    public long getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(long value) { this.unmarshalJSON = value; }
+}
diff --git a/base/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
index 7bde2a3..a0d11c8 100644
--- a/base/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
index e58994e..8e48e5e 100644
--- a/base/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
index b031cf3..fb642f7 100644
--- a/base/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
index 4ed3634..c9e01ac 100644
--- a/base/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
index ae8169d..79cbb0a 100644
--- a/base/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
index 8c10240..3eba7b9 100644
--- a/base/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
index d23e2d7..eb82c03 100644
--- a/base/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
index cc5cbe0..8000c5f 100644
--- a/base/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
index 874e0da..49aad5c 100644
--- a/base/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
index 3b6f02b..28ede7a 100644
--- a/base/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
index 4921f33..dc4294c 100644
--- a/base/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
index d74c94d..c741d40 100644
--- a/base/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
index c350529..24f3782 100644
--- a/base/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
index 0f11bea..12ba177 100644
--- a/base/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
index 988b2e3..b56d621 100644
--- a/base/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
index 5029be5..72c9c86 100644
--- a/base/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
index 1804248..00b4f10 100644
--- a/base/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
index 5d15cc8..c4cc35e 100644
--- a/base/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
index 351e84a..3f2aa62 100644
--- a/base/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
index 8192aa5..47aaa20 100644
--- a/base/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
index 6a33ed2..81402e2 100644
--- a/base/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
index fdbfeea..ab64fd6 100644
--- a/base/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
index ca1a4e9..e4ca4cb 100644
--- a/base/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
index 9ef5a1a..b502e49 100644
--- a/base/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
index 06e876f..be03980 100644
--- a/base/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
index a46f0c7..ff1703e 100644
--- a/base/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
index dabaf9d..04b2a37 100644
--- a/base/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
index 5fc4099..e4ba9bb 100644
--- a/base/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
index d0130c4..468f73b 100644
--- a/base/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
index 59f34aa..8574865 100644
--- a/base/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
index 6f852a2..d7f5885 100644
--- a/base/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
index 68c9784..c2906b6 100644
--- a/base/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
index 6d3e524..7def82c 100644
--- a/base/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
index f70dc0b..9d11a02 100644
--- a/base/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
index 5fc3e3b..09afdf9 100644
--- a/base/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
index 351e84a..3f2aa62 100644
--- a/base/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
index b6b4271..9407f27 100644
--- a/base/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
index e80c8de..67e2770 100644
--- a/base/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
index 0c1fbce..bb05c0f 100644
--- a/base/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
index 4e4bfd1..ff817c6 100644
--- a/base/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
index 0899bf9..2785ed7 100644
--- a/base/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
index 405a535..1b32e84 100644
--- a/base/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
index e8d6e16..339cca8 100644
--- a/base/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
index 8f17e68..383e402 100644
--- a/base/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
index d676c8d..8fa6866 100644
--- a/base/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
index 6ecbade..14b561c 100644
--- a/base/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
index f49ab65..81624a8 100644
--- a/base/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
index 69bd742..3ce68b1 100644
--- a/base/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
index c7de983..b06641f 100644
--- a/base/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
index 5747bf4..5f3d0a5 100644
--- a/base/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
index 6b45478..1d77f00 100644
--- a/base/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
index c893589..ccdfbc7 100644
--- a/base/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
index 8cc7071..ba08d4f 100644
--- a/base/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
index 0e491bb..0013ca4 100644
--- a/base/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
index 787e7f9..b3178f9 100644
--- a/base/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
index bcdf20d..e617e3a 100644
--- a/base/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
index c65a864..c893c70 100644
--- a/base/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
index 7d4472c..426f04a 100644
--- a/base/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
index 2dd7df3..aaa9476 100644
--- a/base/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
index c3f9405..414c291 100644
--- a/base/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
index 177fff6..f84b686 100644
--- a/base/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
index ad4ed63..9bf79a3 100644
--- a/base/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
index 2ba2912..2e83e9f 100644
--- a/base/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
index 4989112..9f7ff61 100644
--- a/base/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
index 5a22b1c..f37c66d 100644
--- a/base/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
index 03269ce..82a8118 100644
--- a/base/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
index 6bca24b..8000931 100644
--- a/base/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
index e7036f9..34b371b 100644
--- a/base/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
index 59da7ef..368c983 100644
--- a/base/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
index fb2baf4..5186f05 100644
--- a/base/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
index 47fd602..8a23010 100644
--- a/base/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
index f4e553d..fb4c941 100644
--- a/base/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
index b2fbeb7..bdfbe08 100644
--- a/base/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
index a623356..bc7841f 100644
--- a/base/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
index b655f68..258fa04 100644
--- a/base/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
index 94ebbc9..97749e4 100644
--- a/base/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
index 865f78d..c8d3bbd 100644
--- a/base/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
index 4cbbdc6..d67cfb6 100644
--- a/base/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
index 47ca086..b9cce95 100644
--- a/base/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
index 0f11bea..12ba177 100644
--- a/base/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
index 58067a6..07ffaa4 100644
--- a/base/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
index a469f40..f755f0a 100644
--- a/base/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
index 61c13f0..e7b1820 100644
--- a/base/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
index c92e808..9f6f40f 100644
--- a/base/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
index b614cc0..e607419 100644
--- a/base/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
index f1717c7..f7755ad 100644
--- a/base/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
index 23847ff..76a5e10 100644
--- a/base/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
index 438a6fc..592fdbf 100644
--- a/base/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
index 2c286be..9e9d9eb 100644
--- a/base/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
index ef2d6e9..d6ef2d0 100644
--- a/base/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
index ae17f28..aa73f8e 100644
--- a/base/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
index c408c01..9af3182 100644
--- a/base/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
index 150dfff..73c0c0d 100644
--- a/base/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
index 7ed503d..65866fa 100644
--- a/base/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
index 97e4dd1..cbbe822 100644
--- a/base/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
index b5bc8f9..a22c659 100644
--- a/base/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
index a8a2cb9..1c3c149 100644
--- a/base/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
index e5a1acd..bd04ff0 100644
--- a/base/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
index ab0231f..87d2f58 100644
--- a/base/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
index 3290a2f..8a7c348 100644
--- a/base/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
index 3290a2f..8a7c348 100644
--- a/base/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
index a1a1ab7..28efc8f 100644
--- a/base/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
index acd1fb9..5f0166c 100644
--- a/base/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
index 0985cf4..ba2b40d 100644
--- a/base/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
index fd7fefa..73a1ab0 100644
--- a/base/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
index 0859361..8630f66 100644
--- a/base/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
index fa10af3..bce9162 100644
--- a/base/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
index ec39a74..99b31a8 100644
--- a/base/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
index 988b2e3..b56d621 100644
--- a/base/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
index cfb13df..4906de7 100644
--- a/base/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
index 12ecaff..98fe333 100644
--- a/base/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
index e7d55b9..659d4bb 100644
--- a/base/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
index b2fbeb7..bdfbe08 100644
--- a/base/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
index 5072650..c5fd155 100644
--- a/base/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
index 2c60e6b..ee8675e 100644
--- a/base/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
index 580e744..0249c78 100644
--- a/base/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
index 2df6837..70985ce 100644
--- a/base/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
index 22fb238..93b54f7 100644
--- a/base/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
index 984006a..f406ca7 100644
--- a/base/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
index e17f74c..8a22a06 100644
--- a/base/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
index d23e2d7..eb82c03 100644
--- a/base/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
index 02c4dcf..51d565f 100644
--- a/base/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
index 4db6c3c..25843f3 100644
--- a/base/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
index 439166c..58c7287 100644
--- a/base/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
index 6c8f4c3..1adc210 100644
--- a/base/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
index c6916a2..89a9613 100644
--- a/base/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
index 4b2fe59..66b493e 100644
--- a/base/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
index 0e23edd..3037dc1 100644
--- a/base/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
index 076984a..887407d 100644
--- a/base/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
index bd2794c..58262a2 100644
--- a/base/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
index cabd493..04ecdb7 100644
--- a/base/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
index c113e96..86a658c 100644
--- a/base/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
index c6b3420..f892b12 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
index c6b3420..f892b12 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.js
index e220990..330fc81 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 957f00f..26e1699 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
index 8de8df6..ffb5ba9 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
index 8de8df6..ffb5ba9 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.js
index 2362827..d333075 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index fbb3c93..e64d8d3 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
index 7bdc1a8..cfa572b 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
index 7bdc1a8..cfa572b 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.js
index 0fc1b77..547f01c 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index d88ee80..8605361 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
index 9098e52..6dac0d3 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
index 9098e52..6dac0d3 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.js
index 84b4eb4..8eaeaa8 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 60a61ff..2146b4e 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
index 7db1140..9688d0a 100644
--- a/base/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
index 25bdd46..f7c64d7 100644
--- a/base/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
index 2805dbb..fc7d818 100644
--- a/base/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
index 24aedef..e8bf98a 100644
--- a/base/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
index 601b357..f901377 100644
--- a/base/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
index 9515706..42e24b8 100644
--- a/base/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 8fc75d9..b99adb4 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
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -520,13 +520,13 @@ const typeMap = {
         { json: "foreach", js: "foreach", typ: r("Foreach") },
         { json: "friend", js: "friend", typ: r("Friend") },
         { json: "from", js: "from", typ: r("From") },
+        { json: "from_dict", js: "from_dict", typ: r("FromDict") },
         { json: "from_json", js: "from_json", typ: r("FromJSON") },
         { json: "func", js: "func", typ: r("Func") },
         { json: "function", js: "function", typ: r("Function") },
         { json: "get", js: "get", typ: r("Get") },
         { json: "global", js: "global", typ: r("Global") },
         { json: "go", js: "go", typ: r("Go") },
-        { json: "goto", js: "goto", typ: r("Goto") },
     ], false),
     "DateFormatter": o([
         { json: "DateFormatter", js: "DateFormatter", typ: i(0) },
@@ -699,6 +699,9 @@ const typeMap = {
     "From": o([
         { json: "from", js: "from", typ: i(0) },
     ], false),
+    "FromDict": o([
+        { json: "from_dict", js: "from_dict", typ: i(0) },
+    ], false),
     "FromJSON": o([
         { json: "from_json", js: "from_json", typ: i(0) },
     ], false),
@@ -717,9 +720,6 @@ const typeMap = {
     "Go": o([
         { json: "go", js: "go", typ: i(0) },
     ], false),
-    "Goto": o([
-        { json: "goto", js: "goto", typ: i(0) },
-    ], false),
     "Obj3": o([
         { json: "Hashable", js: "Hashable", typ: r("Hashable") },
         { json: "Hasher", js: "Hasher", typ: r("Hasher") },
@@ -738,8 +738,10 @@ const typeMap = {
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: r("MarshalJSON") },
         { json: "NO", js: "NO", typ: r("No") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { 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") },
@@ -785,7 +787,6 @@ const typeMap = {
         { json: "new", js: "new", typ: r("New") },
         { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
         { json: "nil", js: "nil", typ: r("Nil") },
-        { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -838,9 +839,15 @@ const typeMap = {
     "MapEntry": o([
         { json: "MapEntry", js: "MapEntry", typ: i(0) },
     ], false),
+    "MarshalJSON": o([
+        { json: "MarshalJSON", js: "MarshalJSON", typ: i(0) },
+    ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
     ], false),
+    "Goto": o([
+        { json: "goto", js: "goto", typ: i(0) },
+    ], false),
     "Guard": o([
         { json: "guard", js: "guard", typ: i(0) },
     ], false),
@@ -976,9 +983,6 @@ const typeMap = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
-    "Noexcept": o([
-        { json: "noexcept", js: "noexcept", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NSError", js: "NSError", typ: r("NSError") },
         { json: "NSObject", js: "NSObject", typ: r("NSObject") },
@@ -991,6 +995,7 @@ const typeMap = {
         { json: "SEL", js: "SEL", typ: r("Sel") },
         { json: "dummy", js: "dummy", typ: i(0) },
         { 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") },
         { json: "nonlocal", js: "nonlocal", typ: r("Nonlocal") },
@@ -1044,7 +1049,6 @@ const typeMap = {
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
-        { json: "select", js: "select", typ: r("Select") },
     ], false),
     "NSError": o([
         { json: "NSError", js: "NSError", typ: i(0) },
@@ -1076,6 +1080,9 @@ const typeMap = {
     "NoSuchMethod": o([
         { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
     ], false),
+    "Noexcept": o([
+        { json: "noexcept", js: "noexcept", typ: i(0) },
+    ], false),
     "Nonatomic": o([
         { json: "nonatomic", js: "nonatomic", typ: i(0) },
     ], false),
@@ -1235,9 +1242,6 @@ const typeMap = {
     "Sealed": o([
         { json: "sealed", js: "sealed", typ: i(0) },
     ], false),
-    "Select": o([
-        { json: "select", js: "select", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -1256,8 +1260,10 @@ const typeMap = {
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
         { json: "Type", js: "Type", typ: r("Type") },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "select", js: "select", typ: r("Select") },
         { json: "self", js: "self", typ: r("SelfClass") },
         { json: "serialize", js: "serialize", typ: r("Serialize") },
         { json: "set", js: "set", typ: r("Set") },
@@ -1284,6 +1290,7 @@ const typeMap = {
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
         { json: "toString", js: "toString", typ: r("ToString") },
+        { json: "to_dict", js: "to_dict", typ: r("ToDict") },
         { 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") },
@@ -1302,8 +1309,6 @@ const typeMap = {
         { json: "union", js: "union", typ: r("Union") },
         { json: "unowned", js: "unowned", typ: r("Unowned") },
         { json: "unsafe", js: "unsafe", typ: r("Unsafe") },
-        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
-        { json: "ushort", js: "ushort", typ: r("Ushort") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -1356,9 +1361,15 @@ const typeMap = {
     "Type": o([
         { json: "Type", js: "Type", typ: i(0) },
     ], false),
+    "UnmarshalJSON": o([
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: i(0) },
+    ], false),
     "UseSerializers": o([
         { json: "UseSerializers", js: "UseSerializers", typ: i(0) },
     ], false),
+    "Select": o([
+        { json: "select", js: "select", typ: i(0) },
+    ], false),
     "SelfClass": o([
         { json: "self", js: "self", typ: i(0) },
     ], false),
@@ -1437,6 +1448,9 @@ const typeMap = {
     "ToString": o([
         { json: "toString", js: "toString", typ: i(0) },
     ], false),
+    "ToDict": o([
+        { json: "to_dict", js: "to_dict", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
@@ -1491,18 +1505,14 @@ const typeMap = {
     "Unsafe": o([
         { json: "unsafe", js: "unsafe", typ: i(0) },
     ], false),
-    "Unsigned": o([
-        { json: "unsigned", js: "unsigned", typ: i(0) },
-    ], false),
-    "Ushort": o([
-        { json: "ushort", js: "ushort", typ: i(0) },
-    ], false),
     "Obj6": o([
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "Utf8JsonReader", js: "Utf8JsonReader", typ: r("Utf8JSONReader") },
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
+        { json: "ushort", js: "ushort", typ: r("Ushort") },
         { json: "using", js: "using", typ: r("Using") },
         { json: "var", js: "var", typ: r("Var") },
         { json: "virtual", js: "virtual", typ: r("Virtual") },
@@ -1530,6 +1540,12 @@ const typeMap = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Unsigned": o([
+        { json: "unsigned", js: "unsigned", typ: i(0) },
+    ], false),
+    "Ushort": o([
+        { json: "ushort", js: "ushort", typ: i(0) },
+    ], false),
     "Using": o([
         { json: "using", js: "using", typ: i(0) },
     ], false),
diff --git a/base/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
index afd8b5b..6210480 100644
--- a/base/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/list.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
index 279b16f..2cbdd2e 100644
--- a/base/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
index 1f13def..c65bbc6 100644
--- a/base/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
index 6a9855b..8ba7b16 100644
--- a/base/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js b/head/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
index d14ecfb..90ee03d 100644
--- a/base/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
index d14ecfb..90ee03d 100644
--- a/base/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
index 38e3295..6f70d45 100644
--- a/base/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
index c52af80..fb1129f 100644
--- a/base/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
index f67e389..61cf3f7 100644
--- a/base/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
index 43380a8..b409f95 100644
--- a/base/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
index 2287ca4..a7755cf 100644
--- a/base/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
index 555bab5..4c6d0d3 100644
--- a/base/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
index 6cdb09a..a5d7c6e 100644
--- a/base/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
index ebdf80c..42d2ced 100644
--- a/base/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
index 1ecd528..09ba027 100644
--- a/base/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
index f541287..7392567 100644
--- a/base/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
index 5686cad..87c9c8f 100644
--- a/base/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/url.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
index eddd54c..6ac4f49 100644
--- a/base/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
index a8baed6..9850f5a 100644
--- a/base/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
index 22fb238..93b54f7 100644
--- a/base/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
index 744997a..3c658f1 100644
--- a/base/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
index 6286f9a..f3e645b 100644
--- a/base/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
index 8cdad8e..ea16d1c 100644
--- a/base/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
index 482996b..f9191aa 100644
--- a/base/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
index 561f080..5530bdb 100644
--- a/base/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
index a887bec..66cdbee 100644
--- a/base/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
index 51d9840..4893c29 100644
--- a/base/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
index 1ebb38a..df366d3 100644
--- a/base/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
index 6be8558..b19025d 100644
--- a/base/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
index 86817b6..848110d 100644
--- a/base/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
index d23e2d7..eb82c03 100644
--- a/base/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
index dc3a543..5460faa 100644
--- a/base/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 e953da8..c10ca03 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
@@ -137,13 +137,13 @@ let _For;
 let _Foreach;
 let _Friend;
 let _From;
+let _FromDict;
 let _FromJSON;
 let _Func;
 let _Function;
 let _Get;
 let _Global;
 let _Go;
-let _Goto;
 let _Obj3;
 let _Hashable;
 let _Hasher;
@@ -162,7 +162,9 @@ let _JSONReader;
 let _JSONTokenType;
 let _Locale;
 let _MapEntry;
+let _MarshalJSON;
 let _No;
+let _Goto;
 let _Guard;
 let _HasOwnProperty;
 let _HashCode;
@@ -208,7 +210,6 @@ let _Native;
 let _New;
 let _Newtonsoft;
 let _Nil;
-let _Noexcept;
 let _Obj4;
 let _NSError;
 let _NSObject;
@@ -220,6 +221,7 @@ let _Protocol;
 let _RegExp;
 let _Sel;
 let _NoSuchMethod;
+let _Noexcept;
 let _Nonatomic;
 let _NoneClass;
 let _Nonlocal;
@@ -273,7 +275,6 @@ let _RuntimeType;
 let _S;
 let _Sbyte;
 let _Sealed;
-let _Select;
 let _Obj5;
 let _KSerializer;
 let _PrimitiveKind;
@@ -292,7 +293,9 @@ let _TimeOnlyConverter;
 let _TimeZone;
 let _True;
 let _Type;
+let _UnmarshalJSON;
 let _UseSerializers;
+let _Select;
 let _SelfClass;
 let _Serialize;
 let _Set;
@@ -319,6 +322,7 @@ let _ThreadLocal;
 let _Throw;
 let _Throws;
 let _ToString;
+let _ToDict;
 let _ToJSON;
 let _TopLevelClass;
 let _Transient;
@@ -337,13 +341,13 @@ let _Undefined;
 let _Union;
 let _Unowned;
 let _Unsafe;
-let _Unsigned;
-let _Ushort;
 let _Obj6;
 let _UUID;
 let _Utf8JSONReader;
 let _Utf8JSONWriter;
 let _Yes;
+let _Unsigned;
+let _Ushort;
 let _Using;
 let _Var;
 let _Virtual;
@@ -789,6 +793,9 @@ _Friend = PropTypes.shape({
 _From = PropTypes.shape({
     "from": PropTypes.oneOfType([Integer]).isRequired,
 });
+_FromDict = PropTypes.shape({
+    "from_dict": PropTypes.oneOfType([Integer]).isRequired,
+});
 _FromJSON = PropTypes.shape({
     "from_json": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -807,9 +814,6 @@ _Global = PropTypes.shape({
 _Go = PropTypes.shape({
     "go": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Goto = PropTypes.shape({
-    "goto": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj2 = PropTypes.shape({
     "DateFormatter": _DateFormatter,
     "DateOnly": _DateOnly,
@@ -869,13 +873,13 @@ _Obj2 = PropTypes.shape({
     "foreach": _Foreach,
     "friend": _Friend,
     "from": _From,
+    "from_dict": _FromDict,
     "from_json": _FromJSON,
     "func": _Func,
     "function": _Function,
     "get": _Get,
     "global": _Global,
     "go": _Go,
-    "goto": _Goto,
 });
 _Hashable = PropTypes.shape({
     "Hashable": PropTypes.oneOfType([Integer]).isRequired,
@@ -928,9 +932,15 @@ _Locale = PropTypes.shape({
 _MapEntry = PropTypes.shape({
     "MapEntry": PropTypes.oneOfType([Integer]).isRequired,
 });
+_MarshalJSON = PropTypes.shape({
+    "MarshalJSON": PropTypes.oneOfType([Integer]).isRequired,
+});
 _No = PropTypes.shape({
     "NO": PropTypes.oneOfType([Integer]).isRequired,
 });
+_Goto = PropTypes.shape({
+    "goto": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Guard = PropTypes.shape({
     "guard": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1066,9 +1076,6 @@ _Newtonsoft = PropTypes.shape({
 _Nil = PropTypes.shape({
     "nil": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Noexcept = PropTypes.shape({
-    "noexcept": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj3 = PropTypes.shape({
     "Hashable": _Hashable,
     "Hasher": _Hasher,
@@ -1087,8 +1094,10 @@ _Obj3 = PropTypes.shape({
     "JsonTokenType": _JSONTokenType,
     "Locale": _Locale,
     "MapEntry": _MapEntry,
+    "MarshalJSON": _MarshalJSON,
     "NO": _No,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "goto": _Goto,
     "guard": _Guard,
     "hasOwnProperty": _HasOwnProperty,
     "hashCode": _HashCode,
@@ -1134,7 +1143,6 @@ _Obj3 = PropTypes.shape({
     "new": _New,
     "newtonsoft": _Newtonsoft,
     "nil": _Nil,
-    "noexcept": _Noexcept,
 });
 _NSError = PropTypes.shape({
     "NSError": PropTypes.oneOfType([Integer]).isRequired,
@@ -1166,6 +1174,9 @@ _Sel = PropTypes.shape({
 _NoSuchMethod = PropTypes.shape({
     "noSuchMethod": PropTypes.oneOfType([Integer]).isRequired,
 });
+_Noexcept = PropTypes.shape({
+    "noexcept": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Nonatomic = PropTypes.shape({
     "nonatomic": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1325,9 +1336,6 @@ _Sbyte = PropTypes.shape({
 _Sealed = PropTypes.shape({
     "sealed": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Select = PropTypes.shape({
-    "select": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj4 = PropTypes.shape({
     "NSError": _NSError,
     "NSObject": _NSObject,
@@ -1340,6 +1348,7 @@ _Obj4 = PropTypes.shape({
     "SEL": _Sel,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
     "noSuchMethod": _NoSuchMethod,
+    "noexcept": _Noexcept,
     "nonatomic": _Nonatomic,
     "none": _NoneClass,
     "nonlocal": _Nonlocal,
@@ -1393,7 +1402,6 @@ _Obj4 = PropTypes.shape({
     "s": _S,
     "sbyte": _Sbyte,
     "sealed": _Sealed,
-    "select": _Select,
 });
 _KSerializer = PropTypes.shape({
     "KSerializer": PropTypes.oneOfType([Integer]).isRequired,
@@ -1446,9 +1454,15 @@ _True = PropTypes.shape({
 _Type = PropTypes.shape({
     "Type": PropTypes.oneOfType([Integer]).isRequired,
 });
+_UnmarshalJSON = PropTypes.shape({
+    "UnmarshalJSON": PropTypes.oneOfType([Integer]).isRequired,
+});
 _UseSerializers = PropTypes.shape({
     "UseSerializers": PropTypes.oneOfType([Integer]).isRequired,
 });
+_Select = PropTypes.shape({
+    "select": PropTypes.oneOfType([Integer]).isRequired,
+});
 _SelfClass = PropTypes.shape({
     "self": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1527,6 +1541,9 @@ _Throws = PropTypes.shape({
 _ToString = PropTypes.shape({
     "toString": PropTypes.oneOfType([Integer]).isRequired,
 });
+_ToDict = PropTypes.shape({
+    "to_dict": PropTypes.oneOfType([Integer]).isRequired,
+});
 _ToJSON = PropTypes.shape({
     "to_json": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1581,12 +1598,6 @@ _Unowned = PropTypes.shape({
 _Unsafe = PropTypes.shape({
     "unsafe": PropTypes.oneOfType([Integer]).isRequired,
 });
-_Unsigned = PropTypes.shape({
-    "unsigned": PropTypes.oneOfType([Integer]).isRequired,
-});
-_Ushort = PropTypes.shape({
-    "ushort": PropTypes.oneOfType([Integer]).isRequired,
-});
 _Obj5 = PropTypes.shape({
     "KSerializer": _KSerializer,
     "PrimitiveKind": _PrimitiveKind,
@@ -1605,8 +1616,10 @@ _Obj5 = PropTypes.shape({
     "TimeZone": _TimeZone,
     "True": _True,
     "Type": _Type,
+    "UnmarshalJSON": _UnmarshalJSON,
     "UseSerializers": _UseSerializers,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "select": _Select,
     "self": _SelfClass,
     "serialize": _Serialize,
     "set": _Set,
@@ -1633,6 +1646,7 @@ _Obj5 = PropTypes.shape({
     "throw": _Throw,
     "throws": _Throws,
     "toString": _ToString,
+    "to_dict": _ToDict,
     "to_json": _ToJSON,
     "top_level": _TopLevelClass,
     "transient": _Transient,
@@ -1651,8 +1665,6 @@ _Obj5 = PropTypes.shape({
     "union": _Union,
     "unowned": _Unowned,
     "unsafe": _Unsafe,
-    "unsigned": _Unsigned,
-    "ushort": _Ushort,
 });
 _UUID = PropTypes.shape({
     "UUID": PropTypes.oneOfType([Integer]).isRequired,
@@ -1666,6 +1678,12 @@ _Utf8JSONWriter = PropTypes.shape({
 _Yes = PropTypes.shape({
     "YES": PropTypes.oneOfType([Integer]).isRequired,
 });
+_Unsigned = PropTypes.shape({
+    "unsigned": PropTypes.oneOfType([Integer]).isRequired,
+});
+_Ushort = PropTypes.shape({
+    "ushort": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Using = PropTypes.shape({
     "using": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1714,6 +1732,8 @@ _Obj6 = PropTypes.shape({
     "Utf8JsonWriter": _Utf8JSONWriter,
     "YES": _Yes,
     "dummy": PropTypes.oneOfType([Integer]).isRequired,
+    "unsigned": _Unsigned,
+    "ushort": _Ushort,
     "using": _Using,
     "var": _Var,
     "virtual": _Virtual,
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 00ff0b5..fe7a212 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
@@ -542,6 +542,9 @@ data class Obj2 (
     val friend: Friend,
     val from: From,
 
+    @Json(name = "from_dict")
+    val fromDict: FromDict,
+
     @Json(name = "from_json")
     val fromJSON: FromJSON,
 
@@ -550,7 +553,6 @@ data class Obj2 (
     val get: Get,
     val global: Global,
     val go: Go,
-    val goto: Goto,
 
     @Json(name = "do")
     val obj2Do: Do,
@@ -804,6 +806,11 @@ data class From (
     val from: Long
 )
 
+data class FromDict (
+    @Json(name = "from_dict")
+    val fromDict: Long
+)
+
 data class FromJSON (
     @Json(name = "from_json")
     val fromJSON: Long
@@ -829,10 +836,6 @@ data class Go (
     val go: Long
 )
 
-data class Goto (
-    val goto: Long
-)
-
 data class Do (
     @Json(name = "do")
     val doDo: Long
@@ -860,6 +863,7 @@ data class FalseClass (
 
 data class Obj3 (
     val dummy: Long,
+    val goto: Goto,
     val guard: Guard,
     val hasOwnProperty: HasOwnProperty,
     val hashCode: HashCode,
@@ -957,6 +961,9 @@ data class Obj3 (
     @Json(name = "MapEntry")
     val mapEntry: MapEntry,
 
+    @Json(name = "MarshalJSON")
+    val marshalJSON: MarshalJSON,
+
     @Json(name = "metadata_property_handling")
     val metadataPropertyHandling: MetadataPropertyHandling,
 
@@ -972,8 +979,6 @@ data class Obj3 (
     @Json(name = "NO")
     val no: No,
 
-    val noexcept: Noexcept,
-
     @Json(name = "if")
     val obj3If: If,
 
@@ -987,6 +992,10 @@ data class Obj3 (
     val obj3Is: Is
 )
 
+data class Goto (
+    val goto: Long
+)
+
 data class Guard (
     val guard: Long
 )
@@ -1204,6 +1213,11 @@ data class MapEntry (
     val mapEntry: Long
 )
 
+data class MarshalJSON (
+    @Json(name = "MarshalJSON")
+    val marshalJSON: Long
+)
+
 data class MetadataPropertyHandling (
     @Json(name = "metadata_property_handling")
     val metadataPropertyHandling: Long
@@ -1246,10 +1260,6 @@ data class No (
     val no: Long
 )
 
-data class Noexcept (
-    val noexcept: Long
-)
-
 data class If (
     @Json(name = "if")
     val ifIf: Long
@@ -1273,6 +1283,7 @@ data class Is (
 data class Obj4 (
     val dummy: Long,
     val noSuchMethod: NoSuchMethod,
+    val noexcept: Noexcept,
     val nonatomic: Nonatomic,
 
     @Json(name = "None")
@@ -1377,15 +1388,17 @@ data class Obj4 (
     val sealed: Sealed,
 
     @Json(name = "SEL")
-    val sel: Sel,
-
-    val select: Select
+    val sel: Sel
 )
 
 data class NoSuchMethod (
     val noSuchMethod: Long
 )
 
+data class Noexcept (
+    val noexcept: Long
+)
+
 data class Nonatomic (
     val nonatomic: Long
 )
@@ -1650,10 +1663,6 @@ data class Sel (
     val sel: Long
 )
 
-data class Select (
-    val select: Long
-)
-
 data class Obj5 (
     val dummy: Long,
 
@@ -1693,6 +1702,8 @@ data class Obj5 (
     @Json(name = "true")
     val purpleTrue: TrueClass,
 
+    val select: Select,
+
     @Json(name = "Self")
     val self: Self,
 
@@ -1765,6 +1776,9 @@ data class Obj5 (
     @Json(name = "TimeZone")
     val timeZone: TimeZone,
 
+    @Json(name = "to_dict")
+    val toDict: ToDict,
+
     @Json(name = "to_json")
     val toJSON: ToJSON,
 
@@ -1786,14 +1800,15 @@ data class Obj5 (
     val unchecked: Unchecked,
     val undefined: Undefined,
     val union: Union,
+
+    @Json(name = "UnmarshalJSON")
+    val unmarshalJSON: UnmarshalJSON,
+
     val unowned: Unowned,
     val unsafe: Unsafe,
-    val unsigned: Unsigned,
 
     @Json(name = "UseSerializers")
-    val useSerializers: UseSerializers,
-
-    val ushort: Ushort
+    val useSerializers: UseSerializers
 )
 
 data class KSerializer (
@@ -1854,6 +1869,10 @@ data class TrueClass (
     val trueTrue: Long
 )
 
+data class Select (
+    val select: Long
+)
+
 data class Self (
     @Json(name = "Self")
     val self: Long
@@ -2006,6 +2025,11 @@ data class TimeZone (
     val timeZone: Long
 )
 
+data class ToDict (
+    @Json(name = "to_dict")
+    val toDict: Long
+)
+
 data class ToJSON (
     @Json(name = "to_json")
     val toJSON: Long
@@ -2061,6 +2085,11 @@ data class Union (
     val union: Long
 )
 
+data class UnmarshalJSON (
+    @Json(name = "UnmarshalJSON")
+    val unmarshalJSON: Long
+)
+
 data class Unowned (
     val unowned: Long
 )
@@ -2069,19 +2098,11 @@ data class Unsafe (
     val unsafe: Long
 )
 
-data class Unsigned (
-    val unsigned: Long
-)
-
 data class UseSerializers (
     @Json(name = "UseSerializers")
     val useSerializers: Long
 )
 
-data class Ushort (
-    val ushort: Long
-)
-
 data class Obj6 (
     val dummy: Long,
 
@@ -2091,6 +2112,8 @@ data class Obj6 (
     @Json(name = "while")
     val obj6While: While,
 
+    val unsigned: Unsigned,
+    val ushort: Ushort,
     val using: Using,
 
     @Json(name = "Utf8JsonReader")
@@ -2134,6 +2157,14 @@ data class While (
     val whileWhile: Long
 )
 
+data class Unsigned (
+    val unsigned: Long
+)
+
+data class Ushort (
+    val ushort: Long
+)
+
 data class Using (
     val using: 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 085d5ba..abcaf7e 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
@@ -740,6 +740,9 @@ data class Obj2 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val from: From,
 
+    @get:JsonProperty("from_dict", required=true)@field:JsonProperty("from_dict", required=true)
+    val fromDict: FromDict,
+
     @get:JsonProperty("from_json", required=true)@field:JsonProperty("from_json", required=true)
     val fromJSON: FromJSON,
 
@@ -758,9 +761,6 @@ data class Obj2 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val go: Go,
 
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val goto: Goto,
-
     @get:JsonProperty("do", required=true)@field:JsonProperty("do", required=true)
     val obj2Do: Do,
 
@@ -1050,6 +1050,11 @@ data class From (
     val from: Long
 )
 
+data class FromDict (
+    @get:JsonProperty("from_dict", required=true)@field:JsonProperty("from_dict", required=true)
+    val fromDict: Long
+)
+
 data class FromJSON (
     @get:JsonProperty("from_json", required=true)@field:JsonProperty("from_json", required=true)
     val fromJSON: Long
@@ -1080,11 +1085,6 @@ data class Go (
     val go: Long
 )
 
-data class Goto (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val goto: Long
-)
-
 data class Do (
     @get:JsonProperty("do", required=true)@field:JsonProperty("do", required=true)
     val doDo: Long
@@ -1114,6 +1114,9 @@ data class Obj3 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val goto: Goto,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val guard: Guard,
 
@@ -1261,6 +1264,9 @@ data class Obj3 (
     @get:JsonProperty("MapEntry", required=true)@field:JsonProperty("MapEntry", required=true)
     val mapEntry: MapEntry,
 
+    @get:JsonProperty("MarshalJSON", required=true)@field:JsonProperty("MarshalJSON", required=true)
+    val marshalJSON: MarshalJSON,
+
     @get:JsonProperty("metadata_property_handling", required=true)@field:JsonProperty("metadata_property_handling", required=true)
     val metadataPropertyHandling: MetadataPropertyHandling,
 
@@ -1291,9 +1297,6 @@ 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 noexcept: Noexcept,
-
     @get:JsonProperty("if", required=true)@field:JsonProperty("if", required=true)
     val obj3If: If,
 
@@ -1307,6 +1310,11 @@ data class Obj3 (
     val obj3Is: Is
 )
 
+data class Goto (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val goto: Long
+)
+
 data class Guard (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val guard: Long
@@ -1552,6 +1560,11 @@ data class MapEntry (
     val mapEntry: Long
 )
 
+data class MarshalJSON (
+    @get:JsonProperty("MarshalJSON", required=true)@field:JsonProperty("MarshalJSON", required=true)
+    val marshalJSON: Long
+)
+
 data class MetadataPropertyHandling (
     @get:JsonProperty("metadata_property_handling", required=true)@field:JsonProperty("metadata_property_handling", required=true)
     val metadataPropertyHandling: Long
@@ -1602,11 +1615,6 @@ data class No (
     val no: Long
 )
 
-data class Noexcept (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val noexcept: Long
-)
-
 data class If (
     @get:JsonProperty("if", required=true)@field:JsonProperty("if", required=true)
     val ifIf: Long
@@ -1634,6 +1642,9 @@ data class Obj4 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val noSuchMethod: NoSuchMethod,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val noexcept: Noexcept,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val nonatomic: Nonatomic,
 
@@ -1818,10 +1829,7 @@ data class Obj4 (
     val sealed: Sealed,
 
     @get:JsonProperty("SEL", required=true)@field:JsonProperty("SEL", required=true)
-    val sel: Sel,
-
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val select: Select
+    val sel: Sel
 )
 
 data class NoSuchMethod (
@@ -1829,6 +1837,11 @@ data class NoSuchMethod (
     val noSuchMethod: Long
 )
 
+data class Noexcept (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val noexcept: Long
+)
+
 data class Nonatomic (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val nonatomic: Long
@@ -2139,11 +2152,6 @@ data class Sel (
     val sel: Long
 )
 
-data class Select (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val select: Long
-)
-
 data class Obj5 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
@@ -2184,6 +2192,9 @@ data class Obj5 (
     @get:JsonProperty("true", required=true)@field:JsonProperty("true", required=true)
     val purpleTrue: TrueClass,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val select: Select,
+
     @get:JsonProperty("Self", required=true)@field:JsonProperty("Self", required=true)
     val self: Self,
 
@@ -2286,6 +2297,9 @@ data class Obj5 (
     @get:JsonProperty("TimeZone", required=true)@field:JsonProperty("TimeZone", required=true)
     val timeZone: TimeZone,
 
+    @get:JsonProperty("to_dict", required=true)@field:JsonProperty("to_dict", required=true)
+    val toDict: ToDict,
+
     @get:JsonProperty("to_json", required=true)@field:JsonProperty("to_json", required=true)
     val toJSON: ToJSON,
 
@@ -2325,20 +2339,17 @@ data class Obj5 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val union: Union,
 
+    @get:JsonProperty("UnmarshalJSON", required=true)@field:JsonProperty("UnmarshalJSON", required=true)
+    val unmarshalJSON: UnmarshalJSON,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val unowned: Unowned,
 
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val unsafe: Unsafe,
 
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val unsigned: Unsigned,
-
     @get:JsonProperty("UseSerializers", required=true)@field:JsonProperty("UseSerializers", required=true)
-    val useSerializers: UseSerializers,
-
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val ushort: Ushort
+    val useSerializers: UseSerializers
 )
 
 data class KSerializer (
@@ -2401,6 +2412,11 @@ data class TrueClass (
     val trueTrue: Long
 )
 
+data class Select (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val select: Long
+)
+
 data class Self (
     @get:JsonProperty("Self", required=true)@field:JsonProperty("Self", required=true)
     val self: Long
@@ -2571,6 +2587,11 @@ data class TimeZone (
     val timeZone: Long
 )
 
+data class ToDict (
+    @get:JsonProperty("to_dict", required=true)@field:JsonProperty("to_dict", required=true)
+    val toDict: Long
+)
+
 data class ToJSON (
     @get:JsonProperty("to_json", required=true)@field:JsonProperty("to_json", required=true)
     val toJSON: Long
@@ -2636,6 +2657,11 @@ data class Union (
     val union: Long
 )
 
+data class UnmarshalJSON (
+    @get:JsonProperty("UnmarshalJSON", required=true)@field:JsonProperty("UnmarshalJSON", required=true)
+    val unmarshalJSON: Long
+)
+
 data class Unowned (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val unowned: Long
@@ -2646,21 +2672,11 @@ data class Unsafe (
     val unsafe: Long
 )
 
-data class Unsigned (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val unsigned: Long
-)
-
 data class UseSerializers (
     @get:JsonProperty("UseSerializers", required=true)@field:JsonProperty("UseSerializers", required=true)
     val useSerializers: Long
 )
 
-data class Ushort (
-    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
-    val ushort: Long
-)
-
 data class Obj6 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val dummy: Long,
@@ -2671,6 +2687,12 @@ data class Obj6 (
     @get:JsonProperty("while", required=true)@field:JsonProperty("while", required=true)
     val obj6While: While,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unsigned: Unsigned,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ushort: Ushort,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val using: Using,
 
@@ -2730,6 +2752,16 @@ data class While (
     val whileWhile: Long
 )
 
+data class Unsigned (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unsigned: Long
+)
+
+data class Ushort (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ushort: Long
+)
+
 data class Using (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val using: 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 3bc6be6..420c2f5 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
@@ -597,6 +597,9 @@ data class Obj2 (
     val friend: Friend,
     val from: From,
 
+    @SerialName("from_dict")
+    val fromDict: FromDict,
+
     @SerialName("from_json")
     val fromJSON: FromJSON,
 
@@ -605,7 +608,6 @@ data class Obj2 (
     val get: Get,
     val global: Global,
     val go: Go,
-    val goto: Goto,
 
     @SerialName("do")
     val obj2Do: Do,
@@ -904,6 +906,12 @@ data class From (
     val from: Long
 )
 
+@Serializable
+data class FromDict (
+    @SerialName("from_dict")
+    val fromDict: Long
+)
+
 @Serializable
 data class FromJSON (
     @SerialName("from_json")
@@ -935,11 +943,6 @@ data class Go (
     val go: Long
 )
 
-@Serializable
-data class Goto (
-    val goto: Long
-)
-
 @Serializable
 data class Do (
     @SerialName("do")
@@ -973,6 +976,7 @@ data class FalseClass (
 @Serializable
 data class Obj3 (
     val dummy: Long,
+    val goto: Goto,
     val guard: Guard,
     val hasOwnProperty: HasOwnProperty,
     val hashCode: HashCode,
@@ -1070,6 +1074,9 @@ data class Obj3 (
     @SerialName("MapEntry")
     val mapEntry: MapEntry,
 
+    @SerialName("MarshalJSON")
+    val marshalJSON: MarshalJSON,
+
     @SerialName("metadata_property_handling")
     val metadataPropertyHandling: MetadataPropertyHandling,
 
@@ -1085,8 +1092,6 @@ data class Obj3 (
     @SerialName("NO")
     val no: No,
 
-    val noexcept: Noexcept,
-
     @SerialName("if")
     val obj3If: If,
 
@@ -1100,6 +1105,11 @@ data class Obj3 (
     val obj3Is: Is
 )
 
+@Serializable
+data class Goto (
+    val goto: Long
+)
+
 @Serializable
 data class Guard (
     val guard: Long
@@ -1366,6 +1376,12 @@ data class MapEntry (
     val mapEntry: Long
 )
 
+@Serializable
+data class MarshalJSON (
+    @SerialName("MarshalJSON")
+    val marshalJSON: Long
+)
+
 @Serializable
 data class MetadataPropertyHandling (
     @SerialName("metadata_property_handling")
@@ -1418,11 +1434,6 @@ data class No (
     val no: Long
 )
 
-@Serializable
-data class Noexcept (
-    val noexcept: Long
-)
-
 @Serializable
 data class If (
     @SerialName("if")
@@ -1451,6 +1462,7 @@ data class Is (
 data class Obj4 (
     val dummy: Long,
     val noSuchMethod: NoSuchMethod,
+    val noexcept: Noexcept,
     val nonatomic: Nonatomic,
 
     @SerialName("None")
@@ -1555,9 +1567,7 @@ data class Obj4 (
     val sealed: Sealed,
 
     @SerialName("SEL")
-    val sel: Sel,
-
-    val select: Select
+    val sel: Sel
 )
 
 @Serializable
@@ -1565,6 +1575,11 @@ data class NoSuchMethod (
     val noSuchMethod: Long
 )
 
+@Serializable
+data class Noexcept (
+    val noexcept: Long
+)
+
 @Serializable
 data class Nonatomic (
     val nonatomic: Long
@@ -1891,11 +1906,6 @@ data class Sel (
     val sel: Long
 )
 
-@Serializable
-data class Select (
-    val select: Long
-)
-
 @Serializable
 data class Obj5 (
     val dummy: Long,
@@ -1936,6 +1946,8 @@ data class Obj5 (
     @SerialName("true")
     val purpleTrue: TrueClass,
 
+    val select: Select,
+
     @SerialName("Self")
     val self: Self,
 
@@ -2008,6 +2020,9 @@ data class Obj5 (
     @SerialName("TimeZone")
     val timeZone: TimeZone,
 
+    @SerialName("to_dict")
+    val toDict: ToDict,
+
     @SerialName("to_json")
     val toJSON: ToJSON,
 
@@ -2029,14 +2044,15 @@ data class Obj5 (
     val unchecked: Unchecked,
     val undefined: Undefined,
     val union: Union,
+
+    @SerialName("UnmarshalJSON")
+    val unmarshalJSON: UnmarshalJSON,
+
     val unowned: Unowned,
     val unsafe: Unsafe,
-    val unsigned: Unsigned,
 
     @SerialName("UseSerializers")
-    val useSerializers: UseSerializersClass,
-
-    val ushort: Ushort
+    val useSerializers: UseSerializersClass
 )
 
 @Serializable
@@ -2109,6 +2125,11 @@ data class TrueClass (
     val trueTrue: Long
 )
 
+@Serializable
+data class Select (
+    val select: Long
+)
+
 @Serializable
 data class Self (
     @SerialName("Self")
@@ -2295,6 +2316,12 @@ data class TimeZone (
     val timeZone: Long
 )
 
+@Serializable
+data class ToDict (
+    @SerialName("to_dict")
+    val toDict: Long
+)
+
 @Serializable
 data class ToJSON (
     @SerialName("to_json")
@@ -2363,6 +2390,12 @@ data class Union (
     val union: Long
 )
 
+@Serializable
+data class UnmarshalJSON (
+    @SerialName("UnmarshalJSON")
+    val unmarshalJSON: Long
+)
+
 @Serializable
 data class Unowned (
     val unowned: Long
@@ -2373,22 +2406,12 @@ data class Unsafe (
     val unsafe: Long
 )
 
-@Serializable
-data class Unsigned (
-    val unsigned: Long
-)
-
 @Serializable
 data class UseSerializersClass (
     @SerialName("UseSerializers")
     val useSerializers: Long
 )
 
-@Serializable
-data class Ushort (
-    val ushort: Long
-)
-
 @Serializable
 data class Obj6 (
     val dummy: Long,
@@ -2399,6 +2422,8 @@ data class Obj6 (
     @SerialName("while")
     val obj6While: While,
 
+    val unsigned: Unsigned,
+    val ushort: Ushort,
     val using: Using,
 
     @SerialName("Utf8JsonReader")
@@ -2444,6 +2469,16 @@ data class While (
     val whileWhile: Long
 )
 
+@Serializable
+data class Unsigned (
+    val unsigned: Long
+)
+
+@Serializable
+data class Ushort (
+    val ushort: Long
+)
+
 @Serializable
 data class Using (
     val using: Long
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 bc476f9..cc8f580 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
@@ -120,6 +120,7 @@
 @class QTFormatException;
 @class QTFriend;
 @class QTFrom;
+@class QTFromDict;
 @class QTFromJSON;
 @class QTFunc;
 @class QTFunction;
@@ -135,7 +136,6 @@
 @class QTFalse;
 @class QTFloat;
 @class QTFor;
-@class QTGoto;
 @class QTFalseClass;
 @class QTObj3;
 @class QTGuard;
@@ -185,6 +185,7 @@
 @class QTLock;
 @class QTMap;
 @class QTMapEntry;
+@class QTMarshalJSON;
 @class QTMetadataPropertyHandling;
 @class QTModule;
 @class QTMutable;
@@ -193,7 +194,7 @@
 @class QTNative;
 @class QTNewtonsoft;
 @class QTNo;
-@class QTNoexcept;
+@class QTGoto;
 @class QTIf;
 @class QTInline;
 @class QTInt;
@@ -204,6 +205,7 @@
 @class QTNew;
 @class QTObj4;
 @class QTNoSuchMethod;
+@class QTNoexcept;
 @class QTNone;
 @class QTNonlocal;
 @class QTNonmutating;
@@ -266,7 +268,6 @@
 @class QTSbyte;
 @class QTSealed;
 @class QTSel;
-@class QTSelect;
 @class QTObj5;
 @class QTKSerializer;
 @class QTSelfClass;
@@ -281,8 +282,8 @@
 @class QTTypedef;
 @class QTTypeof;
 @class QTUnion;
-@class QTUnsigned;
 @class QTPrimitiveKind;
+@class QTSelect;
 @class QTSelf;
 @class QTSendable;
 @class QTSerialDescriptor;
@@ -315,6 +316,7 @@
 @class QTTimeOnly;
 @class QTTimeOnlyConverter;
 @class QTTimeZone;
+@class QTToDict;
 @class QTToJSON;
 @class QTToString;
 @class QTTopLevelClass;
@@ -328,14 +330,16 @@
 @class QTUlong;
 @class QTUnchecked;
 @class QTUndefined;
+@class QTUnmarshalJSON;
 @class QTUnowned;
 @class QTUnsafe;
 @class QTUseSerializers;
-@class QTUshort;
 @class QTObj6;
+@class QTUnsigned;
 @class QTVoid;
 @class QTVolatile;
 @class QTWhile;
+@class QTUshort;
 @class QTUsing;
 @class QTUtf8JSONReader;
 @class QTUtf8JSONWriter;
@@ -760,6 +764,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTFormatException *formatException;
 @property (nonatomic, strong) QTFriend *friend;
 @property (nonatomic, strong) QTFrom *from;
+@property (nonatomic, strong) QTFromDict *fromDict;
 @property (nonatomic, strong) QTFromJSON *fromJSON;
 @property (nonatomic, strong) QTFunc *func;
 @property (nonatomic, strong) QTFunction *function;
@@ -775,7 +780,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTFalse *obj2False;
 @property (nonatomic, strong) QTFloat *obj2Float;
 @property (nonatomic, strong) QTFor *obj2For;
-@property (nonatomic, strong) QTGoto *obj2Goto;
 @property (nonatomic, strong) QTFalseClass *theFalse;
 @end
 
@@ -967,6 +971,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger from;
 @end
 
+@interface QTFromDict : NSObject
+@property (nonatomic, assign) NSInteger fromDict;
+@end
+
 @interface QTFromJSON : NSObject
 @property (nonatomic, assign) NSInteger fromJSON;
 @end
@@ -1027,10 +1035,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger forFor;
 @end
 
-@interface QTGoto : NSObject
-@property (nonatomic, assign) NSInteger gotoGoto;
-@end
-
 @interface QTFalseClass : NSObject
 @property (nonatomic, assign) NSInteger falseFalse;
 @end
@@ -1084,6 +1088,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTLock *lock;
 @property (nonatomic, strong) QTMap *map;
 @property (nonatomic, strong) QTMapEntry *mapEntry;
+@property (nonatomic, strong) QTMarshalJSON *marshalJSON;
 @property (nonatomic, strong) QTMetadataPropertyHandling *metadataPropertyHandling;
 @property (nonatomic, strong) QTModule *module;
 @property (nonatomic, strong) QTMutable *mutable;
@@ -1092,7 +1097,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) QTNoexcept *noexcept;
+@property (nonatomic, strong) QTGoto *obj3Goto;
 @property (nonatomic, strong) QTIf *obj3If;
 @property (nonatomic, strong) QTInline *obj3Inline;
 @property (nonatomic, strong) QTInt *obj3Int;
@@ -1291,6 +1296,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger mapEntry;
 @end
 
+@interface QTMarshalJSON : NSObject
+@property (nonatomic, assign) NSInteger marshalJSON;
+@end
+
 @interface QTMetadataPropertyHandling : NSObject
 @property (nonatomic, assign) NSInteger metadataPropertyHandling;
 @end
@@ -1323,8 +1332,8 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger no;
 @end
 
-@interface QTNoexcept : NSObject
-@property (nonatomic, assign) NSInteger noexcept;
+@interface QTGoto : NSObject
+@property (nonatomic, assign) NSInteger gotoGoto;
 @end
 
 @interface QTIf : NSObject
@@ -1362,6 +1371,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTObj4 : NSObject
 @property (nonatomic, assign) NSInteger dummy;
 @property (nonatomic, strong) QTNoSuchMethod *noSuchMethod;
+@property (nonatomic, strong) QTNoexcept *noexcept;
 @property (nonatomic, strong) QTNone *none;
 @property (nonatomic, strong) QTNonlocal *nonlocal;
 @property (nonatomic, strong) QTNonmutating *nonmutating;
@@ -1424,13 +1434,16 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTSbyte *sbyte;
 @property (nonatomic, strong) QTSealed *sealed;
 @property (nonatomic, strong) QTSel *sel;
-@property (nonatomic, strong) QTSelect *select;
 @end
 
 @interface QTNoSuchMethod : NSObject
 @property (nonatomic, assign) NSInteger noSuchMethod;
 @end
 
+@interface QTNoexcept : NSObject
+@property (nonatomic, assign) NSInteger noexcept;
+@end
+
 @interface QTNone : NSObject
 @property (nonatomic, assign) NSInteger none;
 @end
@@ -1679,10 +1692,6 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger sel;
 @end
 
-@interface QTSelect : NSObject
-@property (nonatomic, assign) NSInteger select;
-@end
-
 @interface QTObj5 : NSObject
 @property (nonatomic, assign) NSInteger dummy;
 @property (nonatomic, strong) QTKSerializer *kSerializer;
@@ -1698,8 +1707,8 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTTypedef *obj5Typedef;
 @property (nonatomic, strong) QTTypeof *obj5Typeof;
 @property (nonatomic, strong) QTUnion *obj5Union;
-@property (nonatomic, strong) QTUnsigned *obj5Unsigned;
 @property (nonatomic, strong) QTPrimitiveKind *primitiveKind;
+@property (nonatomic, strong) QTSelect *select;
 @property (nonatomic, strong) QTSelf *self;
 @property (nonatomic, strong) QTSendable *sendable;
 @property (nonatomic, strong) QTSerialDescriptor *serialDescriptor;
@@ -1732,6 +1741,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTTimeOnly *timeOnly;
 @property (nonatomic, strong) QTTimeOnlyConverter *timeOnlyConverter;
 @property (nonatomic, strong) QTTimeZone *timeZone;
+@property (nonatomic, strong) QTToDict *toDict;
 @property (nonatomic, strong) QTToJSON *toJSON;
 @property (nonatomic, strong) QTToString *toString;
 @property (nonatomic, strong) QTTopLevelClass *topLevel;
@@ -1745,10 +1755,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTUlong *ulong;
 @property (nonatomic, strong) QTUnchecked *unchecked;
 @property (nonatomic, strong) QTUndefined *undefined;
+@property (nonatomic, strong) QTUnmarshalJSON *unmarshalJSON;
 @property (nonatomic, strong) QTUnowned *unowned;
 @property (nonatomic, strong) QTUnsafe *unsafe;
 @property (nonatomic, strong) QTUseSerializers *useSerializers;
-@property (nonatomic, strong) QTUshort *ushort;
 @end
 
 @interface QTKSerializer : NSObject
@@ -1803,14 +1813,14 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger unionUnion;
 @end
 
-@interface QTUnsigned : NSObject
-@property (nonatomic, assign) NSInteger unsignedUnsigned;
-@end
-
 @interface QTPrimitiveKind : NSObject
 @property (nonatomic, assign) NSInteger primitiveKind;
 @end
 
+@interface QTSelect : NSObject
+@property (nonatomic, assign) NSInteger select;
+@end
+
 @interface QTSelf : NSObject
 @property (nonatomic, assign) NSInteger self;
 @end
@@ -1939,6 +1949,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger timeZone;
 @end
 
+@interface QTToDict : NSObject
+@property (nonatomic, assign) NSInteger toDict;
+@end
+
 @interface QTToJSON : NSObject
 @property (nonatomic, assign) NSInteger toJSON;
 @end
@@ -1991,6 +2005,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger undefined;
 @end
 
+@interface QTUnmarshalJSON : NSObject
+@property (nonatomic, assign) NSInteger unmarshalJSON;
+@end
+
 @interface QTUnowned : NSObject
 @property (nonatomic, assign) NSInteger unowned;
 @end
@@ -2003,15 +2021,13 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger useSerializers;
 @end
 
-@interface QTUshort : NSObject
-@property (nonatomic, assign) NSInteger ushort;
-@end
-
 @interface QTObj6 : NSObject
 @property (nonatomic, assign) NSInteger dummy;
+@property (nonatomic, strong) QTUnsigned *obj6Unsigned;
 @property (nonatomic, strong) QTVoid *obj6Void;
 @property (nonatomic, strong) QTVolatile *obj6Volatile;
 @property (nonatomic, strong) QTWhile *obj6While;
+@property (nonatomic, strong) QTUshort *ushort;
 @property (nonatomic, strong) QTUsing *using;
 @property (nonatomic, strong) QTUtf8JSONReader *utf8JSONReader;
 @property (nonatomic, strong) QTUtf8JSONWriter *utf8JSONWriter;
@@ -2029,6 +2045,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTYield *yield;
 @end
 
+@interface QTUnsigned : NSObject
+@property (nonatomic, assign) NSInteger unsignedUnsigned;
+@end
+
 @interface QTVoid : NSObject
 @property (nonatomic, assign) NSInteger voidVoid;
 @end
@@ -2041,6 +2061,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger whileWhile;
 @end
 
+@interface QTUshort : NSObject
+@property (nonatomic, assign) NSInteger ushort;
+@end
+
 @interface QTUsing : NSObject
 @property (nonatomic, assign) NSInteger using;
 @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 b79655b..9c2f1ac 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
@@ -578,6 +578,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTFromDict (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTFromJSON (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -653,11 +658,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTGoto (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
 @interface QTFalseClass (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -903,6 +903,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTMarshalJSON (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTMetadataPropertyHandling (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -943,7 +948,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTNoexcept (JSONConversion)
+@interface QTGoto (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
@@ -998,6 +1003,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTNoexcept (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTNone (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1308,11 +1318,6 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTSelect (JSONConversion)
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
-- (NSDictionary *)JSONDictionary;
-@end
-
 @interface QTObj5 (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1383,12 +1388,12 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTUnsigned (JSONConversion)
+@interface QTPrimitiveKind (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTPrimitiveKind (JSONConversion)
+@interface QTSelect (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
@@ -1553,6 +1558,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTToDict (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTToJSON (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1618,6 +1628,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTUnmarshalJSON (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTUnowned (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1633,12 +1648,12 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTUshort (JSONConversion)
+@interface QTObj6 (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
 
-@interface QTObj6 (JSONConversion)
+@interface QTUnsigned (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
 @end
@@ -1658,6 +1673,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTUshort (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTUsing (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -5331,6 +5351,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"FormatException": @"formatException",
         @"friend": @"friend",
         @"from": @"from",
+        @"from_dict": @"fromDict",
         @"from_json": @"fromJSON",
         @"func": @"func",
         @"function": @"function",
@@ -5346,7 +5367,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"False": @"obj2False",
         @"float": @"obj2Float",
         @"for": @"obj2For",
-        @"goto": @"obj2Goto",
         @"false": @"theFalse",
     };
 }
@@ -5408,6 +5428,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"FormatException"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"friend"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"from"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"from_dict"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"from_json"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"func"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"function"] isKindOfClass:NSDictionary.class]) return nil;
@@ -5423,7 +5444,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"False"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"float"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"for"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"goto"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"false"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
         _dateFormatter = [QTDateFormatter fromJSONDictionary:(id)_dateFormatter];
@@ -5520,6 +5540,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_friend && dict[@"friend"] && ![dict[@"friend"] isKindOfClass:NSNull.class]) return nil;
         _from = [QTFrom fromJSONDictionary:(id)_from];
         if (!_from && dict[@"from"] && ![dict[@"from"] isKindOfClass:NSNull.class]) return nil;
+        _fromDict = [QTFromDict fromJSONDictionary:(id)_fromDict];
+        if (!_fromDict && dict[@"from_dict"] && ![dict[@"from_dict"] isKindOfClass:NSNull.class]) return nil;
         _fromJSON = [QTFromJSON fromJSONDictionary:(id)_fromJSON];
         if (!_fromJSON && dict[@"from_json"] && ![dict[@"from_json"] isKindOfClass:NSNull.class]) return nil;
         _func = [QTFunc fromJSONDictionary:(id)_func];
@@ -5550,8 +5572,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_obj2Float && dict[@"float"] && ![dict[@"float"] isKindOfClass:NSNull.class]) return nil;
         _obj2For = [QTFor fromJSONDictionary:(id)_obj2For];
         if (!_obj2For && dict[@"for"] && ![dict[@"for"] isKindOfClass:NSNull.class]) return nil;
-        _obj2Goto = [QTGoto fromJSONDictionary:(id)_obj2Goto];
-        if (!_obj2Goto && dict[@"goto"] && ![dict[@"goto"] isKindOfClass:NSNull.class]) return nil;
         _theFalse = [QTFalseClass fromJSONDictionary:(id)_theFalse];
         if (!_theFalse && dict[@"false"] && ![dict[@"false"] isKindOfClass:NSNull.class]) return nil;
     }
@@ -5630,6 +5650,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"FormatException": [_formatException JSONDictionary],
         @"friend": [_friend JSONDictionary],
         @"from": [_from JSONDictionary],
+        @"from_dict": [_fromDict JSONDictionary],
         @"from_json": [_fromJSON JSONDictionary],
         @"func": [_func JSONDictionary],
         @"function": [_function JSONDictionary],
@@ -5645,7 +5666,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"False": [_obj2False JSONDictionary],
         @"float": [_obj2Float JSONDictionary],
         @"for": [_obj2For JSONDictionary],
-        @"goto": [_obj2Goto JSONDictionary],
         @"false": [_theFalse JSONDictionary],
     }];
 
@@ -7781,6 +7801,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTFromDict
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"from_dict": @"fromDict",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTFromDict alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"from_dict"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"from_dict"] doubleValue] != [dict[@"from_dict"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTFromDict.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTFromDict.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTFromDict.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTFromDict.properties) {
+        id propertyName = QTFromDict.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTFromJSON
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -8511,58 +8583,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTGoto
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"goto": @"gotoGoto",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTGoto alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"goto"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"goto"] doubleValue] != [dict[@"goto"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTGoto.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTGoto.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    id dict = [[self dictionaryWithValuesForKeys:QTGoto.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTGoto.properties) {
-        id propertyName = QTGoto.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
-}
-@end
-
 @implementation QTFalseClass
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -8668,6 +8688,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"lock": @"lock",
         @"map": @"map",
         @"MapEntry": @"mapEntry",
+        @"MarshalJSON": @"marshalJSON",
         @"metadata_property_handling": @"metadataPropertyHandling",
         @"module": @"module",
         @"mutable": @"mutable",
@@ -8676,7 +8697,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"native": @"native",
         @"newtonsoft": @"newtonsoft",
         @"NO": @"no",
-        @"noexcept": @"noexcept",
+        @"goto": @"obj3Goto",
         @"if": @"obj3If",
         @"inline": @"obj3Inline",
         @"int": @"obj3Int",
@@ -8745,6 +8766,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"lock"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"map"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"MapEntry"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"MarshalJSON"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"metadata_property_handling"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"module"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"mutable"] isKindOfClass:NSDictionary.class]) return nil;
@@ -8753,7 +8775,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[@"noexcept"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"goto"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"if"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"inline"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"int"] isKindOfClass:NSDictionary.class]) return nil;
@@ -8857,6 +8879,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_map && dict[@"map"] && ![dict[@"map"] isKindOfClass:NSNull.class]) return nil;
         _mapEntry = [QTMapEntry fromJSONDictionary:(id)_mapEntry];
         if (!_mapEntry && dict[@"MapEntry"] && ![dict[@"MapEntry"] isKindOfClass:NSNull.class]) return nil;
+        _marshalJSON = [QTMarshalJSON fromJSONDictionary:(id)_marshalJSON];
+        if (!_marshalJSON && dict[@"MarshalJSON"] && ![dict[@"MarshalJSON"] isKindOfClass:NSNull.class]) return nil;
         _metadataPropertyHandling = [QTMetadataPropertyHandling fromJSONDictionary:(id)_metadataPropertyHandling];
         if (!_metadataPropertyHandling && dict[@"metadata_property_handling"] && ![dict[@"metadata_property_handling"] isKindOfClass:NSNull.class]) return nil;
         _module = [QTModule fromJSONDictionary:(id)_module];
@@ -8873,8 +8897,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;
-        _noexcept = [QTNoexcept fromJSONDictionary:(id)_noexcept];
-        if (!_noexcept && dict[@"noexcept"] && ![dict[@"noexcept"] isKindOfClass:NSNull.class]) return nil;
+        _obj3Goto = [QTGoto fromJSONDictionary:(id)_obj3Goto];
+        if (!_obj3Goto && dict[@"goto"] && ![dict[@"goto"] isKindOfClass:NSNull.class]) return nil;
         _obj3If = [QTIf fromJSONDictionary:(id)_obj3If];
         if (!_obj3If && dict[@"if"] && ![dict[@"if"] isKindOfClass:NSNull.class]) return nil;
         _obj3Inline = [QTInline fromJSONDictionary:(id)_obj3Inline];
@@ -8967,6 +8991,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"lock": [_lock JSONDictionary],
         @"map": [_map JSONDictionary],
         @"MapEntry": [_mapEntry JSONDictionary],
+        @"MarshalJSON": [_marshalJSON JSONDictionary],
         @"metadata_property_handling": [_metadataPropertyHandling JSONDictionary],
         @"module": [_module JSONDictionary],
         @"mutable": [_mutable JSONDictionary],
@@ -8975,7 +9000,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"native": [_native JSONDictionary],
         @"newtonsoft": [_newtonsoft JSONDictionary],
         @"NO": [_no JSONDictionary],
-        @"noexcept": [_noexcept JSONDictionary],
+        @"goto": [_obj3Goto JSONDictionary],
         @"if": [_obj3If JSONDictionary],
         @"inline": [_obj3Inline JSONDictionary],
         @"int": [_obj3Int JSONDictionary],
@@ -11183,6 +11208,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTMarshalJSON
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"MarshalJSON": @"marshalJSON",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTMarshalJSON alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"MarshalJSON"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"MarshalJSON"] doubleValue] != [dict[@"MarshalJSON"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTMarshalJSON.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTMarshalJSON.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTMarshalJSON.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTMarshalJSON.properties) {
+        id propertyName = QTMarshalJSON.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTMetadataPropertyHandling
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -11539,25 +11616,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTNoexcept
+@implementation QTGoto
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"noexcept": @"noexcept",
+        @"goto": @"gotoGoto",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTNoexcept alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTGoto alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"noexcept"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"noexcept"] doubleValue] != [dict[@"noexcept"] longLongValue]) return nil;
+        if (![dict[@"goto"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"goto"] doubleValue] != [dict[@"goto"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -11565,19 +11642,29 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTNoexcept.properties[key];
+    id resolved = QTGoto.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTNoexcept.properties[key];
+    id resolved = QTGoto.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTNoexcept.properties.allValues];
+    id dict = [[self dictionaryWithValuesForKeys:QTGoto.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTGoto.properties) {
+        id propertyName = QTGoto.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
 }
 @end
 
@@ -12004,6 +12091,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     return properties = properties ? properties : @{
         @"dummy": @"dummy",
         @"noSuchMethod": @"noSuchMethod",
+        @"noexcept": @"noexcept",
         @"None": @"none",
         @"nonlocal": @"nonlocal",
         @"nonmutating": @"nonmutating",
@@ -12066,7 +12154,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"sbyte": @"sbyte",
         @"sealed": @"sealed",
         @"SEL": @"sel",
-        @"select": @"select",
     };
 }
 
@@ -12081,6 +12168,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"dummy"] isKindOfClass:NSNumber.class]) return nil;
         if ([dict[@"dummy"] doubleValue] != [dict[@"dummy"] longLongValue]) 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;
         if (![dict[@"nonmutating"] isKindOfClass:NSDictionary.class]) return nil;
@@ -12143,10 +12231,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"sbyte"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"sealed"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"SEL"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"select"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
         _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];
         if (!_none && dict[@"None"] && ![dict[@"None"] isKindOfClass:NSNull.class]) return nil;
         _nonlocal = [QTNonlocal fromJSONDictionary:(id)_nonlocal];
@@ -12271,8 +12360,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_sealed && dict[@"sealed"] && ![dict[@"sealed"] isKindOfClass:NSNull.class]) return nil;
         _sel = [QTSel fromJSONDictionary:(id)_sel];
         if (!_sel && dict[@"SEL"] && ![dict[@"SEL"] isKindOfClass:NSNull.class]) return nil;
-        _select = [QTSelect fromJSONDictionary:(id)_select];
-        if (!_select && dict[@"select"] && ![dict[@"select"] isKindOfClass:NSNull.class]) return nil;
     }
     return self;
 }
@@ -12303,6 +12390,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
     [dict addEntriesFromDictionary:@{
         @"noSuchMethod": [_noSuchMethod JSONDictionary],
+        @"noexcept": [_noexcept JSONDictionary],
         @"None": [_none JSONDictionary],
         @"nonlocal": [_nonlocal JSONDictionary],
         @"nonmutating": [_nonmutating JSONDictionary],
@@ -12365,7 +12453,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"sbyte": [_sbyte JSONDictionary],
         @"sealed": [_sealed JSONDictionary],
         @"SEL": [_sel JSONDictionary],
-        @"select": [_select JSONDictionary],
     }];
 
     return dict;
@@ -12414,25 +12501,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTNone
+@implementation QTNoexcept
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"None": @"none",
+        @"noexcept": @"noexcept",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTNone alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTNoexcept alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"None"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"None"] doubleValue] != [dict[@"None"] longLongValue]) return nil;
+        if (![dict[@"noexcept"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"noexcept"] doubleValue] != [dict[@"noexcept"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -12440,44 +12527,86 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTNone.properties[key];
+    id resolved = QTNoexcept.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTNone.properties[key];
+    id resolved = QTNoexcept.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    id dict = [[self dictionaryWithValuesForKeys:QTNone.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTNone.properties) {
-        id propertyName = QTNone.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
+    return [self dictionaryWithValuesForKeys:QTNoexcept.properties.allValues];
 }
 @end
 
-@implementation QTNonlocal
+@implementation QTNone
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"nonlocal": @"nonlocal",
+        @"None": @"none",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTNonlocal alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTNone alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"None"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"None"] doubleValue] != [dict[@"None"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTNone.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTNone.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTNone.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTNone.properties) {
+        id propertyName = QTNone.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
+@implementation QTNonlocal
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"nonlocal": @"nonlocal",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTNonlocal alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
@@ -15188,48 +15317,6 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTSelect
-+ (NSDictionary<NSString *, NSString *> *)properties
-{
-    static NSDictionary<NSString *, NSString *> *properties;
-    return properties = properties ? properties : @{
-        @"select": @"select",
-    };
-}
-
-+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
-{
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTSelect alloc] initWithJSONDictionary:dict] : nil;
-}
-
-- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
-{
-    if (self = [super init]) {
-        if (![dict[@"select"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"select"] doubleValue] != [dict[@"select"] longLongValue]) return nil;
-        [self setValuesForKeysWithDictionary:dict];
-    }
-    return self;
-}
-
-- (void)setValue:(nullable id)value forKey:(NSString *)key
-{
-    id resolved = QTSelect.properties[key];
-    if (resolved) [super setValue:value forKey:resolved];
-}
-
-- (void)setNilValueForKey:(NSString *)key
-{
-    id resolved = QTSelect.properties[key];
-    if (resolved) [super setValue:@(0) forKey:resolved];
-}
-
-- (NSDictionary *)JSONDictionary
-{
-    return [self dictionaryWithValuesForKeys:QTSelect.properties.allValues];
-}
-@end
-
 @implementation QTObj5
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -15249,8 +15336,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"typedef": @"obj5Typedef",
         @"typeof": @"obj5Typeof",
         @"union": @"obj5Union",
-        @"unsigned": @"obj5Unsigned",
         @"PrimitiveKind": @"primitiveKind",
+        @"select": @"select",
         @"Self": @"self",
         @"Sendable": @"sendable",
         @"SerialDescriptor": @"serialDescriptor",
@@ -15283,6 +15370,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"TimeOnly": @"timeOnly",
         @"TimeOnlyConverter": @"timeOnlyConverter",
         @"TimeZone": @"timeZone",
+        @"to_dict": @"toDict",
         @"to_json": @"toJSON",
         @"toString": @"toString",
         @"top_level": @"topLevel",
@@ -15296,10 +15384,10 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ulong": @"ulong",
         @"unchecked": @"unchecked",
         @"undefined": @"undefined",
+        @"UnmarshalJSON": @"unmarshalJSON",
         @"unowned": @"unowned",
         @"unsafe": @"unsafe",
         @"UseSerializers": @"useSerializers",
-        @"ushort": @"ushort",
     };
 }
 
@@ -15326,8 +15414,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"typedef"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"typeof"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"union"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"unsigned"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"PrimitiveKind"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"select"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"Self"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"Sendable"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"SerialDescriptor"] isKindOfClass:NSDictionary.class]) return nil;
@@ -15360,6 +15448,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"TimeOnly"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"TimeOnlyConverter"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"TimeZone"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"to_dict"] 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;
@@ -15373,10 +15462,10 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"ulong"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"unchecked"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"undefined"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"UnmarshalJSON"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"unowned"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"unsafe"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"UseSerializers"] isKindOfClass:NSDictionary.class]) return nil;
-        if (![dict[@"ushort"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
         _kSerializer = [QTKSerializer fromJSONDictionary:(id)_kSerializer];
         if (!_kSerializer && dict[@"KSerializer"] && ![dict[@"KSerializer"] isKindOfClass:NSNull.class]) return nil;
@@ -15404,10 +15493,10 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_obj5Typeof && dict[@"typeof"] && ![dict[@"typeof"] isKindOfClass:NSNull.class]) return nil;
         _obj5Union = [QTUnion fromJSONDictionary:(id)_obj5Union];
         if (!_obj5Union && dict[@"union"] && ![dict[@"union"] isKindOfClass:NSNull.class]) return nil;
-        _obj5Unsigned = [QTUnsigned fromJSONDictionary:(id)_obj5Unsigned];
-        if (!_obj5Unsigned && dict[@"unsigned"] && ![dict[@"unsigned"] isKindOfClass:NSNull.class]) return nil;
         _primitiveKind = [QTPrimitiveKind fromJSONDictionary:(id)_primitiveKind];
         if (!_primitiveKind && dict[@"PrimitiveKind"] && ![dict[@"PrimitiveKind"] isKindOfClass:NSNull.class]) return nil;
+        _select = [QTSelect fromJSONDictionary:(id)_select];
+        if (!_select && dict[@"select"] && ![dict[@"select"] isKindOfClass:NSNull.class]) return nil;
         _self = [QTSelf fromJSONDictionary:(id)_self];
         if (!_self && dict[@"Self"] && ![dict[@"Self"] isKindOfClass:NSNull.class]) return nil;
         _sendable = [QTSendable fromJSONDictionary:(id)_sendable];
@@ -15472,6 +15561,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_timeOnlyConverter && dict[@"TimeOnlyConverter"] && ![dict[@"TimeOnlyConverter"] isKindOfClass:NSNull.class]) return nil;
         _timeZone = [QTTimeZone fromJSONDictionary:(id)_timeZone];
         if (!_timeZone && dict[@"TimeZone"] && ![dict[@"TimeZone"] isKindOfClass:NSNull.class]) return nil;
+        _toDict = [QTToDict fromJSONDictionary:(id)_toDict];
+        if (!_toDict && dict[@"to_dict"] && ![dict[@"to_dict"] 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];
@@ -15498,14 +15589,14 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_unchecked && dict[@"unchecked"] && ![dict[@"unchecked"] isKindOfClass:NSNull.class]) return nil;
         _undefined = [QTUndefined fromJSONDictionary:(id)_undefined];
         if (!_undefined && dict[@"undefined"] && ![dict[@"undefined"] isKindOfClass:NSNull.class]) return nil;
+        _unmarshalJSON = [QTUnmarshalJSON fromJSONDictionary:(id)_unmarshalJSON];
+        if (!_unmarshalJSON && dict[@"UnmarshalJSON"] && ![dict[@"UnmarshalJSON"] isKindOfClass:NSNull.class]) return nil;
         _unowned = [QTUnowned fromJSONDictionary:(id)_unowned];
         if (!_unowned && dict[@"unowned"] && ![dict[@"unowned"] isKindOfClass:NSNull.class]) return nil;
         _unsafe = [QTUnsafe fromJSONDictionary:(id)_unsafe];
         if (!_unsafe && dict[@"unsafe"] && ![dict[@"unsafe"] isKindOfClass:NSNull.class]) return nil;
         _useSerializers = [QTUseSerializers fromJSONDictionary:(id)_useSerializers];
         if (!_useSerializers && dict[@"UseSerializers"] && ![dict[@"UseSerializers"] isKindOfClass:NSNull.class]) return nil;
-        _ushort = [QTUshort fromJSONDictionary:(id)_ushort];
-        if (!_ushort && dict[@"ushort"] && ![dict[@"ushort"] isKindOfClass:NSNull.class]) return nil;
     }
     return self;
 }
@@ -15548,8 +15639,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"typedef": [_obj5Typedef JSONDictionary],
         @"typeof": [_obj5Typeof JSONDictionary],
         @"union": [_obj5Union JSONDictionary],
-        @"unsigned": [_obj5Unsigned JSONDictionary],
         @"PrimitiveKind": [_primitiveKind JSONDictionary],
+        @"select": [_select JSONDictionary],
         @"Self": [_self JSONDictionary],
         @"Sendable": [_sendable JSONDictionary],
         @"SerialDescriptor": [_serialDescriptor JSONDictionary],
@@ -15582,6 +15673,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"TimeOnly": [_timeOnly JSONDictionary],
         @"TimeOnlyConverter": [_timeOnlyConverter JSONDictionary],
         @"TimeZone": [_timeZone JSONDictionary],
+        @"to_dict": [_toDict JSONDictionary],
         @"to_json": [_toJSON JSONDictionary],
         @"toString": [_toString JSONDictionary],
         @"top_level": [_topLevel JSONDictionary],
@@ -15595,10 +15687,10 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"ulong": [_ulong JSONDictionary],
         @"unchecked": [_unchecked JSONDictionary],
         @"undefined": [_undefined JSONDictionary],
+        @"UnmarshalJSON": [_unmarshalJSON JSONDictionary],
         @"unowned": [_unowned JSONDictionary],
         @"unsafe": [_unsafe JSONDictionary],
         @"UseSerializers": [_useSerializers JSONDictionary],
-        @"ushort": [_ushort JSONDictionary],
     }];
 
     return dict;
@@ -16261,25 +16353,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTUnsigned
+@implementation QTPrimitiveKind
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"unsigned": @"unsignedUnsigned",
+        @"PrimitiveKind": @"primitiveKind",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnsigned alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTPrimitiveKind alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"unsigned"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"unsigned"] doubleValue] != [dict[@"unsigned"] longLongValue]) return nil;
+        if (![dict[@"PrimitiveKind"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"PrimitiveKind"] doubleValue] != [dict[@"PrimitiveKind"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -16287,22 +16379,22 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTUnsigned.properties[key];
+    id resolved = QTPrimitiveKind.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTUnsigned.properties[key];
+    id resolved = QTPrimitiveKind.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    id dict = [[self dictionaryWithValuesForKeys:QTUnsigned.properties.allValues] mutableCopy];
+    id dict = [[self dictionaryWithValuesForKeys:QTPrimitiveKind.properties.allValues] mutableCopy];
 
-    for (id jsonName in QTUnsigned.properties) {
-        id propertyName = QTUnsigned.properties[jsonName];
+    for (id jsonName in QTPrimitiveKind.properties) {
+        id propertyName = QTPrimitiveKind.properties[jsonName];
         if (![jsonName isEqualToString:propertyName]) {
             dict[jsonName] = dict[propertyName];
             [dict removeObjectForKey:propertyName];
@@ -16313,25 +16405,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTPrimitiveKind
+@implementation QTSelect
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"PrimitiveKind": @"primitiveKind",
+        @"select": @"select",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTPrimitiveKind alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTSelect alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"PrimitiveKind"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"PrimitiveKind"] doubleValue] != [dict[@"PrimitiveKind"] longLongValue]) return nil;
+        if (![dict[@"select"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"select"] doubleValue] != [dict[@"select"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -16339,29 +16431,19 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTPrimitiveKind.properties[key];
+    id resolved = QTSelect.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTPrimitiveKind.properties[key];
+    id resolved = QTSelect.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    id dict = [[self dictionaryWithValuesForKeys:QTPrimitiveKind.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTPrimitiveKind.properties) {
-        id propertyName = QTPrimitiveKind.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
+    return [self dictionaryWithValuesForKeys:QTSelect.properties.allValues];
 }
 @end
 
@@ -17879,6 +17961,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTToDict
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"to_dict": @"toDict",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTToDict alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"to_dict"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"to_dict"] doubleValue] != [dict[@"to_dict"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTToDict.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTToDict.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTToDict.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTToDict.properties) {
+        id propertyName = QTToDict.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTToJSON
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -18455,25 +18589,25 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
-@implementation QTUnowned
+@implementation QTUnmarshalJSON
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"unowned": @"unowned",
+        @"UnmarshalJSON": @"unmarshalJSON",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnowned alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnmarshalJSON alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"unowned"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"unowned"] doubleValue] != [dict[@"unowned"] longLongValue]) return nil;
+        if (![dict[@"UnmarshalJSON"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"UnmarshalJSON"] doubleValue] != [dict[@"UnmarshalJSON"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -18481,41 +18615,51 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTUnowned.properties[key];
+    id resolved = QTUnmarshalJSON.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTUnowned.properties[key];
+    id resolved = QTUnmarshalJSON.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTUnowned.properties.allValues];
+    id dict = [[self dictionaryWithValuesForKeys:QTUnmarshalJSON.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTUnmarshalJSON.properties) {
+        id propertyName = QTUnmarshalJSON.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
 }
 @end
 
-@implementation QTUnsafe
+@implementation QTUnowned
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"unsafe": @"unsafe",
+        @"unowned": @"unowned",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnsafe alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnowned alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"unsafe"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"unsafe"] doubleValue] != [dict[@"unsafe"] longLongValue]) return nil;
+        if (![dict[@"unowned"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"unowned"] doubleValue] != [dict[@"unowned"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -18523,41 +18667,41 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTUnsafe.properties[key];
+    id resolved = QTUnowned.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTUnsafe.properties[key];
+    id resolved = QTUnowned.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTUnsafe.properties.allValues];
+    return [self dictionaryWithValuesForKeys:QTUnowned.properties.allValues];
 }
 @end
 
-@implementation QTUseSerializers
+@implementation QTUnsafe
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"UseSerializers": @"useSerializers",
+        @"unsafe": @"unsafe",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTUseSerializers alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnsafe alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"UseSerializers"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"UseSerializers"] doubleValue] != [dict[@"UseSerializers"] longLongValue]) return nil;
+        if (![dict[@"unsafe"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"unsafe"] doubleValue] != [dict[@"unsafe"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -18565,51 +18709,41 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTUseSerializers.properties[key];
+    id resolved = QTUnsafe.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTUseSerializers.properties[key];
+    id resolved = QTUnsafe.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    id dict = [[self dictionaryWithValuesForKeys:QTUseSerializers.properties.allValues] mutableCopy];
-
-    for (id jsonName in QTUseSerializers.properties) {
-        id propertyName = QTUseSerializers.properties[jsonName];
-        if (![jsonName isEqualToString:propertyName]) {
-            dict[jsonName] = dict[propertyName];
-            [dict removeObjectForKey:propertyName];
-        }
-    }
-
-    return dict;
+    return [self dictionaryWithValuesForKeys:QTUnsafe.properties.allValues];
 }
 @end
 
-@implementation QTUshort
+@implementation QTUseSerializers
 + (NSDictionary<NSString *, NSString *> *)properties
 {
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
-        @"ushort": @"ushort",
+        @"UseSerializers": @"useSerializers",
     };
 }
 
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict
 {
-    return [dict isKindOfClass:NSDictionary.class] ? [[QTUshort alloc] initWithJSONDictionary:dict] : nil;
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUseSerializers alloc] initWithJSONDictionary:dict] : nil;
 }
 
 - (instancetype)initWithJSONDictionary:(NSDictionary *)dict
 {
     if (self = [super init]) {
-        if (![dict[@"ushort"] isKindOfClass:NSNumber.class]) return nil;
-        if ([dict[@"ushort"] doubleValue] != [dict[@"ushort"] longLongValue]) return nil;
+        if (![dict[@"UseSerializers"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"UseSerializers"] doubleValue] != [dict[@"UseSerializers"] longLongValue]) return nil;
         [self setValuesForKeysWithDictionary:dict];
     }
     return self;
@@ -18617,19 +18751,29 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 
 - (void)setValue:(nullable id)value forKey:(NSString *)key
 {
-    id resolved = QTUshort.properties[key];
+    id resolved = QTUseSerializers.properties[key];
     if (resolved) [super setValue:value forKey:resolved];
 }
 
 - (void)setNilValueForKey:(NSString *)key
 {
-    id resolved = QTUshort.properties[key];
+    id resolved = QTUseSerializers.properties[key];
     if (resolved) [super setValue:@(0) forKey:resolved];
 }
 
 - (NSDictionary *)JSONDictionary
 {
-    return [self dictionaryWithValuesForKeys:QTUshort.properties.allValues];
+    id dict = [[self dictionaryWithValuesForKeys:QTUseSerializers.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTUseSerializers.properties) {
+        id propertyName = QTUseSerializers.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
 }
 @end
 
@@ -18639,9 +18783,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     static NSDictionary<NSString *, NSString *> *properties;
     return properties = properties ? properties : @{
         @"dummy": @"dummy",
+        @"unsigned": @"obj6Unsigned",
         @"void": @"obj6Void",
         @"volatile": @"obj6Volatile",
         @"while": @"obj6While",
+        @"ushort": @"ushort",
         @"using": @"using",
         @"Utf8JsonReader": @"utf8JSONReader",
         @"Utf8JsonWriter": @"utf8JSONWriter",
@@ -18670,9 +18816,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     if (self = [super init]) {
         if (![dict[@"dummy"] isKindOfClass:NSNumber.class]) return nil;
         if ([dict[@"dummy"] doubleValue] != [dict[@"dummy"] longLongValue]) return nil;
+        if (![dict[@"unsigned"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"void"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"volatile"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"while"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"ushort"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"using"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"Utf8JsonReader"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"Utf8JsonWriter"] isKindOfClass:NSDictionary.class]) return nil;
@@ -18689,12 +18837,16 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"YES"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"yield"] isKindOfClass:NSDictionary.class]) return nil;
         [self setValuesForKeysWithDictionary:dict];
+        _obj6Unsigned = [QTUnsigned fromJSONDictionary:(id)_obj6Unsigned];
+        if (!_obj6Unsigned && dict[@"unsigned"] && ![dict[@"unsigned"] isKindOfClass:NSNull.class]) return nil;
         _obj6Void = [QTVoid fromJSONDictionary:(id)_obj6Void];
         if (!_obj6Void && dict[@"void"] && ![dict[@"void"] isKindOfClass:NSNull.class]) return nil;
         _obj6Volatile = [QTVolatile fromJSONDictionary:(id)_obj6Volatile];
         if (!_obj6Volatile && dict[@"volatile"] && ![dict[@"volatile"] isKindOfClass:NSNull.class]) return nil;
         _obj6While = [QTWhile fromJSONDictionary:(id)_obj6While];
         if (!_obj6While && dict[@"while"] && ![dict[@"while"] isKindOfClass:NSNull.class]) return nil;
+        _ushort = [QTUshort fromJSONDictionary:(id)_ushort];
+        if (!_ushort && dict[@"ushort"] && ![dict[@"ushort"] isKindOfClass:NSNull.class]) return nil;
         _using = [QTUsing fromJSONDictionary:(id)_using];
         if (!_using && dict[@"using"] && ![dict[@"using"] isKindOfClass:NSNull.class]) return nil;
         _utf8JSONReader = [QTUtf8JSONReader fromJSONDictionary:(id)_utf8JSONReader];
@@ -18754,9 +18906,11 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
     }
 
     [dict addEntriesFromDictionary:@{
+        @"unsigned": [_obj6Unsigned JSONDictionary],
         @"void": [_obj6Void JSONDictionary],
         @"volatile": [_obj6Volatile JSONDictionary],
         @"while": [_obj6While JSONDictionary],
+        @"ushort": [_ushort JSONDictionary],
         @"using": [_using JSONDictionary],
         @"Utf8JsonReader": [_utf8JSONReader JSONDictionary],
         @"Utf8JsonWriter": [_utf8JSONWriter JSONDictionary],
@@ -18778,6 +18932,58 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTUnsigned
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"unsigned": @"unsignedUnsigned",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnsigned alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"unsigned"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"unsigned"] doubleValue] != [dict[@"unsigned"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTUnsigned.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTUnsigned.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTUnsigned.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTUnsigned.properties) {
+        id propertyName = QTUnsigned.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+@end
+
 @implementation QTVoid
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -18934,6 +19140,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTUshort
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"ushort": @"ushort",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUshort alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"ushort"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"ushort"] doubleValue] != [dict[@"ushort"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTUshort.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTUshort.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTUshort.properties.allValues];
+}
+@end
+
 @implementation QTUsing
 + (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 7017422..35f52e1 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
@@ -10787,13 +10787,13 @@ class Obj2 {
     private FormatException $formatException; // json:FormatException Required
     private Friend $friend; // json:friend Required
     private From $from; // json:from Required
+    private FromDict $fromDict; // json:from_dict Required
     private FromJSON $fromJSON; // json:from_json Required
     private Func $func; // json:func Required
     private FunctionClass $function; // json:function Required
     private Get $get; // json:get Required
     private GlobalClass $global; // json:global Required
     private Go $go; // json:go Required
-    private GotoClass $goto; // json:goto Required
     private Obj2False $obj2False; // json:false Required
 
     /**
@@ -10854,16 +10854,16 @@ class Obj2 {
      * @param FormatException $formatException
      * @param Friend $friend
      * @param From $from
+     * @param FromDict $fromDict
      * @param FromJSON $fromJSON
      * @param Func $func
      * @param FunctionClass $function
      * @param Get $get
      * @param GlobalClass $global
      * @param Go $go
-     * @param GotoClass $goto
      * @param Obj2False $obj2False
      */
-    public function __construct(DateFormatter $dateFormatter, DateOnly $dateOnly, DateOnlyConverter $dateOnlyConverter, DateParseHandling $dateParseHandling, DateTimeClass $dateTime, DateTimeStyles $dateTimeStyles, Debugger $debugger, Decimal $decimal, DeclareClass $declare, Decltype $decltype, DecodeString $decodeString, Decoder $decoder, DecodingError $decodingError, 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, Encoder $encoder, EnumClass $enum, EnumValues $enumValues, EqualityContract $equalityContract, Equatable $equatable, 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, FormatException $formatException, Friend $friend, From $from, FromJSON $fromJSON, Func $func, FunctionClass $function, Get $get, GlobalClass $global, Go $go, GotoClass $goto, Obj2False $obj2False) {
+    public function __construct(DateFormatter $dateFormatter, DateOnly $dateOnly, DateOnlyConverter $dateOnlyConverter, DateParseHandling $dateParseHandling, DateTimeClass $dateTime, DateTimeStyles $dateTimeStyles, Debugger $debugger, Decimal $decimal, DeclareClass $declare, Decltype $decltype, DecodeString $decodeString, Decoder $decoder, DecodingError $decodingError, 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, Encoder $encoder, EnumClass $enum, EnumValues $enumValues, EqualityContract $equalityContract, Equatable $equatable, 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, FormatException $formatException, Friend $friend, From $from, FromDict $fromDict, FromJSON $fromJSON, Func $func, FunctionClass $function, Get $get, GlobalClass $global, Go $go, Obj2False $obj2False) {
         $this->dateFormatter = $dateFormatter;
         $this->dateOnly = $dateOnly;
         $this->dateOnlyConverter = $dateOnlyConverter;
@@ -10921,13 +10921,13 @@ class Obj2 {
         $this->formatException = $formatException;
         $this->friend = $friend;
         $this->from = $from;
+        $this->fromDict = $fromDict;
         $this->fromJSON = $fromJSON;
         $this->func = $func;
         $this->function = $function;
         $this->get = $get;
         $this->global = $global;
         $this->go = $go;
-        $this->goto = $goto;
         $this->obj2False = $obj2False;
     }
 
@@ -11896,7 +11896,7 @@ class Obj2 {
      * @throws Exception
      * @return Dict
      */
-    public static function fromDict(stdClass $value): Dict {
+    public static function purpleFromDict(stdClass $value): Dict {
         return Dict::from($value); /*class*/
     }
 
@@ -13666,6 +13666,54 @@ class Obj2 {
         return From::sample(); /*87:from*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return FromDict
+     */
+    public static function fromFromDict(stdClass $value): FromDict {
+        return FromDict::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toFromDict(): stdClass {
+        if (Obj2::validateFromDict($this->fromDict))  {
+            return $this->fromDict->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj2::fromDict');
+    }
+
+    /**
+     * @param FromDict
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateFromDict(FromDict $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return FromDict
+     */
+    public function getFromDict(): FromDict {
+        if (Obj2::validateFromDict($this->fromDict))  {
+            return $this->fromDict;
+        }
+        throw new Exception('never get to getFromDict Obj2::fromDict');
+    }
+
+    /**
+     * @return FromDict
+     */
+    public static function sampleFromDict(): FromDict {
+        return FromDict::sample(); /*88:fromDict*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -13711,7 +13759,7 @@ class Obj2 {
      * @return FromJSON
      */
     public static function sampleFromJSON(): FromJSON {
-        return FromJSON::sample(); /*88:fromJSON*/
+        return FromJSON::sample(); /*89:fromJSON*/
     }
 
     /**
@@ -13759,7 +13807,7 @@ class Obj2 {
      * @return Func
      */
     public static function sampleFunc(): Func {
-        return Func::sample(); /*89:func*/
+        return Func::sample(); /*90:func*/
     }
 
     /**
@@ -13807,7 +13855,7 @@ class Obj2 {
      * @return FunctionClass
      */
     public static function sampleFunction(): FunctionClass {
-        return FunctionClass::sample(); /*90:function*/
+        return FunctionClass::sample(); /*91:function*/
     }
 
     /**
@@ -13855,7 +13903,7 @@ class Obj2 {
      * @return Get
      */
     public static function sampleGet(): Get {
-        return Get::sample(); /*91:get*/
+        return Get::sample(); /*92:get*/
     }
 
     /**
@@ -13903,7 +13951,7 @@ class Obj2 {
      * @return GlobalClass
      */
     public static function sampleGlobal(): GlobalClass {
-        return GlobalClass::sample(); /*92:global*/
+        return GlobalClass::sample(); /*93:global*/
     }
 
     /**
@@ -13951,55 +13999,7 @@ class Obj2 {
      * @return Go
      */
     public static function sampleGo(): Go {
-        return Go::sample(); /*93:go*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return GotoClass
-     */
-    public static function fromGoto(stdClass $value): GotoClass {
-        return GotoClass::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toGoto(): stdClass {
-        if (Obj2::validateGoto($this->goto))  {
-            return $this->goto->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj2::goto');
-    }
-
-    /**
-     * @param GotoClass
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateGoto(GotoClass $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return GotoClass
-     */
-    public function getGoto(): GotoClass {
-        if (Obj2::validateGoto($this->goto))  {
-            return $this->goto;
-        }
-        throw new Exception('never get to getGoto Obj2::goto');
-    }
-
-    /**
-     * @return GotoClass
-     */
-    public static function sampleGoto(): GotoClass {
-        return GotoClass::sample(); /*94:goto*/
+        return Go::sample(); /*94:go*/
     }
 
     /**
@@ -14112,13 +14112,13 @@ class Obj2 {
         || Obj2::validateFormatException($this->formatException)
         || Obj2::validateFriend($this->friend)
         || Obj2::validateFrom($this->from)
+        || Obj2::validateFromDict($this->fromDict)
         || Obj2::validateFromJSON($this->fromJSON)
         || Obj2::validateFunc($this->func)
         || Obj2::validateFunction($this->function)
         || Obj2::validateGet($this->get)
         || Obj2::validateGlobal($this->global)
         || Obj2::validateGo($this->go)
-        || Obj2::validateGoto($this->goto)
         || Obj2::validateObj2False($this->obj2False);
     }
 
@@ -14185,13 +14185,13 @@ class Obj2 {
         $out->{'FormatException'} = $this->toFormatException();
         $out->{'friend'} = $this->toFriend();
         $out->{'from'} = $this->toFrom();
+        $out->{'from_dict'} = $this->toFromDict();
         $out->{'from_json'} = $this->toFromJSON();
         $out->{'func'} = $this->toFunc();
         $out->{'function'} = $this->toFunction();
         $out->{'get'} = $this->toGet();
         $out->{'global'} = $this->toGlobal();
         $out->{'go'} = $this->toGo();
-        $out->{'goto'} = $this->toGoto();
         $out->{'false'} = $this->toObj2False();
         return $out;
     }
@@ -14373,6 +14373,9 @@ class Obj2 {
         if (!property_exists($obj, 'from')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'from_dict')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'from_json')) {
             throw new Exception("Missing required property");
         }
@@ -14391,9 +14394,6 @@ class Obj2 {
         if (!property_exists($obj, 'go')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'goto')) {
-            throw new Exception("Missing required property");
-        }
         if (!property_exists($obj, 'false')) {
             throw new Exception("Missing required property");
         }
@@ -14418,7 +14418,7 @@ class Obj2 {
         ,Obj2::fromDel($obj->{'del'})
         ,Obj2::fromDelegate($obj->{'delegate'})
         ,Obj2::fromDelete($obj->{'delete'})
-        ,Obj2::fromDict($obj->{'dict'})
+        ,Obj2::purpleFromDict($obj->{'dict'})
         ,Obj2::fromDictionary($obj->{'dictionary'})
         ,Obj2::fromDidSet($obj->{'didSet'})
         ,Obj2::fromDo($obj->{'do'})
@@ -14455,13 +14455,13 @@ class Obj2 {
         ,Obj2::fromFormatException($obj->{'FormatException'})
         ,Obj2::fromFriend($obj->{'friend'})
         ,Obj2::fromFrom($obj->{'from'})
+        ,Obj2::fromFromDict($obj->{'from_dict'})
         ,Obj2::fromFromJSON($obj->{'from_json'})
         ,Obj2::fromFunc($obj->{'func'})
         ,Obj2::fromFunction($obj->{'function'})
         ,Obj2::fromGet($obj->{'get'})
         ,Obj2::fromGlobal($obj->{'global'})
         ,Obj2::fromGo($obj->{'go'})
-        ,Obj2::fromGoto($obj->{'goto'})
         ,Obj2::fromObj2False($obj->{'false'})
         );
     }
@@ -14528,13 +14528,13 @@ class Obj2 {
         ,Obj2::sampleFormatException()
         ,Obj2::sampleFriend()
         ,Obj2::sampleFrom()
+        ,Obj2::sampleFromDict()
         ,Obj2::sampleFromJSON()
         ,Obj2::sampleFunc()
         ,Obj2::sampleFunction()
         ,Obj2::sampleGet()
         ,Obj2::sampleGlobal()
         ,Obj2::sampleGo()
-        ,Obj2::sampleGoto()
         ,Obj2::sampleObj2False()
         );
     }
@@ -20264,6 +20264,107 @@ class From {
     }
 }
 
+// This is an autogenerated file:FromDict
+
+class FromDict {
+    private int $fromDict; // json:from_dict Required
+
+    /**
+     * @param int $fromDict
+     */
+    public function __construct(int $fromDict) {
+        $this->fromDict = $fromDict;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromFromDict(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toFromDict(): int {
+        if (FromDict::validateFromDict($this->fromDict))  {
+            return $this->fromDict; /*int*/
+        }
+        throw new Exception('never get to this FromDict::fromDict');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateFromDict(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getFromDict(): int {
+        if (FromDict::validateFromDict($this->fromDict))  {
+            return $this->fromDict;
+        }
+        throw new Exception('never get to getFromDict FromDict::fromDict');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleFromDict(): int {
+        return 31; /*31:fromDict*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return FromDict::validateFromDict($this->fromDict);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'from_dict'} = $this->toFromDict();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return FromDict
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): FromDict {
+        if (!property_exists($obj, 'from_dict')) {
+            throw new Exception("Missing required property");
+        }
+        return new FromDict(
+         FromDict::fromFromDict($obj->{'from_dict'})
+        );
+    }
+
+    /**
+     * @return FromDict
+     */
+    public static function sample(): FromDict {
+        return new FromDict(
+         FromDict::sampleFromDict()
+        );
+    }
+}
+
 // This is an autogenerated file:FromJSON
 
 class FromJSON {
@@ -20870,107 +20971,6 @@ class Go {
     }
 }
 
-// This is an autogenerated file:GotoClass
-
-class GotoClass {
-    private int $goto; // json:goto Required
-
-    /**
-     * @param int $goto
-     */
-    public function __construct(int $goto) {
-        $this->goto = $goto;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromGoto(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toGoto(): int {
-        if (GotoClass::validateGoto($this->goto))  {
-            return $this->goto; /*int*/
-        }
-        throw new Exception('never get to this GotoClass::goto');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateGoto(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getGoto(): int {
-        if (GotoClass::validateGoto($this->goto))  {
-            return $this->goto;
-        }
-        throw new Exception('never get to getGoto GotoClass::goto');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleGoto(): int {
-        return 31; /*31:goto*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return GotoClass::validateGoto($this->goto);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'goto'} = $this->toGoto();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return GotoClass
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): GotoClass {
-        if (!property_exists($obj, 'goto')) {
-            throw new Exception("Missing required property");
-        }
-        return new GotoClass(
-         GotoClass::fromGoto($obj->{'goto'})
-        );
-    }
-
-    /**
-     * @return GotoClass
-     */
-    public static function sample(): GotoClass {
-        return new GotoClass(
-         GotoClass::sampleGoto()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj2False
 
 class Obj2False {
@@ -21076,6 +21076,7 @@ class Obj2False {
 
 class Obj3 {
     private int $dummy; // json:dummy Required
+    private GotoClass $goto; // json:goto Required
     private Guard $guard; // json:guard Required
     private HasOwnProperty $hasOwnProperty; // json:hasOwnProperty Required
     private HashCode $hashCode; // json:hashCode Required
@@ -21129,6 +21130,7 @@ class Obj3 {
     private Long $long; // json:long Required
     private Map $map; // json:map Required
     private MapEntry $mapEntry; // json:MapEntry Required
+    private MarshalJSON $marshalJSON; // json:MarshalJSON Required
     private MetadataPropertyHandling $metadataPropertyHandling; // json:metadata_property_handling Required
     private Module $module; // json:module Required
     private Mutable $mutable; // json:mutable Required
@@ -21139,10 +21141,10 @@ class Obj3 {
     private Newtonsoft $newtonsoft; // json:newtonsoft Required
     private Nil $nil; // json:nil Required
     private No $no; // json:NO Required
-    private Noexcept $noexcept; // json:noexcept Required
 
     /**
      * @param int $dummy
+     * @param GotoClass $goto
      * @param Guard $guard
      * @param HasOwnProperty $hasOwnProperty
      * @param HashCode $hashCode
@@ -21196,6 +21198,7 @@ class Obj3 {
      * @param Long $long
      * @param Map $map
      * @param MapEntry $mapEntry
+     * @param MarshalJSON $marshalJSON
      * @param MetadataPropertyHandling $metadataPropertyHandling
      * @param Module $module
      * @param Mutable $mutable
@@ -21206,10 +21209,10 @@ class Obj3 {
      * @param Newtonsoft $newtonsoft
      * @param Nil $nil
      * @param No $no
-     * @param Noexcept $noexcept
      */
-    public function __construct(int $dummy, Guard $guard, HasOwnProperty $hasOwnProperty, HashCode $hashCode, Hashable $hashable, Hasher $hasher, 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, Is $is, ISODateTimeOffsetConverter $isoDateTimeOffsetConverter, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONAny $jsonAny, JSONCodingKey $jsonCodingKey, JSONConverter $jsonConverter, JSONDecoder $jsonDecoder, JSONEncoder $jsonEncoder, JSONExceptionClass $jsonException, JSONGenerator $jsonGenerator, JSONNode $jsonNode, JSONNull $jsonNull, JSONParser $jsonParser, JSONReader $jsonReader, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONTokenType $jsonTokenType, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, LocaleClass $locale, Lock $lock, Long $long, Map $map, MapEntry $mapEntry, MetadataPropertyHandling $metadataPropertyHandling, Module $module, Mutable $mutable, Mutating $mutating, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no, Noexcept $noexcept) {
+    public function __construct(int $dummy, GotoClass $goto, Guard $guard, HasOwnProperty $hasOwnProperty, HashCode $hashCode, Hashable $hashable, Hasher $hasher, 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, Is $is, ISODateTimeOffsetConverter $isoDateTimeOffsetConverter, IterableClass $iterable, Jdec $jdec, Jenc $jenc, Jpipe $jpipe, JSON $json, JSONAny $jsonAny, JSONCodingKey $jsonCodingKey, JSONConverter $jsonConverter, JSONDecoder $jsonDecoder, JSONEncoder $jsonEncoder, JSONExceptionClass $jsonException, JSONGenerator $jsonGenerator, JSONNode $jsonNode, JSONNull $jsonNull, JSONParser $jsonParser, JSONReader $jsonReader, JSONSerializer $jsonSerializer, JSONToken $jsonToken, JSONTokenType $jsonTokenType, JSONWriter $jsonWriter, Lambda $lambda, Lazy $lazy, Left $left, Let $let, ListClass $list, LocaleClass $locale, Lock $lock, Long $long, Map $map, MapEntry $mapEntry, MarshalJSON $marshalJSON, MetadataPropertyHandling $metadataPropertyHandling, Module $module, Mutable $mutable, Mutating $mutating, NamespaceClass $namespace, Native $native, NewClass $new, Newtonsoft $newtonsoft, Nil $nil, No $no) {
         $this->dummy = $dummy;
+        $this->goto = $goto;
         $this->guard = $guard;
         $this->hasOwnProperty = $hasOwnProperty;
         $this->hashCode = $hashCode;
@@ -21263,6 +21266,7 @@ class Obj3 {
         $this->long = $long;
         $this->map = $map;
         $this->mapEntry = $mapEntry;
+        $this->marshalJSON = $marshalJSON;
         $this->metadataPropertyHandling = $metadataPropertyHandling;
         $this->module = $module;
         $this->mutable = $mutable;
@@ -21273,7 +21277,6 @@ class Obj3 {
         $this->newtonsoft = $newtonsoft;
         $this->nil = $nil;
         $this->no = $no;
-        $this->noexcept = $noexcept;
     }
 
     /**
@@ -21323,6 +21326,54 @@ class Obj3 {
         return 31; /*31:dummy*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return GotoClass
+     */
+    public static function fromGoto(stdClass $value): GotoClass {
+        return GotoClass::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toGoto(): stdClass {
+        if (Obj3::validateGoto($this->goto))  {
+            return $this->goto->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj3::goto');
+    }
+
+    /**
+     * @param GotoClass
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateGoto(GotoClass $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return GotoClass
+     */
+    public function getGoto(): GotoClass {
+        if (Obj3::validateGoto($this->goto))  {
+            return $this->goto;
+        }
+        throw new Exception('never get to getGoto Obj3::goto');
+    }
+
+    /**
+     * @return GotoClass
+     */
+    public static function sampleGoto(): GotoClass {
+        return GotoClass::sample(); /*32:goto*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -21368,7 +21419,7 @@ class Obj3 {
      * @return Guard
      */
     public static function sampleGuard(): Guard {
-        return Guard::sample(); /*32:guard*/
+        return Guard::sample(); /*33:guard*/
     }
 
     /**
@@ -21416,7 +21467,7 @@ class Obj3 {
      * @return HasOwnProperty
      */
     public static function sampleHasOwnProperty(): HasOwnProperty {
-        return HasOwnProperty::sample(); /*33:hasOwnProperty*/
+        return HasOwnProperty::sample(); /*34:hasOwnProperty*/
     }
 
     /**
@@ -21464,7 +21515,7 @@ class Obj3 {
      * @return HashCode
      */
     public static function sampleHashCode(): HashCode {
-        return HashCode::sample(); /*34:hashCode*/
+        return HashCode::sample(); /*35:hashCode*/
     }
 
     /**
@@ -21512,7 +21563,7 @@ class Obj3 {
      * @return Hashable
      */
     public static function sampleHashable(): Hashable {
-        return Hashable::sample(); /*35:hashable*/
+        return Hashable::sample(); /*36:hashable*/
     }
 
     /**
@@ -21560,7 +21611,7 @@ class Obj3 {
      * @return Hasher
      */
     public static function sampleHasher(): Hasher {
-        return Hasher::sample(); /*36:hasher*/
+        return Hasher::sample(); /*37:hasher*/
     }
 
     /**
@@ -21608,7 +21659,7 @@ class Obj3 {
      * @return ID
      */
     public static function sampleID(): ID {
-        return ID::sample(); /*37:id*/
+        return ID::sample(); /*38:id*/
     }
 
     /**
@@ -21656,7 +21707,7 @@ class Obj3 {
      * @return IfClass
      */
     public static function sampleIf(): IfClass {
-        return IfClass::sample(); /*38:if*/
+        return IfClass::sample(); /*39:if*/
     }
 
     /**
@@ -21704,7 +21755,7 @@ class Obj3 {
      * @return Imp
      */
     public static function sampleImp(): Imp {
-        return Imp::sample(); /*39:imp*/
+        return Imp::sample(); /*40:imp*/
     }
 
     /**
@@ -21752,7 +21803,7 @@ class Obj3 {
      * @return ImplementsClass
      */
     public static function sampleImplements(): ImplementsClass {
-        return ImplementsClass::sample(); /*40:implements*/
+        return ImplementsClass::sample(); /*41:implements*/
     }
 
     /**
@@ -21800,7 +21851,7 @@ class Obj3 {
      * @return Implicit
      */
     public static function sampleImplicit(): Implicit {
-        return Implicit::sample(); /*41:implicit*/
+        return Implicit::sample(); /*42:implicit*/
     }
 
     /**
@@ -21848,7 +21899,7 @@ class Obj3 {
      * @return Import
      */
     public static function sampleImport(): Import {
-        return Import::sample(); /*42:import*/
+        return Import::sample(); /*43:import*/
     }
 
     /**
@@ -21896,7 +21947,7 @@ class Obj3 {
      * @return In
      */
     public static function sampleIn(): In {
-        return In::sample(); /*43:in*/
+        return In::sample(); /*44:in*/
     }
 
     /**
@@ -21944,7 +21995,7 @@ class Obj3 {
      * @return Indirect
      */
     public static function sampleIndirect(): Indirect {
-        return Indirect::sample(); /*44:indirect*/
+        return Indirect::sample(); /*45:indirect*/
     }
 
     /**
@@ -21992,7 +22043,7 @@ class Obj3 {
      * @return Infix
      */
     public static function sampleInfix(): Infix {
-        return Infix::sample(); /*45:infix*/
+        return Infix::sample(); /*46:infix*/
     }
 
     /**
@@ -22040,7 +22091,7 @@ class Obj3 {
      * @return Init
      */
     public static function sampleInit(): Init {
-        return Init::sample(); /*46:init*/
+        return Init::sample(); /*47:init*/
     }
 
     /**
@@ -22088,7 +22139,7 @@ class Obj3 {
      * @return Inline
      */
     public static function sampleInline(): Inline {
-        return Inline::sample(); /*47:inline*/
+        return Inline::sample(); /*48:inline*/
     }
 
     /**
@@ -22136,7 +22187,7 @@ class Obj3 {
      * @return Inout
      */
     public static function sampleInout(): Inout {
-        return Inout::sample(); /*48:inout*/
+        return Inout::sample(); /*49:inout*/
     }
 
     /**
@@ -22184,7 +22235,7 @@ class Obj3 {
      * @return InstanceofClass
      */
     public static function sampleInstanceof(): InstanceofClass {
-        return InstanceofClass::sample(); /*49:instanceof*/
+        return InstanceofClass::sample(); /*50:instanceof*/
     }
 
     /**
@@ -22232,7 +22283,7 @@ class Obj3 {
      * @return IntClass
      */
     public static function sampleInt(): IntClass {
-        return IntClass::sample(); /*50:int*/
+        return IntClass::sample(); /*51:int*/
     }
 
     /**
@@ -22280,7 +22331,7 @@ class Obj3 {
      * @return InterfaceClass
      */
     public static function sampleInterface(): InterfaceClass {
-        return InterfaceClass::sample(); /*51:interface*/
+        return InterfaceClass::sample(); /*52:interface*/
     }
 
     /**
@@ -22328,7 +22379,7 @@ class Obj3 {
      * @return Internal
      */
     public static function sampleInternal(): Internal {
-        return Internal::sample(); /*52:internal*/
+        return Internal::sample(); /*53:internal*/
     }
 
     /**
@@ -22376,7 +22427,7 @@ class Obj3 {
      * @return Is
      */
     public static function sampleIs(): Is {
-        return Is::sample(); /*53:is*/
+        return Is::sample(); /*54:is*/
     }
 
     /**
@@ -22424,7 +22475,7 @@ class Obj3 {
      * @return ISODateTimeOffsetConverter
      */
     public static function sampleISODateTimeOffsetConverter(): ISODateTimeOffsetConverter {
-        return ISODateTimeOffsetConverter::sample(); /*54:isoDateTimeOffsetConverter*/
+        return ISODateTimeOffsetConverter::sample(); /*55:isoDateTimeOffsetConverter*/
     }
 
     /**
@@ -22472,7 +22523,7 @@ class Obj3 {
      * @return IterableClass
      */
     public static function sampleIterable(): IterableClass {
-        return IterableClass::sample(); /*55:iterable*/
+        return IterableClass::sample(); /*56:iterable*/
     }
 
     /**
@@ -22520,7 +22571,7 @@ class Obj3 {
      * @return Jdec
      */
     public static function sampleJdec(): Jdec {
-        return Jdec::sample(); /*56:jdec*/
+        return Jdec::sample(); /*57:jdec*/
     }
 
     /**
@@ -22568,7 +22619,7 @@ class Obj3 {
      * @return Jenc
      */
     public static function sampleJenc(): Jenc {
-        return Jenc::sample(); /*57:jenc*/
+        return Jenc::sample(); /*58:jenc*/
     }
 
     /**
@@ -22616,7 +22667,7 @@ class Obj3 {
      * @return Jpipe
      */
     public static function sampleJpipe(): Jpipe {
-        return Jpipe::sample(); /*58:jpipe*/
+        return Jpipe::sample(); /*59:jpipe*/
     }
 
     /**
@@ -22664,7 +22715,7 @@ class Obj3 {
      * @return JSON
      */
     public static function sampleJSON(): JSON {
-        return JSON::sample(); /*59:json*/
+        return JSON::sample(); /*60:json*/
     }
 
     /**
@@ -22712,7 +22763,7 @@ class Obj3 {
      * @return JSONAny
      */
     public static function sampleJSONAny(): JSONAny {
-        return JSONAny::sample(); /*60:jsonAny*/
+        return JSONAny::sample(); /*61:jsonAny*/
     }
 
     /**
@@ -22760,7 +22811,7 @@ class Obj3 {
      * @return JSONCodingKey
      */
     public static function sampleJSONCodingKey(): JSONCodingKey {
-        return JSONCodingKey::sample(); /*61:jsonCodingKey*/
+        return JSONCodingKey::sample(); /*62:jsonCodingKey*/
     }
 
     /**
@@ -22808,7 +22859,7 @@ class Obj3 {
      * @return JSONConverter
      */
     public static function sampleJSONConverter(): JSONConverter {
-        return JSONConverter::sample(); /*62:jsonConverter*/
+        return JSONConverter::sample(); /*63:jsonConverter*/
     }
 
     /**
@@ -22856,7 +22907,7 @@ class Obj3 {
      * @return JSONDecoder
      */
     public static function sampleJSONDecoder(): JSONDecoder {
-        return JSONDecoder::sample(); /*63:jsonDecoder*/
+        return JSONDecoder::sample(); /*64:jsonDecoder*/
     }
 
     /**
@@ -22904,7 +22955,7 @@ class Obj3 {
      * @return JSONEncoder
      */
     public static function sampleJSONEncoder(): JSONEncoder {
-        return JSONEncoder::sample(); /*64:jsonEncoder*/
+        return JSONEncoder::sample(); /*65:jsonEncoder*/
     }
 
     /**
@@ -22952,7 +23003,7 @@ class Obj3 {
      * @return JSONExceptionClass
      */
     public static function sampleJSONException(): JSONExceptionClass {
-        return JSONExceptionClass::sample(); /*65:jsonException*/
+        return JSONExceptionClass::sample(); /*66:jsonException*/
     }
 
     /**
@@ -23000,7 +23051,7 @@ class Obj3 {
      * @return JSONGenerator
      */
     public static function sampleJSONGenerator(): JSONGenerator {
-        return JSONGenerator::sample(); /*66:jsonGenerator*/
+        return JSONGenerator::sample(); /*67:jsonGenerator*/
     }
 
     /**
@@ -23048,7 +23099,7 @@ class Obj3 {
      * @return JSONNode
      */
     public static function sampleJSONNode(): JSONNode {
-        return JSONNode::sample(); /*67:jsonNode*/
+        return JSONNode::sample(); /*68:jsonNode*/
     }
 
     /**
@@ -23096,7 +23147,7 @@ class Obj3 {
      * @return JSONNull
      */
     public static function sampleJSONNull(): JSONNull {
-        return JSONNull::sample(); /*68:jsonNull*/
+        return JSONNull::sample(); /*69:jsonNull*/
     }
 
     /**
@@ -23144,7 +23195,7 @@ class Obj3 {
      * @return JSONParser
      */
     public static function sampleJSONParser(): JSONParser {
-        return JSONParser::sample(); /*69:jsonParser*/
+        return JSONParser::sample(); /*70:jsonParser*/
     }
 
     /**
@@ -23192,7 +23243,7 @@ class Obj3 {
      * @return JSONReader
      */
     public static function sampleJSONReader(): JSONReader {
-        return JSONReader::sample(); /*70:jsonReader*/
+        return JSONReader::sample(); /*71:jsonReader*/
     }
 
     /**
@@ -23240,7 +23291,7 @@ class Obj3 {
      * @return JSONSerializer
      */
     public static function sampleJSONSerializer(): JSONSerializer {
-        return JSONSerializer::sample(); /*71:jsonSerializer*/
+        return JSONSerializer::sample(); /*72:jsonSerializer*/
     }
 
     /**
@@ -23288,7 +23339,7 @@ class Obj3 {
      * @return JSONToken
      */
     public static function sampleJSONToken(): JSONToken {
-        return JSONToken::sample(); /*72:jsonToken*/
+        return JSONToken::sample(); /*73:jsonToken*/
     }
 
     /**
@@ -23336,7 +23387,7 @@ class Obj3 {
      * @return JSONTokenType
      */
     public static function sampleJSONTokenType(): JSONTokenType {
-        return JSONTokenType::sample(); /*73:jsonTokenType*/
+        return JSONTokenType::sample(); /*74:jsonTokenType*/
     }
 
     /**
@@ -23384,7 +23435,7 @@ class Obj3 {
      * @return JSONWriter
      */
     public static function sampleJSONWriter(): JSONWriter {
-        return JSONWriter::sample(); /*74:jsonWriter*/
+        return JSONWriter::sample(); /*75:jsonWriter*/
     }
 
     /**
@@ -23432,7 +23483,7 @@ class Obj3 {
      * @return Lambda
      */
     public static function sampleLambda(): Lambda {
-        return Lambda::sample(); /*75:lambda*/
+        return Lambda::sample(); /*76:lambda*/
     }
 
     /**
@@ -23480,7 +23531,7 @@ class Obj3 {
      * @return Lazy
      */
     public static function sampleLazy(): Lazy {
-        return Lazy::sample(); /*76:lazy*/
+        return Lazy::sample(); /*77:lazy*/
     }
 
     /**
@@ -23528,7 +23579,7 @@ class Obj3 {
      * @return Left
      */
     public static function sampleLeft(): Left {
-        return Left::sample(); /*77:left*/
+        return Left::sample(); /*78:left*/
     }
 
     /**
@@ -23576,7 +23627,7 @@ class Obj3 {
      * @return Let
      */
     public static function sampleLet(): Let {
-        return Let::sample(); /*78:let*/
+        return Let::sample(); /*79:let*/
     }
 
     /**
@@ -23624,7 +23675,7 @@ class Obj3 {
      * @return ListClass
      */
     public static function sampleList(): ListClass {
-        return ListClass::sample(); /*79:list*/
+        return ListClass::sample(); /*80:list*/
     }
 
     /**
@@ -23672,7 +23723,7 @@ class Obj3 {
      * @return LocaleClass
      */
     public static function sampleLocale(): LocaleClass {
-        return LocaleClass::sample(); /*80:locale*/
+        return LocaleClass::sample(); /*81:locale*/
     }
 
     /**
@@ -23720,7 +23771,7 @@ class Obj3 {
      * @return Lock
      */
     public static function sampleLock(): Lock {
-        return Lock::sample(); /*81:lock*/
+        return Lock::sample(); /*82:lock*/
     }
 
     /**
@@ -23768,7 +23819,7 @@ class Obj3 {
      * @return Long
      */
     public static function sampleLong(): Long {
-        return Long::sample(); /*82:long*/
+        return Long::sample(); /*83:long*/
     }
 
     /**
@@ -23816,7 +23867,7 @@ class Obj3 {
      * @return Map
      */
     public static function sampleMap(): Map {
-        return Map::sample(); /*83:map*/
+        return Map::sample(); /*84:map*/
     }
 
     /**
@@ -23864,7 +23915,55 @@ class Obj3 {
      * @return MapEntry
      */
     public static function sampleMapEntry(): MapEntry {
-        return MapEntry::sample(); /*84:mapEntry*/
+        return MapEntry::sample(); /*85:mapEntry*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return MarshalJSON
+     */
+    public static function fromMarshalJSON(stdClass $value): MarshalJSON {
+        return MarshalJSON::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toMarshalJSON(): stdClass {
+        if (Obj3::validateMarshalJSON($this->marshalJSON))  {
+            return $this->marshalJSON->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj3::marshalJSON');
+    }
+
+    /**
+     * @param MarshalJSON
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMarshalJSON(MarshalJSON $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return MarshalJSON
+     */
+    public function getMarshalJSON(): MarshalJSON {
+        if (Obj3::validateMarshalJSON($this->marshalJSON))  {
+            return $this->marshalJSON;
+        }
+        throw new Exception('never get to getMarshalJSON Obj3::marshalJSON');
+    }
+
+    /**
+     * @return MarshalJSON
+     */
+    public static function sampleMarshalJSON(): MarshalJSON {
+        return MarshalJSON::sample(); /*86:marshalJSON*/
     }
 
     /**
@@ -23912,7 +24011,7 @@ class Obj3 {
      * @return MetadataPropertyHandling
      */
     public static function sampleMetadataPropertyHandling(): MetadataPropertyHandling {
-        return MetadataPropertyHandling::sample(); /*85:metadataPropertyHandling*/
+        return MetadataPropertyHandling::sample(); /*87:metadataPropertyHandling*/
     }
 
     /**
@@ -23960,7 +24059,7 @@ class Obj3 {
      * @return Module
      */
     public static function sampleModule(): Module {
-        return Module::sample(); /*86:module*/
+        return Module::sample(); /*88:module*/
     }
 
     /**
@@ -24008,7 +24107,7 @@ class Obj3 {
      * @return Mutable
      */
     public static function sampleMutable(): Mutable {
-        return Mutable::sample(); /*87:mutable*/
+        return Mutable::sample(); /*89:mutable*/
     }
 
     /**
@@ -24056,7 +24155,7 @@ class Obj3 {
      * @return Mutating
      */
     public static function sampleMutating(): Mutating {
-        return Mutating::sample(); /*88:mutating*/
+        return Mutating::sample(); /*90:mutating*/
     }
 
     /**
@@ -24104,7 +24203,7 @@ class Obj3 {
      * @return NamespaceClass
      */
     public static function sampleNamespace(): NamespaceClass {
-        return NamespaceClass::sample(); /*89:namespace*/
+        return NamespaceClass::sample(); /*91:namespace*/
     }
 
     /**
@@ -24152,7 +24251,7 @@ class Obj3 {
      * @return Native
      */
     public static function sampleNative(): Native {
-        return Native::sample(); /*90:native*/
+        return Native::sample(); /*92:native*/
     }
 
     /**
@@ -24200,7 +24299,7 @@ class Obj3 {
      * @return NewClass
      */
     public static function sampleNew(): NewClass {
-        return NewClass::sample(); /*91:new*/
+        return NewClass::sample(); /*93:new*/
     }
 
     /**
@@ -24248,7 +24347,7 @@ class Obj3 {
      * @return Newtonsoft
      */
     public static function sampleNewtonsoft(): Newtonsoft {
-        return Newtonsoft::sample(); /*92:newtonsoft*/
+        return Newtonsoft::sample(); /*94:newtonsoft*/
     }
 
     /**
@@ -24296,7 +24395,7 @@ class Obj3 {
      * @return Nil
      */
     public static function sampleNil(): Nil {
-        return Nil::sample(); /*93:nil*/
+        return Nil::sample(); /*95:nil*/
     }
 
     /**
@@ -24344,55 +24443,7 @@ class Obj3 {
      * @return No
      */
     public static function sampleNo(): No {
-        return No::sample(); /*94:no*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Noexcept
-     */
-    public static function fromNoexcept(stdClass $value): Noexcept {
-        return Noexcept::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toNoexcept(): stdClass {
-        if (Obj3::validateNoexcept($this->noexcept))  {
-            return $this->noexcept->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj3::noexcept');
-    }
-
-    /**
-     * @param Noexcept
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateNoexcept(Noexcept $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Noexcept
-     */
-    public function getNoexcept(): Noexcept {
-        if (Obj3::validateNoexcept($this->noexcept))  {
-            return $this->noexcept;
-        }
-        throw new Exception('never get to getNoexcept Obj3::noexcept');
-    }
-
-    /**
-     * @return Noexcept
-     */
-    public static function sampleNoexcept(): Noexcept {
-        return Noexcept::sample(); /*95:noexcept*/
+        return No::sample(); /*96:no*/
     }
 
     /**
@@ -24401,6 +24452,7 @@ class Obj3 {
      */
     public function validate(): bool {
         return Obj3::validateDummy($this->dummy)
+        || Obj3::validateGoto($this->goto)
         || Obj3::validateGuard($this->guard)
         || Obj3::validateHasOwnProperty($this->hasOwnProperty)
         || Obj3::validateHashCode($this->hashCode)
@@ -24454,6 +24506,7 @@ class Obj3 {
         || Obj3::validateLong($this->long)
         || Obj3::validateMap($this->map)
         || Obj3::validateMapEntry($this->mapEntry)
+        || Obj3::validateMarshalJSON($this->marshalJSON)
         || Obj3::validateMetadataPropertyHandling($this->metadataPropertyHandling)
         || Obj3::validateModule($this->module)
         || Obj3::validateMutable($this->mutable)
@@ -24463,8 +24516,7 @@ class Obj3 {
         || Obj3::validateNew($this->new)
         || Obj3::validateNewtonsoft($this->newtonsoft)
         || Obj3::validateNil($this->nil)
-        || Obj3::validateNo($this->no)
-        || Obj3::validateNoexcept($this->noexcept);
+        || Obj3::validateNo($this->no);
     }
 
     /**
@@ -24474,6 +24526,7 @@ class Obj3 {
     public function to(): stdClass  {
         $out = new stdClass();
         $out->{'dummy'} = $this->toDummy();
+        $out->{'goto'} = $this->toGoto();
         $out->{'guard'} = $this->toGuard();
         $out->{'hasOwnProperty'} = $this->toHasOwnProperty();
         $out->{'hashCode'} = $this->toHashCode();
@@ -24527,6 +24580,7 @@ class Obj3 {
         $out->{'long'} = $this->toLong();
         $out->{'map'} = $this->toMap();
         $out->{'MapEntry'} = $this->toMapEntry();
+        $out->{'MarshalJSON'} = $this->toMarshalJSON();
         $out->{'metadata_property_handling'} = $this->toMetadataPropertyHandling();
         $out->{'module'} = $this->toModule();
         $out->{'mutable'} = $this->toMutable();
@@ -24537,7 +24591,6 @@ class Obj3 {
         $out->{'newtonsoft'} = $this->toNewtonsoft();
         $out->{'nil'} = $this->toNil();
         $out->{'NO'} = $this->toNo();
-        $out->{'noexcept'} = $this->toNoexcept();
         return $out;
     }
 
@@ -24550,6 +24603,9 @@ class Obj3 {
         if (!property_exists($obj, 'dummy')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'goto')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'guard')) {
             throw new Exception("Missing required property");
         }
@@ -24709,6 +24765,9 @@ class Obj3 {
         if (!property_exists($obj, 'MapEntry')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'MarshalJSON')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'metadata_property_handling')) {
             throw new Exception("Missing required property");
         }
@@ -24739,11 +24798,9 @@ class Obj3 {
         if (!property_exists($obj, 'NO')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'noexcept')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj3(
          Obj3::fromDummy($obj->{'dummy'})
+        ,Obj3::fromGoto($obj->{'goto'})
         ,Obj3::fromGuard($obj->{'guard'})
         ,Obj3::fromHasOwnProperty($obj->{'hasOwnProperty'})
         ,Obj3::fromHashCode($obj->{'hashCode'})
@@ -24797,6 +24854,7 @@ class Obj3 {
         ,Obj3::fromLong($obj->{'long'})
         ,Obj3::fromMap($obj->{'map'})
         ,Obj3::fromMapEntry($obj->{'MapEntry'})
+        ,Obj3::fromMarshalJSON($obj->{'MarshalJSON'})
         ,Obj3::fromMetadataPropertyHandling($obj->{'metadata_property_handling'})
         ,Obj3::fromModule($obj->{'module'})
         ,Obj3::fromMutable($obj->{'mutable'})
@@ -24807,7 +24865,6 @@ class Obj3 {
         ,Obj3::fromNewtonsoft($obj->{'newtonsoft'})
         ,Obj3::fromNil($obj->{'nil'})
         ,Obj3::fromNo($obj->{'NO'})
-        ,Obj3::fromNoexcept($obj->{'noexcept'})
         );
     }
 
@@ -24817,6 +24874,7 @@ class Obj3 {
     public static function sample(): Obj3 {
         return new Obj3(
          Obj3::sampleDummy()
+        ,Obj3::sampleGoto()
         ,Obj3::sampleGuard()
         ,Obj3::sampleHasOwnProperty()
         ,Obj3::sampleHashCode()
@@ -24870,6 +24928,7 @@ class Obj3 {
         ,Obj3::sampleLong()
         ,Obj3::sampleMap()
         ,Obj3::sampleMapEntry()
+        ,Obj3::sampleMarshalJSON()
         ,Obj3::sampleMetadataPropertyHandling()
         ,Obj3::sampleModule()
         ,Obj3::sampleMutable()
@@ -24880,7 +24939,107 @@ class Obj3 {
         ,Obj3::sampleNewtonsoft()
         ,Obj3::sampleNil()
         ,Obj3::sampleNo()
-        ,Obj3::sampleNoexcept()
+        );
+    }
+}
+
+// This is an autogenerated file:GotoClass
+
+class GotoClass {
+    private int $goto; // json:goto Required
+
+    /**
+     * @param int $goto
+     */
+    public function __construct(int $goto) {
+        $this->goto = $goto;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromGoto(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toGoto(): int {
+        if (GotoClass::validateGoto($this->goto))  {
+            return $this->goto; /*int*/
+        }
+        throw new Exception('never get to this GotoClass::goto');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateGoto(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getGoto(): int {
+        if (GotoClass::validateGoto($this->goto))  {
+            return $this->goto;
+        }
+        throw new Exception('never get to getGoto GotoClass::goto');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleGoto(): int {
+        return 31; /*31:goto*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return GotoClass::validateGoto($this->goto);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'goto'} = $this->toGoto();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return GotoClass
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): GotoClass {
+        if (!property_exists($obj, 'goto')) {
+            throw new Exception("Missing required property");
+        }
+        return new GotoClass(
+         GotoClass::fromGoto($obj->{'goto'})
+        );
+    }
+
+    /**
+     * @return GotoClass
+     */
+    public static function sample(): GotoClass {
+        return new GotoClass(
+         GotoClass::sampleGoto()
         );
     }
 }
@@ -30241,6 +30400,107 @@ class MapEntry {
     }
 }
 
+// This is an autogenerated file:MarshalJSON
+
+class MarshalJSON {
+    private int $marshalJSON; // json:MarshalJSON Required
+
+    /**
+     * @param int $marshalJSON
+     */
+    public function __construct(int $marshalJSON) {
+        $this->marshalJSON = $marshalJSON;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromMarshalJSON(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toMarshalJSON(): int {
+        if (MarshalJSON::validateMarshalJSON($this->marshalJSON))  {
+            return $this->marshalJSON; /*int*/
+        }
+        throw new Exception('never get to this MarshalJSON::marshalJSON');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMarshalJSON(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getMarshalJSON(): int {
+        if (MarshalJSON::validateMarshalJSON($this->marshalJSON))  {
+            return $this->marshalJSON;
+        }
+        throw new Exception('never get to getMarshalJSON MarshalJSON::marshalJSON');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleMarshalJSON(): int {
+        return 31; /*31:marshalJSON*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return MarshalJSON::validateMarshalJSON($this->marshalJSON);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'MarshalJSON'} = $this->toMarshalJSON();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return MarshalJSON
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): MarshalJSON {
+        if (!property_exists($obj, 'MarshalJSON')) {
+            throw new Exception("Missing required property");
+        }
+        return new MarshalJSON(
+         MarshalJSON::fromMarshalJSON($obj->{'MarshalJSON'})
+        );
+    }
+
+    /**
+     * @return MarshalJSON
+     */
+    public static function sample(): MarshalJSON {
+        return new MarshalJSON(
+         MarshalJSON::sampleMarshalJSON()
+        );
+    }
+}
+
 // This is an autogenerated file:MetadataPropertyHandling
 
 class MetadataPropertyHandling {
@@ -31251,112 +31511,12 @@ class No {
     }
 }
 
-// This is an autogenerated file:Noexcept
-
-class Noexcept {
-    private int $noexcept; // json:noexcept Required
-
-    /**
-     * @param int $noexcept
-     */
-    public function __construct(int $noexcept) {
-        $this->noexcept = $noexcept;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromNoexcept(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toNoexcept(): int {
-        if (Noexcept::validateNoexcept($this->noexcept))  {
-            return $this->noexcept; /*int*/
-        }
-        throw new Exception('never get to this Noexcept::noexcept');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateNoexcept(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getNoexcept(): int {
-        if (Noexcept::validateNoexcept($this->noexcept))  {
-            return $this->noexcept;
-        }
-        throw new Exception('never get to getNoexcept Noexcept::noexcept');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleNoexcept(): int {
-        return 31; /*31:noexcept*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Noexcept::validateNoexcept($this->noexcept);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'noexcept'} = $this->toNoexcept();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Noexcept
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Noexcept {
-        if (!property_exists($obj, 'noexcept')) {
-            throw new Exception("Missing required property");
-        }
-        return new Noexcept(
-         Noexcept::fromNoexcept($obj->{'noexcept'})
-        );
-    }
-
-    /**
-     * @return Noexcept
-     */
-    public static function sample(): Noexcept {
-        return new Noexcept(
-         Noexcept::sampleNoexcept()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj4
 
 class Obj4 {
     private int $dummy; // json:dummy 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
     private Nonlocal $nonlocal; // json:nonlocal Required
@@ -31419,11 +31579,11 @@ class Obj4 {
     private Sbyte $sbyte; // json:sbyte Required
     private Sealed $sealed; // json:sealed Required
     private Sel $sel; // json:SEL Required
-    private Select $select; // json:select Required
 
     /**
      * @param int $dummy
      * @param NoSuchMethod $noSuchMethod
+     * @param Noexcept $noexcept
      * @param Nonatomic $nonatomic
      * @param None $none
      * @param Nonlocal $nonlocal
@@ -31486,11 +31646,11 @@ class Obj4 {
      * @param Sbyte $sbyte
      * @param Sealed $sealed
      * @param Sel $sel
-     * @param Select $select
      */
-    public function __construct(int $dummy, NoSuchMethod $noSuchMethod, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSError $nsError, NSObject $nsObject, NSString $nsString, NULLClass $null, Nullptr $nullptr, Number $number, NoneClass $obj4None, Obj4Null $obj4Null, ProtocolClass $obj4Protocol, ObjectClass $object, ObjectMapper $objectMapper, 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, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, RegExp $regExp, 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) {
+    public function __construct(int $dummy, NoSuchMethod $noSuchMethod, Noexcept $noexcept, Nonatomic $nonatomic, None $none, Nonlocal $nonlocal, Nonmutating $nonmutating, Not $not, NotEq $notEq, NSError $nsError, NSObject $nsObject, NSString $nsString, NULLClass $null, Nullptr $nullptr, Number $number, NoneClass $obj4None, Obj4Null $obj4Null, ProtocolClass $obj4Protocol, ObjectClass $object, ObjectMapper $objectMapper, 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, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, RegExp $regExp, 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) {
         $this->dummy = $dummy;
         $this->noSuchMethod = $noSuchMethod;
+        $this->noexcept = $noexcept;
         $this->nonatomic = $nonatomic;
         $this->none = $none;
         $this->nonlocal = $nonlocal;
@@ -31553,7 +31713,6 @@ class Obj4 {
         $this->sbyte = $sbyte;
         $this->sealed = $sealed;
         $this->sel = $sel;
-        $this->select = $select;
     }
 
     /**
@@ -31651,6 +31810,54 @@ class Obj4 {
         return NoSuchMethod::sample(); /*32:noSuchMethod*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Noexcept
+     */
+    public static function fromNoexcept(stdClass $value): Noexcept {
+        return Noexcept::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toNoexcept(): stdClass {
+        if (Obj4::validateNoexcept($this->noexcept))  {
+            return $this->noexcept->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::noexcept');
+    }
+
+    /**
+     * @param Noexcept
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateNoexcept(Noexcept $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Noexcept
+     */
+    public function getNoexcept(): Noexcept {
+        if (Obj4::validateNoexcept($this->noexcept))  {
+            return $this->noexcept;
+        }
+        throw new Exception('never get to getNoexcept Obj4::noexcept');
+    }
+
+    /**
+     * @return Noexcept
+     */
+    public static function sampleNoexcept(): Noexcept {
+        return Noexcept::sample(); /*33:noexcept*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -31696,7 +31903,7 @@ class Obj4 {
      * @return Nonatomic
      */
     public static function sampleNonatomic(): Nonatomic {
-        return Nonatomic::sample(); /*33:nonatomic*/
+        return Nonatomic::sample(); /*34:nonatomic*/
     }
 
     /**
@@ -31744,7 +31951,7 @@ class Obj4 {
      * @return None
      */
     public static function sampleNone(): None {
-        return None::sample(); /*34:none*/
+        return None::sample(); /*35:none*/
     }
 
     /**
@@ -31792,7 +31999,7 @@ class Obj4 {
      * @return Nonlocal
      */
     public static function sampleNonlocal(): Nonlocal {
-        return Nonlocal::sample(); /*35:nonlocal*/
+        return Nonlocal::sample(); /*36:nonlocal*/
     }
 
     /**
@@ -31840,7 +32047,7 @@ class Obj4 {
      * @return Nonmutating
      */
     public static function sampleNonmutating(): Nonmutating {
-        return Nonmutating::sample(); /*36:nonmutating*/
+        return Nonmutating::sample(); /*37:nonmutating*/
     }
 
     /**
@@ -31888,7 +32095,7 @@ class Obj4 {
      * @return Not
      */
     public static function sampleNot(): Not {
-        return Not::sample(); /*37:not*/
+        return Not::sample(); /*38:not*/
     }
 
     /**
@@ -31936,7 +32143,7 @@ class Obj4 {
      * @return NotEq
      */
     public static function sampleNotEq(): NotEq {
-        return NotEq::sample(); /*38:notEq*/
+        return NotEq::sample(); /*39:notEq*/
     }
 
     /**
@@ -31984,7 +32191,7 @@ class Obj4 {
      * @return NSError
      */
     public static function sampleNSError(): NSError {
-        return NSError::sample(); /*39:nsError*/
+        return NSError::sample(); /*40:nsError*/
     }
 
     /**
@@ -32032,7 +32239,7 @@ class Obj4 {
      * @return NSObject
      */
     public static function sampleNSObject(): NSObject {
-        return NSObject::sample(); /*40:nsObject*/
+        return NSObject::sample(); /*41:nsObject*/
     }
 
     /**
@@ -32080,7 +32287,7 @@ class Obj4 {
      * @return NSString
      */
     public static function sampleNSString(): NSString {
-        return NSString::sample(); /*41:nsString*/
+        return NSString::sample(); /*42:nsString*/
     }
 
     /**
@@ -32128,7 +32335,7 @@ class Obj4 {
      * @return NULLClass
      */
     public static function sampleNull(): NULLClass {
-        return NULLClass::sample(); /*42:null*/
+        return NULLClass::sample(); /*43:null*/
     }
 
     /**
@@ -32176,7 +32383,7 @@ class Obj4 {
      * @return Nullptr
      */
     public static function sampleNullptr(): Nullptr {
-        return Nullptr::sample(); /*43:nullptr*/
+        return Nullptr::sample(); /*44:nullptr*/
     }
 
     /**
@@ -32224,7 +32431,7 @@ class Obj4 {
      * @return Number
      */
     public static function sampleNumber(): Number {
-        return Number::sample(); /*44:number*/
+        return Number::sample(); /*45:number*/
     }
 
     /**
@@ -32272,7 +32479,7 @@ class Obj4 {
      * @return NoneClass
      */
     public static function sampleObj4None(): NoneClass {
-        return NoneClass::sample(); /*45:obj4None*/
+        return NoneClass::sample(); /*46:obj4None*/
     }
 
     /**
@@ -32320,7 +32527,7 @@ class Obj4 {
      * @return Obj4Null
      */
     public static function sampleObj4Null(): Obj4Null {
-        return Obj4Null::sample(); /*46:obj4Null*/
+        return Obj4Null::sample(); /*47:obj4Null*/
     }
 
     /**
@@ -32368,7 +32575,7 @@ class Obj4 {
      * @return ProtocolClass
      */
     public static function sampleObj4Protocol(): ProtocolClass {
-        return ProtocolClass::sample(); /*47:obj4Protocol*/
+        return ProtocolClass::sample(); /*48:obj4Protocol*/
     }
 
     /**
@@ -32416,7 +32623,7 @@ class Obj4 {
      * @return ObjectClass
      */
     public static function sampleObject(): ObjectClass {
-        return ObjectClass::sample(); /*48:object*/
+        return ObjectClass::sample(); /*49:object*/
     }
 
     /**
@@ -32464,7 +32671,7 @@ class Obj4 {
      * @return ObjectMapper
      */
     public static function sampleObjectMapper(): ObjectMapper {
-        return ObjectMapper::sample(); /*49:objectMapper*/
+        return ObjectMapper::sample(); /*50:objectMapper*/
     }
 
     /**
@@ -32512,7 +32719,7 @@ class Obj4 {
      * @return Of
      */
     public static function sampleOf(): Of {
-        return Of::sample(); /*50:of*/
+        return Of::sample(); /*51:of*/
     }
 
     /**
@@ -32560,7 +32767,7 @@ class Obj4 {
      * @return Oneway
      */
     public static function sampleOneway(): Oneway {
-        return Oneway::sample(); /*51:oneway*/
+        return Oneway::sample(); /*52:oneway*/
     }
 
     /**
@@ -32608,7 +32815,7 @@ class Obj4 {
      * @return Open
      */
     public static function sampleOpen(): Open {
-        return Open::sample(); /*52:open*/
+        return Open::sample(); /*53:open*/
     }
 
     /**
@@ -32656,7 +32863,7 @@ class Obj4 {
      * @return Operator
      */
     public static function sampleOperator(): Operator {
-        return Operator::sample(); /*53:operator*/
+        return Operator::sample(); /*54:operator*/
     }
 
     /**
@@ -32704,7 +32911,7 @@ class Obj4 {
      * @return Optional
      */
     public static function sampleOptional(): Optional {
-        return Optional::sample(); /*54:optional*/
+        return Optional::sample(); /*55:optional*/
     }
 
     /**
@@ -32752,7 +32959,7 @@ class Obj4 {
      * @return OrClass
      */
     public static function sampleOr(): OrClass {
-        return OrClass::sample(); /*55:or*/
+        return OrClass::sample(); /*56:or*/
     }
 
     /**
@@ -32800,7 +33007,7 @@ class Obj4 {
      * @return OrEq
      */
     public static function sampleOrEq(): OrEq {
-        return OrEq::sample(); /*56:orEq*/
+        return OrEq::sample(); /*57:orEq*/
     }
 
     /**
@@ -32848,7 +33055,7 @@ class Obj4 {
      * @return Out
      */
     public static function sampleOut(): Out {
-        return Out::sample(); /*57:out*/
+        return Out::sample(); /*58:out*/
     }
 
     /**
@@ -32896,7 +33103,7 @@ class Obj4 {
      * @return OverrideClass
      */
     public static function sampleOverride(): OverrideClass {
-        return OverrideClass::sample(); /*58:override*/
+        return OverrideClass::sample(); /*59:override*/
     }
 
     /**
@@ -32944,7 +33151,7 @@ class Obj4 {
      * @return Package
      */
     public static function samplePackage(): Package {
-        return Package::sample(); /*59:package*/
+        return Package::sample(); /*60:package*/
     }
 
     /**
@@ -32992,7 +33199,7 @@ class Obj4 {
      * @return Params
      */
     public static function sampleParams(): Params {
-        return Params::sample(); /*60:params*/
+        return Params::sample(); /*61:params*/
     }
 
     /**
@@ -33040,7 +33247,7 @@ class Obj4 {
      * @return Pass
      */
     public static function samplePass(): Pass {
-        return Pass::sample(); /*61:pass*/
+        return Pass::sample(); /*62:pass*/
     }
 
     /**
@@ -33088,7 +33295,7 @@ class Obj4 {
      * @return Port
      */
     public static function samplePort(): Port {
-        return Port::sample(); /*62:port*/
+        return Port::sample(); /*63:port*/
     }
 
     /**
@@ -33136,7 +33343,7 @@ class Obj4 {
      * @return Postfix
      */
     public static function samplePostfix(): Postfix {
-        return Postfix::sample(); /*63:postfix*/
+        return Postfix::sample(); /*64:postfix*/
     }
 
     /**
@@ -33184,7 +33391,7 @@ class Obj4 {
      * @return Precedence
      */
     public static function samplePrecedence(): Precedence {
-        return Precedence::sample(); /*64:precedence*/
+        return Precedence::sample(); /*65:precedence*/
     }
 
     /**
@@ -33232,7 +33439,7 @@ class Obj4 {
      * @return Prefix
      */
     public static function samplePrefix(): Prefix {
-        return Prefix::sample(); /*65:prefix*/
+        return Prefix::sample(); /*66:prefix*/
     }
 
     /**
@@ -33280,7 +33487,7 @@ class Obj4 {
      * @return PrintClass
      */
     public static function samplePrint(): PrintClass {
-        return PrintClass::sample(); /*66:print*/
+        return PrintClass::sample(); /*67:print*/
     }
 
     /**
@@ -33328,7 +33535,7 @@ class Obj4 {
      * @return PrintMembers
      */
     public static function samplePrintMembers(): PrintMembers {
-        return PrintMembers::sample(); /*67:printMembers*/
+        return PrintMembers::sample(); /*68:printMembers*/
     }
 
     /**
@@ -33376,7 +33583,7 @@ class Obj4 {
      * @return Printf
      */
     public static function samplePrintf(): Printf {
-        return Printf::sample(); /*68:printf*/
+        return Printf::sample(); /*69:printf*/
     }
 
     /**
@@ -33424,7 +33631,7 @@ class Obj4 {
      * @return PrivateClass
      */
     public static function samplePrivate(): PrivateClass {
-        return PrivateClass::sample(); /*69:private*/
+        return PrivateClass::sample(); /*70:private*/
     }
 
     /**
@@ -33472,7 +33679,7 @@ class Obj4 {
      * @return ProtectedClass
      */
     public static function sampleProtected(): ProtectedClass {
-        return ProtectedClass::sample(); /*70:protected*/
+        return ProtectedClass::sample(); /*71:protected*/
     }
 
     /**
@@ -33520,7 +33727,7 @@ class Obj4 {
      * @return Protocol
      */
     public static function sampleProtocol(): Protocol {
-        return Protocol::sample(); /*71:protocol*/
+        return Protocol::sample(); /*72:protocol*/
     }
 
     /**
@@ -33568,7 +33775,7 @@ class Obj4 {
      * @return PublicClass
      */
     public static function samplePublic(): PublicClass {
-        return PublicClass::sample(); /*72:public*/
+        return PublicClass::sample(); /*73:public*/
     }
 
     /**
@@ -33616,7 +33823,7 @@ class Obj4 {
      * @return Quicktype
      */
     public static function sampleQuicktype(): Quicktype {
-        return Quicktype::sample(); /*73:quicktype*/
+        return Quicktype::sample(); /*74:quicktype*/
     }
 
     /**
@@ -33664,7 +33871,7 @@ class Obj4 {
      * @return Raise
      */
     public static function sampleRaise(): Raise {
-        return Raise::sample(); /*74:raise*/
+        return Raise::sample(); /*75:raise*/
     }
 
     /**
@@ -33712,7 +33919,7 @@ class Obj4 {
      * @return Range
      */
     public static function sampleRange(): Range {
-        return Range::sample(); /*75:range*/
+        return Range::sample(); /*76:range*/
     }
 
     /**
@@ -33760,7 +33967,7 @@ class Obj4 {
      * @return ReadonlyClass
      */
     public static function sampleReadonly(): ReadonlyClass {
-        return ReadonlyClass::sample(); /*76:readonly*/
+        return ReadonlyClass::sample(); /*77:readonly*/
     }
 
     /**
@@ -33808,7 +34015,7 @@ class Obj4 {
      * @return Ref
      */
     public static function sampleRef(): Ref {
-        return Ref::sample(); /*77:ref*/
+        return Ref::sample(); /*78:ref*/
     }
 
     /**
@@ -33856,7 +34063,7 @@ class Obj4 {
      * @return RegExp
      */
     public static function sampleRegExp(): RegExp {
-        return RegExp::sample(); /*78:regExp*/
+        return RegExp::sample(); /*79:regExp*/
     }
 
     /**
@@ -33904,7 +34111,7 @@ class Obj4 {
      * @return Register
      */
     public static function sampleRegister(): Register {
-        return Register::sample(); /*79:register*/
+        return Register::sample(); /*80:register*/
     }
 
     /**
@@ -33952,7 +34159,7 @@ class Obj4 {
      * @return ReinterpretCast
      */
     public static function sampleReinterpretCast(): ReinterpretCast {
-        return ReinterpretCast::sample(); /*80:reinterpretCast*/
+        return ReinterpretCast::sample(); /*81:reinterpretCast*/
     }
 
     /**
@@ -34000,7 +34207,7 @@ class Obj4 {
      * @return Repeat
      */
     public static function sampleRepeat(): Repeat {
-        return Repeat::sample(); /*81:repeat*/
+        return Repeat::sample(); /*82:repeat*/
     }
 
     /**
@@ -34048,7 +34255,7 @@ class Obj4 {
      * @return RequireClass
      */
     public static function sampleRequire(): RequireClass {
-        return RequireClass::sample(); /*82:require*/
+        return RequireClass::sample(); /*83:require*/
     }
 
     /**
@@ -34096,7 +34303,7 @@ class Obj4 {
      * @return Required
      */
     public static function sampleRequired(): Required {
-        return Required::sample(); /*83:required*/
+        return Required::sample(); /*84:required*/
     }
 
     /**
@@ -34144,7 +34351,7 @@ class Obj4 {
      * @return Requires
      */
     public static function sampleRequires(): Requires {
-        return Requires::sample(); /*84:requires*/
+        return Requires::sample(); /*85:requires*/
     }
 
     /**
@@ -34192,7 +34399,7 @@ class Obj4 {
      * @return Restrict
      */
     public static function sampleRestrict(): Restrict {
-        return Restrict::sample(); /*85:restrict*/
+        return Restrict::sample(); /*86:restrict*/
     }
 
     /**
@@ -34240,7 +34447,7 @@ class Obj4 {
      * @return Retain
      */
     public static function sampleRetain(): Retain {
-        return Retain::sample(); /*86:retain*/
+        return Retain::sample(); /*87:retain*/
     }
 
     /**
@@ -34288,7 +34495,7 @@ class Obj4 {
      * @return Rethrows
      */
     public static function sampleRethrows(): Rethrows {
-        return Rethrows::sample(); /*87:rethrows*/
+        return Rethrows::sample(); /*88:rethrows*/
     }
 
     /**
@@ -34336,7 +34543,7 @@ class Obj4 {
      * @return ReturnClass
      */
     public static function sampleReturn(): ReturnClass {
-        return ReturnClass::sample(); /*88:return*/
+        return ReturnClass::sample(); /*89:return*/
     }
 
     /**
@@ -34384,7 +34591,7 @@ class Obj4 {
      * @return Right
      */
     public static function sampleRight(): Right {
-        return Right::sample(); /*89:right*/
+        return Right::sample(); /*90:right*/
     }
 
     /**
@@ -34432,7 +34639,7 @@ class Obj4 {
      * @return RuntimeType
      */
     public static function sampleRuntimeType(): RuntimeType {
-        return RuntimeType::sample(); /*90:runtimeType*/
+        return RuntimeType::sample(); /*91:runtimeType*/
     }
 
     /**
@@ -34480,7 +34687,7 @@ class Obj4 {
      * @return S
      */
     public static function sampleS(): S {
-        return S::sample(); /*91:s*/
+        return S::sample(); /*92:s*/
     }
 
     /**
@@ -34528,7 +34735,7 @@ class Obj4 {
      * @return Sbyte
      */
     public static function sampleSbyte(): Sbyte {
-        return Sbyte::sample(); /*92:sbyte*/
+        return Sbyte::sample(); /*93:sbyte*/
     }
 
     /**
@@ -34576,7 +34783,7 @@ class Obj4 {
      * @return Sealed
      */
     public static function sampleSealed(): Sealed {
-        return Sealed::sample(); /*93:sealed*/
+        return Sealed::sample(); /*94:sealed*/
     }
 
     /**
@@ -34624,55 +34831,7 @@ class Obj4 {
      * @return Sel
      */
     public static function sampleSel(): Sel {
-        return Sel::sample(); /*94:sel*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Select
-     */
-    public static function fromSelect(stdClass $value): Select {
-        return Select::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toSelect(): stdClass {
-        if (Obj4::validateSelect($this->select))  {
-            return $this->select->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj4::select');
-    }
-
-    /**
-     * @param Select
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateSelect(Select $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Select
-     */
-    public function getSelect(): Select {
-        if (Obj4::validateSelect($this->select))  {
-            return $this->select;
-        }
-        throw new Exception('never get to getSelect Obj4::select');
-    }
-
-    /**
-     * @return Select
-     */
-    public static function sampleSelect(): Select {
-        return Select::sample(); /*95:select*/
+        return Sel::sample(); /*95:sel*/
     }
 
     /**
@@ -34682,6 +34841,7 @@ class Obj4 {
     public function validate(): bool {
         return Obj4::validateDummy($this->dummy)
         || Obj4::validateNoSuchMethod($this->noSuchMethod)
+        || Obj4::validateNoexcept($this->noexcept)
         || Obj4::validateNonatomic($this->nonatomic)
         || Obj4::validateNone($this->none)
         || Obj4::validateNonlocal($this->nonlocal)
@@ -34743,8 +34903,7 @@ class Obj4 {
         || Obj4::validateS($this->s)
         || Obj4::validateSbyte($this->sbyte)
         || Obj4::validateSealed($this->sealed)
-        || Obj4::validateSel($this->sel)
-        || Obj4::validateSelect($this->select);
+        || Obj4::validateSel($this->sel);
     }
 
     /**
@@ -34755,6 +34914,7 @@ class Obj4 {
         $out = new stdClass();
         $out->{'dummy'} = $this->toDummy();
         $out->{'noSuchMethod'} = $this->toNoSuchMethod();
+        $out->{'noexcept'} = $this->toNoexcept();
         $out->{'nonatomic'} = $this->toNonatomic();
         $out->{'None'} = $this->toNone();
         $out->{'nonlocal'} = $this->toNonlocal();
@@ -34817,7 +34977,6 @@ class Obj4 {
         $out->{'sbyte'} = $this->toSbyte();
         $out->{'sealed'} = $this->toSealed();
         $out->{'SEL'} = $this->toSel();
-        $out->{'select'} = $this->toSelect();
         return $out;
     }
 
@@ -34833,6 +34992,9 @@ class Obj4 {
         if (!property_exists($obj, 'noSuchMethod')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'noexcept')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'nonatomic')) {
             throw new Exception("Missing required property");
         }
@@ -35019,12 +35181,10 @@ class Obj4 {
         if (!property_exists($obj, 'SEL')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'select')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj4(
          Obj4::fromDummy($obj->{'dummy'})
         ,Obj4::fromNoSuchMethod($obj->{'noSuchMethod'})
+        ,Obj4::fromNoexcept($obj->{'noexcept'})
         ,Obj4::fromNonatomic($obj->{'nonatomic'})
         ,Obj4::fromNone($obj->{'None'})
         ,Obj4::fromNonlocal($obj->{'nonlocal'})
@@ -35087,7 +35247,6 @@ class Obj4 {
         ,Obj4::fromSbyte($obj->{'sbyte'})
         ,Obj4::fromSealed($obj->{'sealed'})
         ,Obj4::fromSel($obj->{'SEL'})
-        ,Obj4::fromSelect($obj->{'select'})
         );
     }
 
@@ -35098,6 +35257,7 @@ class Obj4 {
         return new Obj4(
          Obj4::sampleDummy()
         ,Obj4::sampleNoSuchMethod()
+        ,Obj4::sampleNoexcept()
         ,Obj4::sampleNonatomic()
         ,Obj4::sampleNone()
         ,Obj4::sampleNonlocal()
@@ -35160,7 +35320,6 @@ class Obj4 {
         ,Obj4::sampleSbyte()
         ,Obj4::sampleSealed()
         ,Obj4::sampleSel()
-        ,Obj4::sampleSelect()
         );
     }
 }
@@ -35266,6 +35425,107 @@ class NoSuchMethod {
     }
 }
 
+// This is an autogenerated file:Noexcept
+
+class Noexcept {
+    private int $noexcept; // json:noexcept Required
+
+    /**
+     * @param int $noexcept
+     */
+    public function __construct(int $noexcept) {
+        $this->noexcept = $noexcept;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromNoexcept(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toNoexcept(): int {
+        if (Noexcept::validateNoexcept($this->noexcept))  {
+            return $this->noexcept; /*int*/
+        }
+        throw new Exception('never get to this Noexcept::noexcept');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateNoexcept(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getNoexcept(): int {
+        if (Noexcept::validateNoexcept($this->noexcept))  {
+            return $this->noexcept;
+        }
+        throw new Exception('never get to getNoexcept Noexcept::noexcept');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleNoexcept(): int {
+        return 31; /*31:noexcept*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Noexcept::validateNoexcept($this->noexcept);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'noexcept'} = $this->toNoexcept();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Noexcept
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Noexcept {
+        if (!property_exists($obj, 'noexcept')) {
+            throw new Exception("Missing required property");
+        }
+        return new Noexcept(
+         Noexcept::fromNoexcept($obj->{'noexcept'})
+        );
+    }
+
+    /**
+     * @return Noexcept
+     */
+    public static function sample(): Noexcept {
+        return new Noexcept(
+         Noexcept::sampleNoexcept()
+        );
+    }
+}
+
 // This is an autogenerated file:Nonatomic
 
 class Nonatomic {
@@ -41531,107 +41791,6 @@ class Sel {
     }
 }
 
-// This is an autogenerated file:Select
-
-class Select {
-    private int $select; // json:select Required
-
-    /**
-     * @param int $select
-     */
-    public function __construct(int $select) {
-        $this->select = $select;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromSelect(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toSelect(): int {
-        if (Select::validateSelect($this->select))  {
-            return $this->select; /*int*/
-        }
-        throw new Exception('never get to this Select::select');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateSelect(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getSelect(): int {
-        if (Select::validateSelect($this->select))  {
-            return $this->select;
-        }
-        throw new Exception('never get to getSelect Select::select');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleSelect(): int {
-        return 31; /*31:select*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Select::validateSelect($this->select);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'select'} = $this->toSelect();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Select
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Select {
-        if (!property_exists($obj, 'select')) {
-            throw new Exception("Missing required property");
-        }
-        return new Select(
-         Select::fromSelect($obj->{'select'})
-        );
-    }
-
-    /**
-     * @return Select
-     */
-    public static function sample(): Select {
-        return new Select(
-         Select::sampleSelect()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj5
 
 class Obj5 {
@@ -41642,6 +41801,7 @@ class Obj5 {
     private Obj5True $obj5True; // json:true Required
     private TypeClass $obj5Type; // json:type Required
     private PrimitiveKind $primitiveKind; // json:PrimitiveKind Required
+    private Select $select; // json:select Required
     private SelfClass $self; // json:Self Required
     private Sendable $sendable; // json:Sendable Required
     private SerialDescriptor $serialDescriptor; // json:SerialDescriptor Required
@@ -41678,6 +41838,7 @@ class Obj5 {
     private TimeOnly $timeOnly; // json:TimeOnly Required
     private TimeOnlyConverter $timeOnlyConverter; // json:TimeOnlyConverter Required
     private TimeZone $timeZone; // json:TimeZone Required
+    private ToDict $toDict; // json:to_dict Required
     private ToJSON $toJSON; // json:to_json Required
     private ToString $toString; // json:toString Required
     private TopLevelClass $topLevel; // json:top_level Required
@@ -41695,11 +41856,10 @@ class Obj5 {
     private Unchecked $unchecked; // json:unchecked Required
     private Undefined $undefined; // json:undefined Required
     private Union $union; // json:union Required
+    private UnmarshalJSON $unmarshalJSON; // json:UnmarshalJSON Required
     private Unowned $unowned; // json:unowned Required
     private Unsafe $unsafe; // json:unsafe Required
-    private Unsigned $unsigned; // json:unsigned Required
     private UseSerializers $useSerializers; // json:UseSerializers Required
-    private Ushort $ushort; // json:ushort Required
 
     /**
      * @param int $dummy
@@ -41709,6 +41869,7 @@ class Obj5 {
      * @param Obj5True $obj5True
      * @param TypeClass $obj5Type
      * @param PrimitiveKind $primitiveKind
+     * @param Select $select
      * @param SelfClass $self
      * @param Sendable $sendable
      * @param SerialDescriptor $serialDescriptor
@@ -41745,6 +41906,7 @@ class Obj5 {
      * @param TimeOnly $timeOnly
      * @param TimeOnlyConverter $timeOnlyConverter
      * @param TimeZone $timeZone
+     * @param ToDict $toDict
      * @param ToJSON $toJSON
      * @param ToString $toString
      * @param TopLevelClass $topLevel
@@ -41762,13 +41924,12 @@ class Obj5 {
      * @param Unchecked $unchecked
      * @param Undefined $undefined
      * @param Union $union
+     * @param UnmarshalJSON $unmarshalJSON
      * @param Unowned $unowned
      * @param Unsafe $unsafe
-     * @param Unsigned $unsigned
      * @param UseSerializers $useSerializers
-     * @param Ushort $ushort
      */
-    public function __construct(int $dummy, KSerializer $kSerializer, Obj5Self $obj5Self, This $obj5This, Obj5True $obj5True, TypeClass $obj5Type, PrimitiveKind $primitiveKind, SelfClass $self, Sendable $sendable, SerialDescriptor $serialDescriptor, SerialName $serialName, SerializableClass $serializable, Serialize $serialize, SerializerProvider $serializerProvider, Set $set, Short $short, Signed $signed, SimpleModule $simpleModule, Sizeof $sizeof, Stackalloc $stackalloc, Standards $standards, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, StdDeserializer $stdDeserializer, StdSerializer $stdSerializer, 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, TimeOnly $timeOnly, TimeOnlyConverter $timeOnlyConverter, TimeZone $timeZone, 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, Union $union, Unowned $unowned, Unsafe $unsafe, Unsigned $unsigned, UseSerializers $useSerializers, Ushort $ushort) {
+    public function __construct(int $dummy, KSerializer $kSerializer, Obj5Self $obj5Self, This $obj5This, Obj5True $obj5True, TypeClass $obj5Type, PrimitiveKind $primitiveKind, Select $select, SelfClass $self, Sendable $sendable, SerialDescriptor $serialDescriptor, SerialName $serialName, SerializableClass $serializable, Serialize $serialize, SerializerProvider $serializerProvider, Set $set, Short $short, Signed $signed, SimpleModule $simpleModule, Sizeof $sizeof, Stackalloc $stackalloc, Standards $standards, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, StdDeserializer $stdDeserializer, StdSerializer $stdSerializer, 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, TimeOnly $timeOnly, TimeOnlyConverter $timeOnlyConverter, TimeZone $timeZone, ToDict $toDict, 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, Union $union, UnmarshalJSON $unmarshalJSON, Unowned $unowned, Unsafe $unsafe, UseSerializers $useSerializers) {
         $this->dummy = $dummy;
         $this->kSerializer = $kSerializer;
         $this->obj5Self = $obj5Self;
@@ -41776,6 +41937,7 @@ class Obj5 {
         $this->obj5True = $obj5True;
         $this->obj5Type = $obj5Type;
         $this->primitiveKind = $primitiveKind;
+        $this->select = $select;
         $this->self = $self;
         $this->sendable = $sendable;
         $this->serialDescriptor = $serialDescriptor;
@@ -41812,6 +41974,7 @@ class Obj5 {
         $this->timeOnly = $timeOnly;
         $this->timeOnlyConverter = $timeOnlyConverter;
         $this->timeZone = $timeZone;
+        $this->toDict = $toDict;
         $this->toJSON = $toJSON;
         $this->toString = $toString;
         $this->topLevel = $topLevel;
@@ -41829,11 +41992,10 @@ class Obj5 {
         $this->unchecked = $unchecked;
         $this->undefined = $undefined;
         $this->union = $union;
+        $this->unmarshalJSON = $unmarshalJSON;
         $this->unowned = $unowned;
         $this->unsafe = $unsafe;
-        $this->unsigned = $unsigned;
         $this->useSerializers = $useSerializers;
-        $this->ushort = $ushort;
     }
 
     /**
@@ -42171,6 +42333,54 @@ class Obj5 {
         return PrimitiveKind::sample(); /*37:primitiveKind*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Select
+     */
+    public static function fromSelect(stdClass $value): Select {
+        return Select::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toSelect(): stdClass {
+        if (Obj5::validateSelect($this->select))  {
+            return $this->select->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::select');
+    }
+
+    /**
+     * @param Select
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateSelect(Select $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Select
+     */
+    public function getSelect(): Select {
+        if (Obj5::validateSelect($this->select))  {
+            return $this->select;
+        }
+        throw new Exception('never get to getSelect Obj5::select');
+    }
+
+    /**
+     * @return Select
+     */
+    public static function sampleSelect(): Select {
+        return Select::sample(); /*38:select*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -42216,7 +42426,7 @@ class Obj5 {
      * @return SelfClass
      */
     public static function sampleSelf(): SelfClass {
-        return SelfClass::sample(); /*38:self*/
+        return SelfClass::sample(); /*39:self*/
     }
 
     /**
@@ -42264,7 +42474,7 @@ class Obj5 {
      * @return Sendable
      */
     public static function sampleSendable(): Sendable {
-        return Sendable::sample(); /*39:sendable*/
+        return Sendable::sample(); /*40:sendable*/
     }
 
     /**
@@ -42312,7 +42522,7 @@ class Obj5 {
      * @return SerialDescriptor
      */
     public static function sampleSerialDescriptor(): SerialDescriptor {
-        return SerialDescriptor::sample(); /*40:serialDescriptor*/
+        return SerialDescriptor::sample(); /*41:serialDescriptor*/
     }
 
     /**
@@ -42360,7 +42570,7 @@ class Obj5 {
      * @return SerialName
      */
     public static function sampleSerialName(): SerialName {
-        return SerialName::sample(); /*41:serialName*/
+        return SerialName::sample(); /*42:serialName*/
     }
 
     /**
@@ -42408,7 +42618,7 @@ class Obj5 {
      * @return SerializableClass
      */
     public static function sampleSerializable(): SerializableClass {
-        return SerializableClass::sample(); /*42:serializable*/
+        return SerializableClass::sample(); /*43:serializable*/
     }
 
     /**
@@ -42456,7 +42666,7 @@ class Obj5 {
      * @return Serialize
      */
     public static function sampleSerialize(): Serialize {
-        return Serialize::sample(); /*43:serialize*/
+        return Serialize::sample(); /*44:serialize*/
     }
 
     /**
@@ -42504,7 +42714,7 @@ class Obj5 {
      * @return SerializerProvider
      */
     public static function sampleSerializerProvider(): SerializerProvider {
-        return SerializerProvider::sample(); /*44:serializerProvider*/
+        return SerializerProvider::sample(); /*45:serializerProvider*/
     }
 
     /**
@@ -42552,7 +42762,7 @@ class Obj5 {
      * @return Set
      */
     public static function sampleSet(): Set {
-        return Set::sample(); /*45:set*/
+        return Set::sample(); /*46:set*/
     }
 
     /**
@@ -42600,7 +42810,7 @@ class Obj5 {
      * @return Short
      */
     public static function sampleShort(): Short {
-        return Short::sample(); /*46:short*/
+        return Short::sample(); /*47:short*/
     }
 
     /**
@@ -42648,7 +42858,7 @@ class Obj5 {
      * @return Signed
      */
     public static function sampleSigned(): Signed {
-        return Signed::sample(); /*47:signed*/
+        return Signed::sample(); /*48:signed*/
     }
 
     /**
@@ -42696,7 +42906,7 @@ class Obj5 {
      * @return SimpleModule
      */
     public static function sampleSimpleModule(): SimpleModule {
-        return SimpleModule::sample(); /*48:simpleModule*/
+        return SimpleModule::sample(); /*49:simpleModule*/
     }
 
     /**
@@ -42744,7 +42954,7 @@ class Obj5 {
      * @return Sizeof
      */
     public static function sampleSizeof(): Sizeof {
-        return Sizeof::sample(); /*49:sizeof*/
+        return Sizeof::sample(); /*50:sizeof*/
     }
 
     /**
@@ -42792,7 +43002,7 @@ class Obj5 {
      * @return Stackalloc
      */
     public static function sampleStackalloc(): Stackalloc {
-        return Stackalloc::sample(); /*50:stackalloc*/
+        return Stackalloc::sample(); /*51:stackalloc*/
     }
 
     /**
@@ -42840,7 +43050,7 @@ class Obj5 {
      * @return Standards
      */
     public static function sampleStandards(): Standards {
-        return Standards::sample(); /*51:standards*/
+        return Standards::sample(); /*52:standards*/
     }
 
     /**
@@ -42888,7 +43098,7 @@ class Obj5 {
      * @return StaticClass
      */
     public static function sampleStatic(): StaticClass {
-        return StaticClass::sample(); /*52:static*/
+        return StaticClass::sample(); /*53:static*/
     }
 
     /**
@@ -42936,7 +43146,7 @@ class Obj5 {
      * @return StaticAssert
      */
     public static function sampleStaticAssert(): StaticAssert {
-        return StaticAssert::sample(); /*53:staticAssert*/
+        return StaticAssert::sample(); /*54:staticAssert*/
     }
 
     /**
@@ -42984,7 +43194,7 @@ class Obj5 {
      * @return StaticCast
      */
     public static function sampleStaticCast(): StaticCast {
-        return StaticCast::sample(); /*54:staticCast*/
+        return StaticCast::sample(); /*55:staticCast*/
     }
 
     /**
@@ -43032,7 +43242,7 @@ class Obj5 {
      * @return StdDeserializer
      */
     public static function sampleStdDeserializer(): StdDeserializer {
-        return StdDeserializer::sample(); /*55:stdDeserializer*/
+        return StdDeserializer::sample(); /*56:stdDeserializer*/
     }
 
     /**
@@ -43080,7 +43290,7 @@ class Obj5 {
      * @return StdSerializer
      */
     public static function sampleStdSerializer(): StdSerializer {
-        return StdSerializer::sample(); /*56:stdSerializer*/
+        return StdSerializer::sample(); /*57:stdSerializer*/
     }
 
     /**
@@ -43128,7 +43338,7 @@ class Obj5 {
      * @return Strictfp
      */
     public static function sampleStrictfp(): Strictfp {
-        return Strictfp::sample(); /*57:strictfp*/
+        return Strictfp::sample(); /*58:strictfp*/
     }
 
     /**
@@ -43176,7 +43386,7 @@ class Obj5 {
      * @return StringClass
      */
     public static function sampleString(): StringClass {
-        return StringClass::sample(); /*58:string*/
+        return StringClass::sample(); /*59:string*/
     }
 
     /**
@@ -43224,7 +43434,7 @@ class Obj5 {
      * @return Struct
      */
     public static function sampleStruct(): Struct {
-        return Struct::sample(); /*59:struct*/
+        return Struct::sample(); /*60:struct*/
     }
 
     /**
@@ -43272,7 +43482,7 @@ class Obj5 {
      * @return Subscript
      */
     public static function sampleSubscript(): Subscript {
-        return Subscript::sample(); /*60:subscript*/
+        return Subscript::sample(); /*61:subscript*/
     }
 
     /**
@@ -43320,7 +43530,7 @@ class Obj5 {
      * @return Super
      */
     public static function sampleSuper(): Super {
-        return Super::sample(); /*61:super*/
+        return Super::sample(); /*62:super*/
     }
 
     /**
@@ -43368,7 +43578,7 @@ class Obj5 {
      * @return SwitchClass
      */
     public static function sampleSwitch(): SwitchClass {
-        return SwitchClass::sample(); /*62:switch*/
+        return SwitchClass::sample(); /*63:switch*/
     }
 
     /**
@@ -43416,7 +43626,7 @@ class Obj5 {
      * @return Symbol
      */
     public static function sampleSymbol(): Symbol {
-        return Symbol::sample(); /*63:symbol*/
+        return Symbol::sample(); /*64:symbol*/
     }
 
     /**
@@ -43464,7 +43674,7 @@ class Obj5 {
      * @return Synchronized
      */
     public static function sampleSynchronized(): Synchronized {
-        return Synchronized::sample(); /*64:synchronized*/
+        return Synchronized::sample(); /*65:synchronized*/
     }
 
     /**
@@ -43512,7 +43722,7 @@ class Obj5 {
      * @return System
      */
     public static function sampleSystem(): System {
-        return System::sample(); /*65:system*/
+        return System::sample(); /*66:system*/
     }
 
     /**
@@ -43560,7 +43770,7 @@ class Obj5 {
      * @return Template
      */
     public static function sampleTemplate(): Template {
-        return Template::sample(); /*66:template*/
+        return Template::sample(); /*67:template*/
     }
 
     /**
@@ -43608,7 +43818,7 @@ class Obj5 {
      * @return Then
      */
     public static function sampleThen(): Then {
-        return Then::sample(); /*67:then*/
+        return Then::sample(); /*68:then*/
     }
 
     /**
@@ -43656,7 +43866,7 @@ class Obj5 {
      * @return ThreadLocal
      */
     public static function sampleThreadLocal(): ThreadLocal {
-        return ThreadLocal::sample(); /*68:threadLocal*/
+        return ThreadLocal::sample(); /*69:threadLocal*/
     }
 
     /**
@@ -43704,7 +43914,7 @@ class Obj5 {
      * @return ThrowClass
      */
     public static function sampleThrow(): ThrowClass {
-        return ThrowClass::sample(); /*69:throw*/
+        return ThrowClass::sample(); /*70:throw*/
     }
 
     /**
@@ -43752,7 +43962,7 @@ class Obj5 {
      * @return Throws
      */
     public static function sampleThrows(): Throws {
-        return Throws::sample(); /*70:throws*/
+        return Throws::sample(); /*71:throws*/
     }
 
     /**
@@ -43800,7 +44010,7 @@ class Obj5 {
      * @return TimeOnly
      */
     public static function sampleTimeOnly(): TimeOnly {
-        return TimeOnly::sample(); /*71:timeOnly*/
+        return TimeOnly::sample(); /*72:timeOnly*/
     }
 
     /**
@@ -43848,7 +44058,7 @@ class Obj5 {
      * @return TimeOnlyConverter
      */
     public static function sampleTimeOnlyConverter(): TimeOnlyConverter {
-        return TimeOnlyConverter::sample(); /*72:timeOnlyConverter*/
+        return TimeOnlyConverter::sample(); /*73:timeOnlyConverter*/
     }
 
     /**
@@ -43896,7 +44106,55 @@ class Obj5 {
      * @return TimeZone
      */
     public static function sampleTimeZone(): TimeZone {
-        return TimeZone::sample(); /*73:timeZone*/
+        return TimeZone::sample(); /*74:timeZone*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return ToDict
+     */
+    public static function fromToDict(stdClass $value): ToDict {
+        return ToDict::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toToDict(): stdClass {
+        if (Obj5::validateToDict($this->toDict))  {
+            return $this->toDict->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::toDict');
+    }
+
+    /**
+     * @param ToDict
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateToDict(ToDict $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ToDict
+     */
+    public function getToDict(): ToDict {
+        if (Obj5::validateToDict($this->toDict))  {
+            return $this->toDict;
+        }
+        throw new Exception('never get to getToDict Obj5::toDict');
+    }
+
+    /**
+     * @return ToDict
+     */
+    public static function sampleToDict(): ToDict {
+        return ToDict::sample(); /*75:toDict*/
     }
 
     /**
@@ -43944,7 +44202,7 @@ class Obj5 {
      * @return ToJSON
      */
     public static function sampleToJSON(): ToJSON {
-        return ToJSON::sample(); /*74:toJSON*/
+        return ToJSON::sample(); /*76:toJSON*/
     }
 
     /**
@@ -43992,7 +44250,7 @@ class Obj5 {
      * @return ToString
      */
     public static function sampleToString(): ToString {
-        return ToString::sample(); /*75:toString*/
+        return ToString::sample(); /*77:toString*/
     }
 
     /**
@@ -44040,7 +44298,7 @@ class Obj5 {
      * @return TopLevelClass
      */
     public static function sampleTopLevel(): TopLevelClass {
-        return TopLevelClass::sample(); /*76:topLevel*/
+        return TopLevelClass::sample(); /*78:topLevel*/
     }
 
     /**
@@ -44088,7 +44346,7 @@ class Obj5 {
      * @return Transient
      */
     public static function sampleTransient(): Transient {
-        return Transient::sample(); /*77:transient*/
+        return Transient::sample(); /*79:transient*/
     }
 
     /**
@@ -44136,7 +44394,7 @@ class Obj5 {
      * @return TrueClass
      */
     public static function sampleTrue(): TrueClass {
-        return TrueClass::sample(); /*78:true*/
+        return TrueClass::sample(); /*80:true*/
     }
 
     /**
@@ -44184,7 +44442,7 @@ class Obj5 {
      * @return TryClass
      */
     public static function sampleTry(): TryClass {
-        return TryClass::sample(); /*79:try*/
+        return TryClass::sample(); /*81:try*/
     }
 
     /**
@@ -44232,7 +44490,7 @@ class Obj5 {
      * @return Type
      */
     public static function sampleType(): Type {
-        return Type::sample(); /*80:type*/
+        return Type::sample(); /*82:type*/
     }
 
     /**
@@ -44280,7 +44538,7 @@ class Obj5 {
      * @return Typealias
      */
     public static function sampleTypealias(): Typealias {
-        return Typealias::sample(); /*81:typealias*/
+        return Typealias::sample(); /*83:typealias*/
     }
 
     /**
@@ -44328,7 +44586,7 @@ class Obj5 {
      * @return Typedef
      */
     public static function sampleTypedef(): Typedef {
-        return Typedef::sample(); /*82:typedef*/
+        return Typedef::sample(); /*84:typedef*/
     }
 
     /**
@@ -44376,7 +44634,7 @@ class Obj5 {
      * @return Typeid
      */
     public static function sampleTypeid(): Typeid {
-        return Typeid::sample(); /*83:typeid*/
+        return Typeid::sample(); /*85:typeid*/
     }
 
     /**
@@ -44424,7 +44682,7 @@ class Obj5 {
      * @return Typename
      */
     public static function sampleTypename(): Typename {
-        return Typename::sample(); /*84:typename*/
+        return Typename::sample(); /*86:typename*/
     }
 
     /**
@@ -44472,7 +44730,7 @@ class Obj5 {
      * @return Typeof
      */
     public static function sampleTypeof(): Typeof {
-        return Typeof::sample(); /*85:typeof*/
+        return Typeof::sample(); /*87:typeof*/
     }
 
     /**
@@ -44520,7 +44778,7 @@ class Obj5 {
      * @return Uint
      */
     public static function sampleUint(): Uint {
-        return Uint::sample(); /*86:uint*/
+        return Uint::sample(); /*88:uint*/
     }
 
     /**
@@ -44568,7 +44826,7 @@ class Obj5 {
      * @return Ulong
      */
     public static function sampleUlong(): Ulong {
-        return Ulong::sample(); /*87:ulong*/
+        return Ulong::sample(); /*89:ulong*/
     }
 
     /**
@@ -44616,7 +44874,7 @@ class Obj5 {
      * @return Unchecked
      */
     public static function sampleUnchecked(): Unchecked {
-        return Unchecked::sample(); /*88:unchecked*/
+        return Unchecked::sample(); /*90:unchecked*/
     }
 
     /**
@@ -44664,7 +44922,7 @@ class Obj5 {
      * @return Undefined
      */
     public static function sampleUndefined(): Undefined {
-        return Undefined::sample(); /*89:undefined*/
+        return Undefined::sample(); /*91:undefined*/
     }
 
     /**
@@ -44712,7 +44970,55 @@ class Obj5 {
      * @return Union
      */
     public static function sampleUnion(): Union {
-        return Union::sample(); /*90:union*/
+        return Union::sample(); /*92:union*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return UnmarshalJSON
+     */
+    public static function fromUnmarshalJSON(stdClass $value): UnmarshalJSON {
+        return UnmarshalJSON::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toUnmarshalJSON(): stdClass {
+        if (Obj5::validateUnmarshalJSON($this->unmarshalJSON))  {
+            return $this->unmarshalJSON->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj5::unmarshalJSON');
+    }
+
+    /**
+     * @param UnmarshalJSON
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUnmarshalJSON(UnmarshalJSON $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return UnmarshalJSON
+     */
+    public function getUnmarshalJSON(): UnmarshalJSON {
+        if (Obj5::validateUnmarshalJSON($this->unmarshalJSON))  {
+            return $this->unmarshalJSON;
+        }
+        throw new Exception('never get to getUnmarshalJSON Obj5::unmarshalJSON');
+    }
+
+    /**
+     * @return UnmarshalJSON
+     */
+    public static function sampleUnmarshalJSON(): UnmarshalJSON {
+        return UnmarshalJSON::sample(); /*93:unmarshalJSON*/
     }
 
     /**
@@ -44760,7 +45066,7 @@ class Obj5 {
      * @return Unowned
      */
     public static function sampleUnowned(): Unowned {
-        return Unowned::sample(); /*91:unowned*/
+        return Unowned::sample(); /*94:unowned*/
     }
 
     /**
@@ -44808,55 +45114,7 @@ class Obj5 {
      * @return Unsafe
      */
     public static function sampleUnsafe(): Unsafe {
-        return Unsafe::sample(); /*92:unsafe*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Unsigned
-     */
-    public static function fromUnsigned(stdClass $value): Unsigned {
-        return Unsigned::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toUnsigned(): stdClass {
-        if (Obj5::validateUnsigned($this->unsigned))  {
-            return $this->unsigned->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::unsigned');
-    }
-
-    /**
-     * @param Unsigned
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateUnsigned(Unsigned $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Unsigned
-     */
-    public function getUnsigned(): Unsigned {
-        if (Obj5::validateUnsigned($this->unsigned))  {
-            return $this->unsigned;
-        }
-        throw new Exception('never get to getUnsigned Obj5::unsigned');
-    }
-
-    /**
-     * @return Unsigned
-     */
-    public static function sampleUnsigned(): Unsigned {
-        return Unsigned::sample(); /*93:unsigned*/
+        return Unsafe::sample(); /*95:unsafe*/
     }
 
     /**
@@ -44904,55 +45162,7 @@ class Obj5 {
      * @return UseSerializers
      */
     public static function sampleUseSerializers(): UseSerializers {
-        return UseSerializers::sample(); /*94:useSerializers*/
-    }
-
-    /**
-     * @param stdClass $value
-     * @throws Exception
-     * @return Ushort
-     */
-    public static function fromUshort(stdClass $value): Ushort {
-        return Ushort::from($value); /*class*/
-    }
-
-    /**
-     * @throws Exception
-     * @return stdClass
-     */
-    public function toUshort(): stdClass {
-        if (Obj5::validateUshort($this->ushort))  {
-            return $this->ushort->to(); /*class*/
-        }
-        throw new Exception('never get to this Obj5::ushort');
-    }
-
-    /**
-     * @param Ushort
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateUshort(Ushort $value): bool {
-        $value->validate();
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return Ushort
-     */
-    public function getUshort(): Ushort {
-        if (Obj5::validateUshort($this->ushort))  {
-            return $this->ushort;
-        }
-        throw new Exception('never get to getUshort Obj5::ushort');
-    }
-
-    /**
-     * @return Ushort
-     */
-    public static function sampleUshort(): Ushort {
-        return Ushort::sample(); /*95:ushort*/
+        return UseSerializers::sample(); /*96:useSerializers*/
     }
 
     /**
@@ -44967,6 +45177,7 @@ class Obj5 {
         || Obj5::validateObj5True($this->obj5True)
         || Obj5::validateObj5Type($this->obj5Type)
         || Obj5::validatePrimitiveKind($this->primitiveKind)
+        || Obj5::validateSelect($this->select)
         || Obj5::validateSelf($this->self)
         || Obj5::validateSendable($this->sendable)
         || Obj5::validateSerialDescriptor($this->serialDescriptor)
@@ -45003,6 +45214,7 @@ class Obj5 {
         || Obj5::validateTimeOnly($this->timeOnly)
         || Obj5::validateTimeOnlyConverter($this->timeOnlyConverter)
         || Obj5::validateTimeZone($this->timeZone)
+        || Obj5::validateToDict($this->toDict)
         || Obj5::validateToJSON($this->toJSON)
         || Obj5::validateToString($this->toString)
         || Obj5::validateTopLevel($this->topLevel)
@@ -45020,11 +45232,10 @@ class Obj5 {
         || Obj5::validateUnchecked($this->unchecked)
         || Obj5::validateUndefined($this->undefined)
         || Obj5::validateUnion($this->union)
+        || Obj5::validateUnmarshalJSON($this->unmarshalJSON)
         || Obj5::validateUnowned($this->unowned)
         || Obj5::validateUnsafe($this->unsafe)
-        || Obj5::validateUnsigned($this->unsigned)
-        || Obj5::validateUseSerializers($this->useSerializers)
-        || Obj5::validateUshort($this->ushort);
+        || Obj5::validateUseSerializers($this->useSerializers);
     }
 
     /**
@@ -45040,6 +45251,7 @@ class Obj5 {
         $out->{'true'} = $this->toObj5True();
         $out->{'type'} = $this->toObj5Type();
         $out->{'PrimitiveKind'} = $this->toPrimitiveKind();
+        $out->{'select'} = $this->toSelect();
         $out->{'Self'} = $this->toSelf();
         $out->{'Sendable'} = $this->toSendable();
         $out->{'SerialDescriptor'} = $this->toSerialDescriptor();
@@ -45076,6 +45288,7 @@ class Obj5 {
         $out->{'TimeOnly'} = $this->toTimeOnly();
         $out->{'TimeOnlyConverter'} = $this->toTimeOnlyConverter();
         $out->{'TimeZone'} = $this->toTimeZone();
+        $out->{'to_dict'} = $this->toToDict();
         $out->{'to_json'} = $this->toToJSON();
         $out->{'toString'} = $this->toToString();
         $out->{'top_level'} = $this->toTopLevel();
@@ -45093,11 +45306,10 @@ class Obj5 {
         $out->{'unchecked'} = $this->toUnchecked();
         $out->{'undefined'} = $this->toUndefined();
         $out->{'union'} = $this->toUnion();
+        $out->{'UnmarshalJSON'} = $this->toUnmarshalJSON();
         $out->{'unowned'} = $this->toUnowned();
         $out->{'unsafe'} = $this->toUnsafe();
-        $out->{'unsigned'} = $this->toUnsigned();
         $out->{'UseSerializers'} = $this->toUseSerializers();
-        $out->{'ushort'} = $this->toUshort();
         return $out;
     }
 
@@ -45128,6 +45340,9 @@ class Obj5 {
         if (!property_exists($obj, 'PrimitiveKind')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'select')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'Self')) {
             throw new Exception("Missing required property");
         }
@@ -45236,6 +45451,9 @@ class Obj5 {
         if (!property_exists($obj, 'TimeZone')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'to_dict')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'to_json')) {
             throw new Exception("Missing required property");
         }
@@ -45287,21 +45505,18 @@ class Obj5 {
         if (!property_exists($obj, 'union')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'unowned')) {
+        if (!property_exists($obj, 'UnmarshalJSON')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'unsafe')) {
+        if (!property_exists($obj, 'unowned')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'unsigned')) {
+        if (!property_exists($obj, 'unsafe')) {
             throw new Exception("Missing required property");
         }
         if (!property_exists($obj, 'UseSerializers')) {
             throw new Exception("Missing required property");
         }
-        if (!property_exists($obj, 'ushort')) {
-            throw new Exception("Missing required property");
-        }
         return new Obj5(
          Obj5::fromDummy($obj->{'dummy'})
         ,Obj5::fromKSerializer($obj->{'KSerializer'})
@@ -45310,6 +45525,7 @@ class Obj5 {
         ,Obj5::fromObj5True($obj->{'true'})
         ,Obj5::fromObj5Type($obj->{'type'})
         ,Obj5::fromPrimitiveKind($obj->{'PrimitiveKind'})
+        ,Obj5::fromSelect($obj->{'select'})
         ,Obj5::fromSelf($obj->{'Self'})
         ,Obj5::fromSendable($obj->{'Sendable'})
         ,Obj5::fromSerialDescriptor($obj->{'SerialDescriptor'})
@@ -45346,6 +45562,7 @@ class Obj5 {
         ,Obj5::fromTimeOnly($obj->{'TimeOnly'})
         ,Obj5::fromTimeOnlyConverter($obj->{'TimeOnlyConverter'})
         ,Obj5::fromTimeZone($obj->{'TimeZone'})
+        ,Obj5::fromToDict($obj->{'to_dict'})
         ,Obj5::fromToJSON($obj->{'to_json'})
         ,Obj5::fromToString($obj->{'toString'})
         ,Obj5::fromTopLevel($obj->{'top_level'})
@@ -45363,11 +45580,10 @@ class Obj5 {
         ,Obj5::fromUnchecked($obj->{'unchecked'})
         ,Obj5::fromUndefined($obj->{'undefined'})
         ,Obj5::fromUnion($obj->{'union'})
+        ,Obj5::fromUnmarshalJSON($obj->{'UnmarshalJSON'})
         ,Obj5::fromUnowned($obj->{'unowned'})
         ,Obj5::fromUnsafe($obj->{'unsafe'})
-        ,Obj5::fromUnsigned($obj->{'unsigned'})
         ,Obj5::fromUseSerializers($obj->{'UseSerializers'})
-        ,Obj5::fromUshort($obj->{'ushort'})
         );
     }
 
@@ -45383,6 +45599,7 @@ class Obj5 {
         ,Obj5::sampleObj5True()
         ,Obj5::sampleObj5Type()
         ,Obj5::samplePrimitiveKind()
+        ,Obj5::sampleSelect()
         ,Obj5::sampleSelf()
         ,Obj5::sampleSendable()
         ,Obj5::sampleSerialDescriptor()
@@ -45419,6 +45636,7 @@ class Obj5 {
         ,Obj5::sampleTimeOnly()
         ,Obj5::sampleTimeOnlyConverter()
         ,Obj5::sampleTimeZone()
+        ,Obj5::sampleToDict()
         ,Obj5::sampleToJSON()
         ,Obj5::sampleToString()
         ,Obj5::sampleTopLevel()
@@ -45436,11 +45654,10 @@ class Obj5 {
         ,Obj5::sampleUnchecked()
         ,Obj5::sampleUndefined()
         ,Obj5::sampleUnion()
+        ,Obj5::sampleUnmarshalJSON()
         ,Obj5::sampleUnowned()
         ,Obj5::sampleUnsafe()
-        ,Obj5::sampleUnsigned()
         ,Obj5::sampleUseSerializers()
-        ,Obj5::sampleUshort()
         );
     }
 }
@@ -46051,6 +46268,107 @@ class PrimitiveKind {
     }
 }
 
+// This is an autogenerated file:Select
+
+class Select {
+    private int $select; // json:select Required
+
+    /**
+     * @param int $select
+     */
+    public function __construct(int $select) {
+        $this->select = $select;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromSelect(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toSelect(): int {
+        if (Select::validateSelect($this->select))  {
+            return $this->select; /*int*/
+        }
+        throw new Exception('never get to this Select::select');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateSelect(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getSelect(): int {
+        if (Select::validateSelect($this->select))  {
+            return $this->select;
+        }
+        throw new Exception('never get to getSelect Select::select');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleSelect(): int {
+        return 31; /*31:select*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Select::validateSelect($this->select);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'select'} = $this->toSelect();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Select
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Select {
+        if (!property_exists($obj, 'select')) {
+            throw new Exception("Missing required property");
+        }
+        return new Select(
+         Select::fromSelect($obj->{'select'})
+        );
+    }
+
+    /**
+     * @return Select
+     */
+    public static function sample(): Select {
+        return new Select(
+         Select::sampleSelect()
+        );
+    }
+}
+
 // This is an autogenerated file:SelfClass
 
 class SelfClass {
@@ -49687,6 +50005,107 @@ class TimeZone {
     }
 }
 
+// This is an autogenerated file:ToDict
+
+class ToDict {
+    private int $toDict; // json:to_dict Required
+
+    /**
+     * @param int $toDict
+     */
+    public function __construct(int $toDict) {
+        $this->toDict = $toDict;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromToDict(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toToDict(): int {
+        if (ToDict::validateToDict($this->toDict))  {
+            return $this->toDict; /*int*/
+        }
+        throw new Exception('never get to this ToDict::toDict');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateToDict(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getToDict(): int {
+        if (ToDict::validateToDict($this->toDict))  {
+            return $this->toDict;
+        }
+        throw new Exception('never get to getToDict ToDict::toDict');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleToDict(): int {
+        return 31; /*31:toDict*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return ToDict::validateToDict($this->toDict);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'to_dict'} = $this->toToDict();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return ToDict
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): ToDict {
+        if (!property_exists($obj, 'to_dict')) {
+            throw new Exception("Missing required property");
+        }
+        return new ToDict(
+         ToDict::fromToDict($obj->{'to_dict'})
+        );
+    }
+
+    /**
+     * @return ToDict
+     */
+    public static function sample(): ToDict {
+        return new ToDict(
+         ToDict::sampleToDict()
+        );
+    }
+}
+
 // This is an autogenerated file:ToJSON
 
 class ToJSON {
@@ -51404,16 +51823,16 @@ class Union {
     }
 }
 
-// This is an autogenerated file:Unowned
+// This is an autogenerated file:UnmarshalJSON
 
-class Unowned {
-    private int $unowned; // json:unowned Required
+class UnmarshalJSON {
+    private int $unmarshalJSON; // json:UnmarshalJSON Required
 
     /**
-     * @param int $unowned
+     * @param int $unmarshalJSON
      */
-    public function __construct(int $unowned) {
-        $this->unowned = $unowned;
+    public function __construct(int $unmarshalJSON) {
+        $this->unmarshalJSON = $unmarshalJSON;
     }
 
     /**
@@ -51421,7 +51840,7 @@ class Unowned {
      * @throws Exception
      * @return int
      */
-    public static function fromUnowned(int $value): int {
+    public static function fromUnmarshalJSON(int $value): int {
         return $value; /*int*/
     }
 
@@ -51429,11 +51848,11 @@ class Unowned {
      * @throws Exception
      * @return int
      */
-    public function toUnowned(): int {
-        if (Unowned::validateUnowned($this->unowned))  {
-            return $this->unowned; /*int*/
+    public function toUnmarshalJSON(): int {
+        if (UnmarshalJSON::validateUnmarshalJSON($this->unmarshalJSON))  {
+            return $this->unmarshalJSON; /*int*/
         }
-        throw new Exception('never get to this Unowned::unowned');
+        throw new Exception('never get to this UnmarshalJSON::unmarshalJSON');
     }
 
     /**
@@ -51441,7 +51860,7 @@ class Unowned {
      * @return bool
      * @throws Exception
      */
-    public static function validateUnowned(int $value): bool {
+    public static function validateUnmarshalJSON(int $value): bool {
         return true;
     }
 
@@ -51449,18 +51868,18 @@ class Unowned {
      * @throws Exception
      * @return int
      */
-    public function getUnowned(): int {
-        if (Unowned::validateUnowned($this->unowned))  {
-            return $this->unowned;
+    public function getUnmarshalJSON(): int {
+        if (UnmarshalJSON::validateUnmarshalJSON($this->unmarshalJSON))  {
+            return $this->unmarshalJSON;
         }
-        throw new Exception('never get to getUnowned Unowned::unowned');
+        throw new Exception('never get to getUnmarshalJSON UnmarshalJSON::unmarshalJSON');
     }
 
     /**
      * @return int
      */
-    public static function sampleUnowned(): int {
-        return 31; /*31:unowned*/
+    public static function sampleUnmarshalJSON(): int {
+        return 31; /*31:unmarshalJSON*/
     }
 
     /**
@@ -51468,7 +51887,7 @@ class Unowned {
      * @return bool
      */
     public function validate(): bool {
-        return Unowned::validateUnowned($this->unowned);
+        return UnmarshalJSON::validateUnmarshalJSON($this->unmarshalJSON);
     }
 
     /**
@@ -51477,44 +51896,44 @@ class Unowned {
      */
     public function to(): stdClass  {
         $out = new stdClass();
-        $out->{'unowned'} = $this->toUnowned();
+        $out->{'UnmarshalJSON'} = $this->toUnmarshalJSON();
         return $out;
     }
 
     /**
      * @param stdClass $obj
-     * @return Unowned
+     * @return UnmarshalJSON
      * @throws Exception
      */
-    public static function from(stdClass $obj): Unowned {
-        if (!property_exists($obj, 'unowned')) {
+    public static function from(stdClass $obj): UnmarshalJSON {
+        if (!property_exists($obj, 'UnmarshalJSON')) {
             throw new Exception("Missing required property");
         }
-        return new Unowned(
-         Unowned::fromUnowned($obj->{'unowned'})
+        return new UnmarshalJSON(
+         UnmarshalJSON::fromUnmarshalJSON($obj->{'UnmarshalJSON'})
         );
     }
 
     /**
-     * @return Unowned
+     * @return UnmarshalJSON
      */
-    public static function sample(): Unowned {
-        return new Unowned(
-         Unowned::sampleUnowned()
+    public static function sample(): UnmarshalJSON {
+        return new UnmarshalJSON(
+         UnmarshalJSON::sampleUnmarshalJSON()
         );
     }
 }
 
-// This is an autogenerated file:Unsafe
+// This is an autogenerated file:Unowned
 
-class Unsafe {
-    private int $unsafe; // json:unsafe Required
+class Unowned {
+    private int $unowned; // json:unowned Required
 
     /**
-     * @param int $unsafe
+     * @param int $unowned
      */
-    public function __construct(int $unsafe) {
-        $this->unsafe = $unsafe;
+    public function __construct(int $unowned) {
+        $this->unowned = $unowned;
     }
 
     /**
@@ -51522,7 +51941,7 @@ class Unsafe {
      * @throws Exception
      * @return int
      */
-    public static function fromUnsafe(int $value): int {
+    public static function fromUnowned(int $value): int {
         return $value; /*int*/
     }
 
@@ -51530,11 +51949,11 @@ class Unsafe {
      * @throws Exception
      * @return int
      */
-    public function toUnsafe(): int {
-        if (Unsafe::validateUnsafe($this->unsafe))  {
-            return $this->unsafe; /*int*/
+    public function toUnowned(): int {
+        if (Unowned::validateUnowned($this->unowned))  {
+            return $this->unowned; /*int*/
         }
-        throw new Exception('never get to this Unsafe::unsafe');
+        throw new Exception('never get to this Unowned::unowned');
     }
 
     /**
@@ -51542,7 +51961,7 @@ class Unsafe {
      * @return bool
      * @throws Exception
      */
-    public static function validateUnsafe(int $value): bool {
+    public static function validateUnowned(int $value): bool {
         return true;
     }
 
@@ -51550,18 +51969,18 @@ class Unsafe {
      * @throws Exception
      * @return int
      */
-    public function getUnsafe(): int {
-        if (Unsafe::validateUnsafe($this->unsafe))  {
-            return $this->unsafe;
+    public function getUnowned(): int {
+        if (Unowned::validateUnowned($this->unowned))  {
+            return $this->unowned;
         }
-        throw new Exception('never get to getUnsafe Unsafe::unsafe');
+        throw new Exception('never get to getUnowned Unowned::unowned');
     }
 
     /**
      * @return int
      */
-    public static function sampleUnsafe(): int {
-        return 31; /*31:unsafe*/
+    public static function sampleUnowned(): int {
+        return 31; /*31:unowned*/
     }
 
     /**
@@ -51569,7 +51988,7 @@ class Unsafe {
      * @return bool
      */
     public function validate(): bool {
-        return Unsafe::validateUnsafe($this->unsafe);
+        return Unowned::validateUnowned($this->unowned);
     }
 
     /**
@@ -51578,44 +51997,44 @@ class Unsafe {
      */
     public function to(): stdClass  {
         $out = new stdClass();
-        $out->{'unsafe'} = $this->toUnsafe();
+        $out->{'unowned'} = $this->toUnowned();
         return $out;
     }
 
     /**
      * @param stdClass $obj
-     * @return Unsafe
+     * @return Unowned
      * @throws Exception
      */
-    public static function from(stdClass $obj): Unsafe {
-        if (!property_exists($obj, 'unsafe')) {
+    public static function from(stdClass $obj): Unowned {
+        if (!property_exists($obj, 'unowned')) {
             throw new Exception("Missing required property");
         }
-        return new Unsafe(
-         Unsafe::fromUnsafe($obj->{'unsafe'})
+        return new Unowned(
+         Unowned::fromUnowned($obj->{'unowned'})
         );
     }
 
     /**
-     * @return Unsafe
+     * @return Unowned
      */
-    public static function sample(): Unsafe {
-        return new Unsafe(
-         Unsafe::sampleUnsafe()
+    public static function sample(): Unowned {
+        return new Unowned(
+         Unowned::sampleUnowned()
         );
     }
 }
 
-// This is an autogenerated file:Unsigned
+// This is an autogenerated file:Unsafe
 
-class Unsigned {
-    private int $unsigned; // json:unsigned Required
+class Unsafe {
+    private int $unsafe; // json:unsafe Required
 
     /**
-     * @param int $unsigned
+     * @param int $unsafe
      */
-    public function __construct(int $unsigned) {
-        $this->unsigned = $unsigned;
+    public function __construct(int $unsafe) {
+        $this->unsafe = $unsafe;
     }
 
     /**
@@ -51623,7 +52042,7 @@ class Unsigned {
      * @throws Exception
      * @return int
      */
-    public static function fromUnsigned(int $value): int {
+    public static function fromUnsafe(int $value): int {
         return $value; /*int*/
     }
 
@@ -51631,11 +52050,11 @@ class Unsigned {
      * @throws Exception
      * @return int
      */
-    public function toUnsigned(): int {
-        if (Unsigned::validateUnsigned($this->unsigned))  {
-            return $this->unsigned; /*int*/
+    public function toUnsafe(): int {
+        if (Unsafe::validateUnsafe($this->unsafe))  {
+            return $this->unsafe; /*int*/
         }
-        throw new Exception('never get to this Unsigned::unsigned');
+        throw new Exception('never get to this Unsafe::unsafe');
     }
 
     /**
@@ -51643,7 +52062,7 @@ class Unsigned {
      * @return bool
      * @throws Exception
      */
-    public static function validateUnsigned(int $value): bool {
+    public static function validateUnsafe(int $value): bool {
         return true;
     }
 
@@ -51651,18 +52070,18 @@ class Unsigned {
      * @throws Exception
      * @return int
      */
-    public function getUnsigned(): int {
-        if (Unsigned::validateUnsigned($this->unsigned))  {
-            return $this->unsigned;
+    public function getUnsafe(): int {
+        if (Unsafe::validateUnsafe($this->unsafe))  {
+            return $this->unsafe;
         }
-        throw new Exception('never get to getUnsigned Unsigned::unsigned');
+        throw new Exception('never get to getUnsafe Unsafe::unsafe');
     }
 
     /**
      * @return int
      */
-    public static function sampleUnsigned(): int {
-        return 31; /*31:unsigned*/
+    public static function sampleUnsafe(): int {
+        return 31; /*31:unsafe*/
     }
 
     /**
@@ -51670,7 +52089,7 @@ class Unsigned {
      * @return bool
      */
     public function validate(): bool {
-        return Unsigned::validateUnsigned($this->unsigned);
+        return Unsafe::validateUnsafe($this->unsafe);
     }
 
     /**
@@ -51679,30 +52098,30 @@ class Unsigned {
      */
     public function to(): stdClass  {
         $out = new stdClass();
-        $out->{'unsigned'} = $this->toUnsigned();
+        $out->{'unsafe'} = $this->toUnsafe();
         return $out;
     }
 
     /**
      * @param stdClass $obj
-     * @return Unsigned
+     * @return Unsafe
      * @throws Exception
      */
-    public static function from(stdClass $obj): Unsigned {
-        if (!property_exists($obj, 'unsigned')) {
+    public static function from(stdClass $obj): Unsafe {
+        if (!property_exists($obj, 'unsafe')) {
             throw new Exception("Missing required property");
         }
-        return new Unsigned(
-         Unsigned::fromUnsigned($obj->{'unsigned'})
+        return new Unsafe(
+         Unsafe::fromUnsafe($obj->{'unsafe'})
         );
     }
 
     /**
-     * @return Unsigned
+     * @return Unsafe
      */
-    public static function sample(): Unsigned {
-        return new Unsigned(
-         Unsigned::sampleUnsigned()
+    public static function sample(): Unsafe {
+        return new Unsafe(
+         Unsafe::sampleUnsafe()
         );
     }
 }
@@ -51808,111 +52227,12 @@ class UseSerializers {
     }
 }
 
-// This is an autogenerated file:Ushort
-
-class Ushort {
-    private int $ushort; // json:ushort Required
-
-    /**
-     * @param int $ushort
-     */
-    public function __construct(int $ushort) {
-        $this->ushort = $ushort;
-    }
-
-    /**
-     * @param int $value
-     * @throws Exception
-     * @return int
-     */
-    public static function fromUshort(int $value): int {
-        return $value; /*int*/
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function toUshort(): int {
-        if (Ushort::validateUshort($this->ushort))  {
-            return $this->ushort; /*int*/
-        }
-        throw new Exception('never get to this Ushort::ushort');
-    }
-
-    /**
-     * @param int
-     * @return bool
-     * @throws Exception
-     */
-    public static function validateUshort(int $value): bool {
-        return true;
-    }
-
-    /**
-     * @throws Exception
-     * @return int
-     */
-    public function getUshort(): int {
-        if (Ushort::validateUshort($this->ushort))  {
-            return $this->ushort;
-        }
-        throw new Exception('never get to getUshort Ushort::ushort');
-    }
-
-    /**
-     * @return int
-     */
-    public static function sampleUshort(): int {
-        return 31; /*31:ushort*/
-    }
-
-    /**
-     * @throws Exception
-     * @return bool
-     */
-    public function validate(): bool {
-        return Ushort::validateUshort($this->ushort);
-    }
-
-    /**
-     * @return stdClass
-     * @throws Exception
-     */
-    public function to(): stdClass  {
-        $out = new stdClass();
-        $out->{'ushort'} = $this->toUshort();
-        return $out;
-    }
-
-    /**
-     * @param stdClass $obj
-     * @return Ushort
-     * @throws Exception
-     */
-    public static function from(stdClass $obj): Ushort {
-        if (!property_exists($obj, 'ushort')) {
-            throw new Exception("Missing required property");
-        }
-        return new Ushort(
-         Ushort::fromUshort($obj->{'ushort'})
-        );
-    }
-
-    /**
-     * @return Ushort
-     */
-    public static function sample(): Ushort {
-        return new Ushort(
-         Ushort::sampleUshort()
-        );
-    }
-}
-
 // This is an autogenerated file:Obj6
 
 class Obj6 {
     private int $dummy; // json:dummy Required
+    private Unsigned $unsigned; // json:unsigned Required
+    private Ushort $ushort; // json:ushort Required
     private Using $using; // json:using Required
     private Utf8JSONReader $utf8JSONReader; // json:Utf8JsonReader Required
     private Utf8JSONWriter $utf8JSONWriter; // json:Utf8JsonWriter Required
@@ -51934,6 +52254,8 @@ class Obj6 {
 
     /**
      * @param int $dummy
+     * @param Unsigned $unsigned
+     * @param Ushort $ushort
      * @param Using $using
      * @param Utf8JSONReader $utf8JSONReader
      * @param Utf8JSONWriter $utf8JSONWriter
@@ -51953,8 +52275,10 @@ class Obj6 {
      * @param Yes $yes
      * @param YieldClass $yield
      */
-    public function __construct(int $dummy, Using $using, Utf8JSONReader $utf8JSONReader, Utf8JSONWriter $utf8JSONWriter, UUID $uuid, VarClass $var, Virtual $virtual, VoidClass $void, Volatile $volatile, WcharT $wcharT, Weak $weak, Where $where, WhileClass $while, WillSet $willSet, With $with, XorClass $xor, XorEq $xorEq, Yes $yes, YieldClass $yield) {
+    public function __construct(int $dummy, Unsigned $unsigned, Ushort $ushort, Using $using, Utf8JSONReader $utf8JSONReader, Utf8JSONWriter $utf8JSONWriter, UUID $uuid, VarClass $var, Virtual $virtual, VoidClass $void, Volatile $volatile, WcharT $wcharT, Weak $weak, Where $where, WhileClass $while, WillSet $willSet, With $with, XorClass $xor, XorEq $xorEq, Yes $yes, YieldClass $yield) {
         $this->dummy = $dummy;
+        $this->unsigned = $unsigned;
+        $this->ushort = $ushort;
         $this->using = $using;
         $this->utf8JSONReader = $utf8JSONReader;
         $this->utf8JSONWriter = $utf8JSONWriter;
@@ -52022,6 +52346,102 @@ class Obj6 {
         return 31; /*31:dummy*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Unsigned
+     */
+    public static function fromUnsigned(stdClass $value): Unsigned {
+        return Unsigned::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toUnsigned(): stdClass {
+        if (Obj6::validateUnsigned($this->unsigned))  {
+            return $this->unsigned->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::unsigned');
+    }
+
+    /**
+     * @param Unsigned
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUnsigned(Unsigned $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Unsigned
+     */
+    public function getUnsigned(): Unsigned {
+        if (Obj6::validateUnsigned($this->unsigned))  {
+            return $this->unsigned;
+        }
+        throw new Exception('never get to getUnsigned Obj6::unsigned');
+    }
+
+    /**
+     * @return Unsigned
+     */
+    public static function sampleUnsigned(): Unsigned {
+        return Unsigned::sample(); /*32:unsigned*/
+    }
+
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return Ushort
+     */
+    public static function fromUshort(stdClass $value): Ushort {
+        return Ushort::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toUshort(): stdClass {
+        if (Obj6::validateUshort($this->ushort))  {
+            return $this->ushort->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj6::ushort');
+    }
+
+    /**
+     * @param Ushort
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUshort(Ushort $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return Ushort
+     */
+    public function getUshort(): Ushort {
+        if (Obj6::validateUshort($this->ushort))  {
+            return $this->ushort;
+        }
+        throw new Exception('never get to getUshort Obj6::ushort');
+    }
+
+    /**
+     * @return Ushort
+     */
+    public static function sampleUshort(): Ushort {
+        return Ushort::sample(); /*33:ushort*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -52067,7 +52487,7 @@ class Obj6 {
      * @return Using
      */
     public static function sampleUsing(): Using {
-        return Using::sample(); /*32:using*/
+        return Using::sample(); /*34:using*/
     }
 
     /**
@@ -52115,7 +52535,7 @@ class Obj6 {
      * @return Utf8JSONReader
      */
     public static function sampleUtf8JSONReader(): Utf8JSONReader {
-        return Utf8JSONReader::sample(); /*33:utf8JSONReader*/
+        return Utf8JSONReader::sample(); /*35:utf8JSONReader*/
     }
 
     /**
@@ -52163,7 +52583,7 @@ class Obj6 {
      * @return Utf8JSONWriter
      */
     public static function sampleUtf8JSONWriter(): Utf8JSONWriter {
-        return Utf8JSONWriter::sample(); /*34:utf8JSONWriter*/
+        return Utf8JSONWriter::sample(); /*36:utf8JSONWriter*/
     }
 
     /**
@@ -52211,7 +52631,7 @@ class Obj6 {
      * @return UUID
      */
     public static function sampleUUID(): UUID {
-        return UUID::sample(); /*35:uuid*/
+        return UUID::sample(); /*37:uuid*/
     }
 
     /**
@@ -52259,7 +52679,7 @@ class Obj6 {
      * @return VarClass
      */
     public static function sampleVar(): VarClass {
-        return VarClass::sample(); /*36:var*/
+        return VarClass::sample(); /*38:var*/
     }
 
     /**
@@ -52307,7 +52727,7 @@ class Obj6 {
      * @return Virtual
      */
     public static function sampleVirtual(): Virtual {
-        return Virtual::sample(); /*37:virtual*/
+        return Virtual::sample(); /*39:virtual*/
     }
 
     /**
@@ -52355,7 +52775,7 @@ class Obj6 {
      * @return VoidClass
      */
     public static function sampleVoid(): VoidClass {
-        return VoidClass::sample(); /*38:void*/
+        return VoidClass::sample(); /*40:void*/
     }
 
     /**
@@ -52403,7 +52823,7 @@ class Obj6 {
      * @return Volatile
      */
     public static function sampleVolatile(): Volatile {
-        return Volatile::sample(); /*39:volatile*/
+        return Volatile::sample(); /*41:volatile*/
     }
 
     /**
@@ -52451,7 +52871,7 @@ class Obj6 {
      * @return WcharT
      */
     public static function sampleWcharT(): WcharT {
-        return WcharT::sample(); /*40:wcharT*/
+        return WcharT::sample(); /*42:wcharT*/
     }
 
     /**
@@ -52499,7 +52919,7 @@ class Obj6 {
      * @return Weak
      */
     public static function sampleWeak(): Weak {
-        return Weak::sample(); /*41:weak*/
+        return Weak::sample(); /*43:weak*/
     }
 
     /**
@@ -52547,7 +52967,7 @@ class Obj6 {
      * @return Where
      */
     public static function sampleWhere(): Where {
-        return Where::sample(); /*42:where*/
+        return Where::sample(); /*44:where*/
     }
 
     /**
@@ -52595,7 +53015,7 @@ class Obj6 {
      * @return WhileClass
      */
     public static function sampleWhile(): WhileClass {
-        return WhileClass::sample(); /*43:while*/
+        return WhileClass::sample(); /*45:while*/
     }
 
     /**
@@ -52643,7 +53063,7 @@ class Obj6 {
      * @return WillSet
      */
     public static function sampleWillSet(): WillSet {
-        return WillSet::sample(); /*44:willSet*/
+        return WillSet::sample(); /*46:willSet*/
     }
 
     /**
@@ -52691,7 +53111,7 @@ class Obj6 {
      * @return With
      */
     public static function sampleWith(): With {
-        return With::sample(); /*45:with*/
+        return With::sample(); /*47:with*/
     }
 
     /**
@@ -52739,7 +53159,7 @@ class Obj6 {
      * @return XorClass
      */
     public static function sampleXor(): XorClass {
-        return XorClass::sample(); /*46:xor*/
+        return XorClass::sample(); /*48:xor*/
     }
 
     /**
@@ -52787,7 +53207,7 @@ class Obj6 {
      * @return XorEq
      */
     public static function sampleXorEq(): XorEq {
-        return XorEq::sample(); /*47:xorEq*/
+        return XorEq::sample(); /*49:xorEq*/
     }
 
     /**
@@ -52835,7 +53255,7 @@ class Obj6 {
      * @return Yes
      */
     public static function sampleYes(): Yes {
-        return Yes::sample(); /*48:yes*/
+        return Yes::sample(); /*50:yes*/
     }
 
     /**
@@ -52883,7 +53303,7 @@ class Obj6 {
      * @return YieldClass
      */
     public static function sampleYield(): YieldClass {
-        return YieldClass::sample(); /*49:yield*/
+        return YieldClass::sample(); /*51:yield*/
     }
 
     /**
@@ -52892,6 +53312,8 @@ class Obj6 {
      */
     public function validate(): bool {
         return Obj6::validateDummy($this->dummy)
+        || Obj6::validateUnsigned($this->unsigned)
+        || Obj6::validateUshort($this->ushort)
         || Obj6::validateUsing($this->using)
         || Obj6::validateUtf8JSONReader($this->utf8JSONReader)
         || Obj6::validateUtf8JSONWriter($this->utf8JSONWriter)
@@ -52919,6 +53341,8 @@ class Obj6 {
     public function to(): stdClass  {
         $out = new stdClass();
         $out->{'dummy'} = $this->toDummy();
+        $out->{'unsigned'} = $this->toUnsigned();
+        $out->{'ushort'} = $this->toUshort();
         $out->{'using'} = $this->toUsing();
         $out->{'Utf8JsonReader'} = $this->toUtf8JSONReader();
         $out->{'Utf8JsonWriter'} = $this->toUtf8JSONWriter();
@@ -52949,6 +53373,12 @@ class Obj6 {
         if (!property_exists($obj, 'dummy')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 'unsigned')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ushort')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'using')) {
             throw new Exception("Missing required property");
         }
@@ -53005,6 +53435,8 @@ class Obj6 {
         }
         return new Obj6(
          Obj6::fromDummy($obj->{'dummy'})
+        ,Obj6::fromUnsigned($obj->{'unsigned'})
+        ,Obj6::fromUshort($obj->{'ushort'})
         ,Obj6::fromUsing($obj->{'using'})
         ,Obj6::fromUtf8JSONReader($obj->{'Utf8JsonReader'})
         ,Obj6::fromUtf8JSONWriter($obj->{'Utf8JsonWriter'})
@@ -53032,6 +53464,8 @@ class Obj6 {
     public static function sample(): Obj6 {
         return new Obj6(
          Obj6::sampleDummy()
+        ,Obj6::sampleUnsigned()
+        ,Obj6::sampleUshort()
         ,Obj6::sampleUsing()
         ,Obj6::sampleUtf8JSONReader()
         ,Obj6::sampleUtf8JSONWriter()
@@ -53054,6 +53488,208 @@ class Obj6 {
     }
 }
 
+// This is an autogenerated file:Unsigned
+
+class Unsigned {
+    private int $unsigned; // json:unsigned Required
+
+    /**
+     * @param int $unsigned
+     */
+    public function __construct(int $unsigned) {
+        $this->unsigned = $unsigned;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromUnsigned(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toUnsigned(): int {
+        if (Unsigned::validateUnsigned($this->unsigned))  {
+            return $this->unsigned; /*int*/
+        }
+        throw new Exception('never get to this Unsigned::unsigned');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUnsigned(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getUnsigned(): int {
+        if (Unsigned::validateUnsigned($this->unsigned))  {
+            return $this->unsigned;
+        }
+        throw new Exception('never get to getUnsigned Unsigned::unsigned');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleUnsigned(): int {
+        return 31; /*31:unsigned*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Unsigned::validateUnsigned($this->unsigned);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'unsigned'} = $this->toUnsigned();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Unsigned
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Unsigned {
+        if (!property_exists($obj, 'unsigned')) {
+            throw new Exception("Missing required property");
+        }
+        return new Unsigned(
+         Unsigned::fromUnsigned($obj->{'unsigned'})
+        );
+    }
+
+    /**
+     * @return Unsigned
+     */
+    public static function sample(): Unsigned {
+        return new Unsigned(
+         Unsigned::sampleUnsigned()
+        );
+    }
+}
+
+// This is an autogenerated file:Ushort
+
+class Ushort {
+    private int $ushort; // json:ushort Required
+
+    /**
+     * @param int $ushort
+     */
+    public function __construct(int $ushort) {
+        $this->ushort = $ushort;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromUshort(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toUshort(): int {
+        if (Ushort::validateUshort($this->ushort))  {
+            return $this->ushort; /*int*/
+        }
+        throw new Exception('never get to this Ushort::ushort');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUshort(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getUshort(): int {
+        if (Ushort::validateUshort($this->ushort))  {
+            return $this->ushort;
+        }
+        throw new Exception('never get to getUshort Ushort::ushort');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleUshort(): int {
+        return 31; /*31:ushort*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return Ushort::validateUshort($this->ushort);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'ushort'} = $this->toUshort();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return Ushort
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): Ushort {
+        if (!property_exists($obj, 'ushort')) {
+            throw new Exception("Missing required property");
+        }
+        return new Ushort(
+         Ushort::fromUshort($obj->{'ushort'})
+        );
+    }
+
+    /**
+     * @return Ushort
+     */
+    public static function sample(): Ushort {
+        return new Ushort(
+         Ushort::sampleUshort()
+        );
+    }
+}
+
 // This is an autogenerated file:Using
 
 class Using {
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 0140888..c62938e 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
@@ -1727,11 +1727,11 @@ class Obj2 {
     FormatException   format_exception;    // json: "FormatException"
     Friend            friend;              // json: "friend"
     From              from;                // json: "from"
+    FromDict          from_dict;           // json: "from_dict"
     FromJson          from_json;           // json: "from_json"
     Func              func;                // json: "func"
     Get               get;                 // json: "get"
     Go                go;                  // json: "go"
-    Goto              goto;                // json: "goto"
     Default           obj2_default;        // json: "default"
     Do                obj2_do;             // json: "do"
     Else              obj2_else;           // json: "else"
@@ -1795,11 +1795,11 @@ class Obj2 {
             "FormatException" : format_exception,
             "friend" : friend,
             "from" : from,
+            "from_dict" : from_dict,
             "from_json" : from_json,
             "func" : func,
             "get" : get,
             "go" : go,
-            "goto" : goto,
             "default" : obj2_default,
             "do" : obj2_do,
             "else" : obj2_else,
@@ -1917,6 +1917,8 @@ Obj2 Obj2_from_JSON(mixed json) {
     retval.friend = json["friend"];
     if (!mappingp(json["from"])) error("Expected object");
     retval.from = json["from"];
+    if (!mappingp(json["from_dict"])) error("Expected object");
+    retval.from_dict = json["from_dict"];
     if (!mappingp(json["from_json"])) error("Expected object");
     retval.from_json = json["from_json"];
     if (!mappingp(json["func"])) error("Expected object");
@@ -1925,8 +1927,6 @@ Obj2 Obj2_from_JSON(mixed json) {
     retval.get = json["get"];
     if (!mappingp(json["go"])) error("Expected object");
     retval.go = json["go"];
-    if (!mappingp(json["goto"])) error("Expected object");
-    retval.goto = json["goto"];
     if (!mappingp(json["default"])) error("Expected object");
     retval.obj2_default = json["default"];
     if (!mappingp(json["do"])) error("Expected object");
@@ -2949,6 +2949,27 @@ From From_from_JSON(mixed json) {
     return retval;
 }
 
+class FromDict {
+    int from_dict; // json: "from_dict"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "from_dict" : from_dict,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+FromDict FromDict_from_JSON(mixed json) {
+    FromDict retval = FromDict();
+
+    if (!intp(json["from_dict"])) error("Expected integer");
+    retval.from_dict = json["from_dict"];
+
+    return retval;
+}
+
 class FromJson {
     int from_json; // json: "from_json"
 
@@ -3033,27 +3054,6 @@ Go Go_from_JSON(mixed json) {
     return retval;
 }
 
-class Goto {
-    int goto; // json: "goto"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "goto" : goto,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Goto Goto_from_JSON(mixed json) {
-    Goto retval = Goto();
-
-    if (!intp(json["goto"])) error("Expected integer");
-    retval.goto = json["goto"];
-
-    return retval;
-}
-
 class Default {
     int default_default; // json: "default"
 
@@ -3308,6 +3308,7 @@ Global Global_from_JSON(mixed json) {
 
 class Obj3 {
     int                        dummy;                          // json: "dummy"
+    Goto                       goto;                           // json: "goto"
     Guard                      guard;                          // json: "guard"
     HasOwnProperty             has_own_property;               // json: "hasOwnProperty"
     HashCode                   hash_code;                      // json: "hashCode"
@@ -3356,6 +3357,7 @@ class Obj3 {
     Long                       long;                           // json: "long"
     Map                        map;                            // json: "map"
     MapEntry                   map_entry;                      // json: "MapEntry"
+    MarshalJson                marshal_json;                   // json: "MarshalJSON"
     MetadataPropertyHandling   metadata_property_handling;     // json: "metadata_property_handling"
     Module                     module;                         // json: "module"
     Mutable                    mutable;                        // json: "mutable"
@@ -3366,7 +3368,6 @@ class Obj3 {
     Newtonsoft                 newtonsoft;                     // json: "newtonsoft"
     Nil                        nil;                            // json: "nil"
     No                         no;                             // json: "NO"
-    Noexcept                   noexcept;                       // json: "noexcept"
     If                         obj3_if;                        // json: "if"
     Import                     obj3_import;                    // json: "import"
     Inline                     obj3_inline;                    // json: "inline"
@@ -3376,6 +3377,7 @@ class Obj3 {
     string encode_json() {
         mapping(string:mixed) json = ([
             "dummy" : dummy,
+            "goto" : goto,
             "guard" : guard,
             "hasOwnProperty" : has_own_property,
             "hashCode" : hash_code,
@@ -3424,6 +3426,7 @@ class Obj3 {
             "long" : long,
             "map" : map,
             "MapEntry" : map_entry,
+            "MarshalJSON" : marshal_json,
             "metadata_property_handling" : metadata_property_handling,
             "module" : module,
             "mutable" : mutable,
@@ -3434,7 +3437,6 @@ class Obj3 {
             "newtonsoft" : newtonsoft,
             "nil" : nil,
             "NO" : no,
-            "noexcept" : noexcept,
             "if" : obj3_if,
             "import" : obj3_import,
             "inline" : obj3_inline,
@@ -3451,6 +3453,8 @@ Obj3 Obj3_from_JSON(mixed json) {
 
     if (!intp(json["dummy"])) error("Expected integer");
     retval.dummy = json["dummy"];
+    if (!mappingp(json["goto"])) error("Expected object");
+    retval.goto = json["goto"];
     if (!mappingp(json["guard"])) error("Expected object");
     retval.guard = json["guard"];
     if (!mappingp(json["hasOwnProperty"])) error("Expected object");
@@ -3547,6 +3551,8 @@ Obj3 Obj3_from_JSON(mixed json) {
     retval.map = json["map"];
     if (!mappingp(json["MapEntry"])) error("Expected object");
     retval.map_entry = json["MapEntry"];
+    if (!mappingp(json["MarshalJSON"])) error("Expected object");
+    retval.marshal_json = json["MarshalJSON"];
     if (!mappingp(json["metadata_property_handling"])) error("Expected object");
     retval.metadata_property_handling = json["metadata_property_handling"];
     if (!mappingp(json["module"])) error("Expected object");
@@ -3567,8 +3573,6 @@ Obj3 Obj3_from_JSON(mixed json) {
     retval.nil = json["nil"];
     if (!mappingp(json["NO"])) error("Expected object");
     retval.no = json["NO"];
-    if (!mappingp(json["noexcept"])) error("Expected object");
-    retval.noexcept = json["noexcept"];
     if (!mappingp(json["if"])) error("Expected object");
     retval.obj3_if = json["if"];
     if (!mappingp(json["import"])) error("Expected object");
@@ -3583,6 +3587,27 @@ Obj3 Obj3_from_JSON(mixed json) {
     return retval;
 }
 
+class Goto {
+    int goto; // json: "goto"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "goto" : goto,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Goto Goto_from_JSON(mixed json) {
+    Goto retval = Goto();
+
+    if (!intp(json["goto"])) error("Expected integer");
+    retval.goto = json["goto"];
+
+    return retval;
+}
+
 class Guard {
     int guard; // json: "guard"
 
@@ -4590,6 +4615,27 @@ MapEntry MapEntry_from_JSON(mixed json) {
     return retval;
 }
 
+class MarshalJson {
+    int marshal_json; // json: "MarshalJSON"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "MarshalJSON" : marshal_json,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+MarshalJson MarshalJson_from_JSON(mixed json) {
+    MarshalJson retval = MarshalJson();
+
+    if (!intp(json["MarshalJSON"])) error("Expected integer");
+    retval.marshal_json = json["MarshalJSON"];
+
+    return retval;
+}
+
 class MetadataPropertyHandling {
     int metadata_property_handling; // json: "metadata_property_handling"
 
@@ -4800,27 +4846,6 @@ No No_from_JSON(mixed json) {
     return retval;
 }
 
-class Noexcept {
-    int noexcept; // json: "noexcept"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "noexcept" : noexcept,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Noexcept Noexcept_from_JSON(mixed json) {
-    Noexcept retval = Noexcept();
-
-    if (!intp(json["noexcept"])) error("Expected integer");
-    retval.noexcept = json["noexcept"];
-
-    return retval;
-}
-
 class If {
     int if_if; // json: "if"
 
@@ -4929,6 +4954,7 @@ Lambda Lambda_from_JSON(mixed json) {
 class Obj4 {
     int             dummy;            // json: "dummy"
     NoSuchMethod    no_such_method;   // json: "noSuchMethod"
+    Noexcept        noexcept;         // json: "noexcept"
     Nonatomic       nonatomic;        // json: "nonatomic"
     None            none;             // json: "None"
     Nonlocal        nonlocal;         // json: "nonlocal"
@@ -4991,12 +5017,12 @@ class Obj4 {
     Sbyte           sbyte;            // json: "sbyte"
     Sealed          sealed;           // json: "sealed"
     Sel             sel;              // json: "SEL"
-    Select          select;           // json: "select"
 
     string encode_json() {
         mapping(string:mixed) json = ([
             "dummy" : dummy,
             "noSuchMethod" : no_such_method,
+            "noexcept" : noexcept,
             "nonatomic" : nonatomic,
             "None" : none,
             "nonlocal" : nonlocal,
@@ -5059,7 +5085,6 @@ class Obj4 {
             "sbyte" : sbyte,
             "sealed" : sealed,
             "SEL" : sel,
-            "select" : select,
         ]);
 
         return Standards.JSON.encode(json);
@@ -5073,6 +5098,8 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.dummy = json["dummy"];
     if (!mappingp(json["noSuchMethod"])) error("Expected object");
     retval.no_such_method = json["noSuchMethod"];
+    if (!mappingp(json["noexcept"])) error("Expected object");
+    retval.noexcept = json["noexcept"];
     if (!mappingp(json["nonatomic"])) error("Expected object");
     retval.nonatomic = json["nonatomic"];
     if (!mappingp(json["None"])) error("Expected object");
@@ -5197,8 +5224,6 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.sealed = json["sealed"];
     if (!mappingp(json["SEL"])) error("Expected object");
     retval.sel = json["SEL"];
-    if (!mappingp(json["select"])) error("Expected object");
-    retval.select = json["select"];
 
     return retval;
 }
@@ -5224,6 +5249,27 @@ NoSuchMethod NoSuchMethod_from_JSON(mixed json) {
     return retval;
 }
 
+class Noexcept {
+    int noexcept; // json: "noexcept"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "noexcept" : noexcept,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Noexcept Noexcept_from_JSON(mixed json) {
+    Noexcept retval = Noexcept();
+
+    if (!intp(json["noexcept"])) error("Expected integer");
+    retval.noexcept = json["noexcept"];
+
+    return retval;
+}
+
 class Nonatomic {
     int nonatomic; // json: "nonatomic"
 
@@ -6525,27 +6571,6 @@ Sel Sel_from_JSON(mixed json) {
     return retval;
 }
 
-class Select {
-    int select; // json: "select"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "select" : select,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Select Select_from_JSON(mixed json) {
-    Select retval = Select();
-
-    if (!intp(json["select"])) error("Expected integer");
-    retval.select = json["select"];
-
-    return retval;
-}
-
 class Obj5 {
     int                dummy;               // json: "dummy"
     KSerializer        k_serializer;        // json: "KSerializer"
@@ -6558,6 +6583,7 @@ class Obj5 {
     Typedef            obj5_typedef;        // json: "typedef"
     Typeof             obj5_typeof;         // json: "typeof"
     PrimitiveKind      primitive_kind;      // json: "PrimitiveKind"
+    Select             select;              // json: "select"
     Self               self;                // json: "Self"
     Sendable           sendable;            // json: "Sendable"
     SerialDescriptor   serial_descriptor;   // json: "SerialDescriptor"
@@ -6592,6 +6618,7 @@ class Obj5 {
     TimeOnly           time_only;           // json: "TimeOnly"
     TimeOnlyConverter  time_only_converter; // json: "TimeOnlyConverter"
     TimeZone           time_zone;           // json: "TimeZone"
+    ToDict             to_dict;             // json: "to_dict"
     ToJson             to_json;             // json: "to_json"
     ToString           to_string;           // json: "toString"
     TopLevelClass      top_level;           // json: "top_level"
@@ -6607,11 +6634,10 @@ class Obj5 {
     Unchecked          unchecked;           // json: "unchecked"
     Undefined          undefined;           // json: "undefined"
     Union              union;               // json: "union"
+    UnmarshalJson      unmarshal_json;      // json: "UnmarshalJSON"
     Unowned            unowned;             // json: "unowned"
     Unsafe             unsafe;              // json: "unsafe"
-    Unsigned           unsigned;            // json: "unsigned"
     UseSerializers     use_serializers;     // json: "UseSerializers"
-    Ushort             ushort;              // json: "ushort"
 
     string encode_json() {
         mapping(string:mixed) json = ([
@@ -6626,6 +6652,7 @@ class Obj5 {
             "typedef" : obj5_typedef,
             "typeof" : obj5_typeof,
             "PrimitiveKind" : primitive_kind,
+            "select" : select,
             "Self" : self,
             "Sendable" : sendable,
             "SerialDescriptor" : serial_descriptor,
@@ -6660,6 +6687,7 @@ class Obj5 {
             "TimeOnly" : time_only,
             "TimeOnlyConverter" : time_only_converter,
             "TimeZone" : time_zone,
+            "to_dict" : to_dict,
             "to_json" : to_json,
             "toString" : to_string,
             "top_level" : top_level,
@@ -6675,11 +6703,10 @@ class Obj5 {
             "unchecked" : unchecked,
             "undefined" : undefined,
             "union" : union,
+            "UnmarshalJSON" : unmarshal_json,
             "unowned" : unowned,
             "unsafe" : unsafe,
-            "unsigned" : unsigned,
             "UseSerializers" : use_serializers,
-            "ushort" : ushort,
         ]);
 
         return Standards.JSON.encode(json);
@@ -6711,6 +6738,8 @@ Obj5 Obj5_from_JSON(mixed json) {
     retval.obj5_typeof = json["typeof"];
     if (!mappingp(json["PrimitiveKind"])) error("Expected object");
     retval.primitive_kind = json["PrimitiveKind"];
+    if (!mappingp(json["select"])) error("Expected object");
+    retval.select = json["select"];
     if (!mappingp(json["Self"])) error("Expected object");
     retval.self = json["Self"];
     if (!mappingp(json["Sendable"])) error("Expected object");
@@ -6779,6 +6808,8 @@ Obj5 Obj5_from_JSON(mixed json) {
     retval.time_only_converter = json["TimeOnlyConverter"];
     if (!mappingp(json["TimeZone"])) error("Expected object");
     retval.time_zone = json["TimeZone"];
+    if (!mappingp(json["to_dict"])) error("Expected object");
+    retval.to_dict = json["to_dict"];
     if (!mappingp(json["to_json"])) error("Expected object");
     retval.to_json = json["to_json"];
     if (!mappingp(json["toString"])) error("Expected object");
@@ -6809,16 +6840,14 @@ Obj5 Obj5_from_JSON(mixed json) {
     retval.undefined = json["undefined"];
     if (!mappingp(json["union"])) error("Expected object");
     retval.union = json["union"];
+    if (!mappingp(json["UnmarshalJSON"])) error("Expected object");
+    retval.unmarshal_json = json["UnmarshalJSON"];
     if (!mappingp(json["unowned"])) error("Expected object");
     retval.unowned = json["unowned"];
     if (!mappingp(json["unsafe"])) error("Expected object");
     retval.unsafe = json["unsafe"];
-    if (!mappingp(json["unsigned"])) error("Expected object");
-    retval.unsigned = json["unsigned"];
     if (!mappingp(json["UseSerializers"])) error("Expected object");
     retval.use_serializers = json["UseSerializers"];
-    if (!mappingp(json["ushort"])) error("Expected object");
-    retval.ushort = json["ushort"];
 
     return retval;
 }
@@ -7033,6 +7062,27 @@ PrimitiveKind PrimitiveKind_from_JSON(mixed json) {
     return retval;
 }
 
+class Select {
+    int select; // json: "select"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "select" : select,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Select Select_from_JSON(mixed json) {
+    Select retval = Select();
+
+    if (!intp(json["select"])) error("Expected integer");
+    retval.select = json["select"];
+
+    return retval;
+}
+
 class Self {
     int self; // json: "Self"
 
@@ -7747,6 +7797,27 @@ TimeZone TimeZone_from_JSON(mixed json) {
     return retval;
 }
 
+class ToDict {
+    int to_dict; // json: "to_dict"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "to_dict" : to_dict,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+ToDict ToDict_from_JSON(mixed json) {
+    ToDict retval = ToDict();
+
+    if (!intp(json["to_dict"])) error("Expected integer");
+    retval.to_dict = json["to_dict"];
+
+    return retval;
+}
+
 class ToJson {
     int to_json; // json: "to_json"
 
@@ -8062,65 +8133,65 @@ Union Union_from_JSON(mixed json) {
     return retval;
 }
 
-class Unowned {
-    int unowned; // json: "unowned"
+class UnmarshalJson {
+    int unmarshal_json; // json: "UnmarshalJSON"
 
     string encode_json() {
         mapping(string:mixed) json = ([
-            "unowned" : unowned,
+            "UnmarshalJSON" : unmarshal_json,
         ]);
 
         return Standards.JSON.encode(json);
     }
 }
 
-Unowned Unowned_from_JSON(mixed json) {
-    Unowned retval = Unowned();
+UnmarshalJson UnmarshalJson_from_JSON(mixed json) {
+    UnmarshalJson retval = UnmarshalJson();
 
-    if (!intp(json["unowned"])) error("Expected integer");
-    retval.unowned = json["unowned"];
+    if (!intp(json["UnmarshalJSON"])) error("Expected integer");
+    retval.unmarshal_json = json["UnmarshalJSON"];
 
     return retval;
 }
 
-class Unsafe {
-    int unsafe; // json: "unsafe"
+class Unowned {
+    int unowned; // json: "unowned"
 
     string encode_json() {
         mapping(string:mixed) json = ([
-            "unsafe" : unsafe,
+            "unowned" : unowned,
         ]);
 
         return Standards.JSON.encode(json);
     }
 }
 
-Unsafe Unsafe_from_JSON(mixed json) {
-    Unsafe retval = Unsafe();
+Unowned Unowned_from_JSON(mixed json) {
+    Unowned retval = Unowned();
 
-    if (!intp(json["unsafe"])) error("Expected integer");
-    retval.unsafe = json["unsafe"];
+    if (!intp(json["unowned"])) error("Expected integer");
+    retval.unowned = json["unowned"];
 
     return retval;
 }
 
-class Unsigned {
-    int unsigned; // json: "unsigned"
+class Unsafe {
+    int unsafe; // json: "unsafe"
 
     string encode_json() {
         mapping(string:mixed) json = ([
-            "unsigned" : unsigned,
+            "unsafe" : unsafe,
         ]);
 
         return Standards.JSON.encode(json);
     }
 }
 
-Unsigned Unsigned_from_JSON(mixed json) {
-    Unsigned retval = Unsigned();
+Unsafe Unsafe_from_JSON(mixed json) {
+    Unsafe retval = Unsafe();
 
-    if (!intp(json["unsigned"])) error("Expected integer");
-    retval.unsigned = json["unsigned"];
+    if (!intp(json["unsafe"])) error("Expected integer");
+    retval.unsafe = json["unsafe"];
 
     return retval;
 }
@@ -8146,31 +8217,12 @@ UseSerializers UseSerializers_from_JSON(mixed json) {
     return retval;
 }
 
-class Ushort {
-    int ushort; // json: "ushort"
-
-    string encode_json() {
-        mapping(string:mixed) json = ([
-            "ushort" : ushort,
-        ]);
-
-        return Standards.JSON.encode(json);
-    }
-}
-
-Ushort Ushort_from_JSON(mixed json) {
-    Ushort retval = Ushort();
-
-    if (!intp(json["ushort"])) error("Expected integer");
-    retval.ushort = json["ushort"];
-
-    return retval;
-}
-
 class Obj6 {
     int            dummy;            // json: "dummy"
     Void           obj6_void;        // json: "void"
     While          obj6_while;       // json: "while"
+    Unsigned       unsigned;         // json: "unsigned"
+    Ushort         ushort;           // json: "ushort"
     Using          using;            // json: "using"
     Utf8JsonReader utf8_json_reader; // json: "Utf8JsonReader"
     Utf8JsonWriter utf8_json_writer; // json: "Utf8JsonWriter"
@@ -8193,6 +8245,8 @@ class Obj6 {
             "dummy" : dummy,
             "void" : obj6_void,
             "while" : obj6_while,
+            "unsigned" : unsigned,
+            "ushort" : ushort,
             "using" : using,
             "Utf8JsonReader" : utf8_json_reader,
             "Utf8JsonWriter" : utf8_json_writer,
@@ -8224,6 +8278,10 @@ Obj6 Obj6_from_JSON(mixed json) {
     retval.obj6_void = json["void"];
     if (!mappingp(json["while"])) error("Expected object");
     retval.obj6_while = json["while"];
+    if (!mappingp(json["unsigned"])) error("Expected object");
+    retval.unsigned = json["unsigned"];
+    if (!mappingp(json["ushort"])) error("Expected object");
+    retval.ushort = json["ushort"];
     if (!mappingp(json["using"])) error("Expected object");
     retval.using = json["using"];
     if (!mappingp(json["Utf8JsonReader"])) error("Expected object");
@@ -8302,6 +8360,48 @@ While While_from_JSON(mixed json) {
     return retval;
 }
 
+class Unsigned {
+    int unsigned; // json: "unsigned"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "unsigned" : unsigned,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Unsigned Unsigned_from_JSON(mixed json) {
+    Unsigned retval = Unsigned();
+
+    if (!intp(json["unsigned"])) error("Expected integer");
+    retval.unsigned = json["unsigned"];
+
+    return retval;
+}
+
+class Ushort {
+    int ushort; // json: "ushort"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "ushort" : ushort,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+Ushort Ushort_from_JSON(mixed json) {
+    Ushort retval = Ushort();
+
+    if (!intp(json["ushort"])) error("Expected integer");
+    retval.ushort = json["ushort"];
+
+    return retval;
+}
+
 class Using {
     int using; // json: "using"
 
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 5a12279..67369c6 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
@@ -2092,22 +2092,6 @@ class Go:
         return result
 
 
-@dataclass
-class Goto:
-    goto: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Goto':
-        assert isinstance(obj, dict)
-        goto = from_int(obj["goto"])
-        return Goto(goto)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["goto"] = from_int(self.goto)
-        return result
-
-
 @dataclass
 class Def:
     def_def: int
@@ -2284,6 +2268,22 @@ class From:
         return result
 
 
+@dataclass
+class FromDict:
+    from_dict_from_dict: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'FromDict':
+        assert isinstance(obj, dict)
+        from_dict_from_dict = from_int(obj["from_dict"])
+        return FromDict(from_dict_from_dict)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["from_dict"] = from_int(self.from_dict_from_dict)
+        return result
+
+
 @dataclass
 class Global:
     global_global: int
@@ -2360,13 +2360,13 @@ class Obj2:
     foreach: Foreach
     friend: Friend
     obj2_from: From
+    obj2_from_dict: FromDict
     from_json: FromJSON
     func: Func
     function: Function
     get: Get
     obj2_global: Global
     go: Go
-    goto: Goto
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj2':
@@ -2429,14 +2429,14 @@ class Obj2:
         foreach = Foreach.from_dict(obj["foreach"])
         friend = Friend.from_dict(obj["friend"])
         obj2_from = From.from_dict(obj["from"])
+        obj2_from_dict = FromDict.from_dict(obj["from_dict"])
         from_json = FromJSON.from_dict(obj["from_json"])
         func = Func.from_dict(obj["func"])
         function = Function.from_dict(obj["function"])
         get = Get.from_dict(obj["get"])
         obj2_global = Global.from_dict(obj["global"])
         go = Go.from_dict(obj["go"])
-        goto = Goto.from_dict(obj["goto"])
-        return Obj2(date_formatter, date_only, date_only_converter, date_time, date_time_styles, decoder, decoding_error, encoder, enum_values, equatable, false, format_exception, date_parse_handling, debugger, decimal, declare, decltype, decode_string, 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)
+        return Obj2(date_formatter, date_only, date_only_converter, date_time, date_time_styles, decoder, decoding_error, encoder, enum_values, equatable, false, format_exception, date_parse_handling, debugger, decimal, declare, decltype, decode_string, 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, obj2_from_dict, from_json, func, function, get, obj2_global, go)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -2498,13 +2498,29 @@ class Obj2:
         result["foreach"] = to_class(Foreach, self.foreach)
         result["friend"] = to_class(Friend, self.friend)
         result["from"] = to_class(From, self.obj2_from)
+        result["from_dict"] = to_class(FromDict, self.obj2_from_dict)
         result["from_json"] = to_class(FromJSON, self.from_json)
         result["func"] = to_class(Func, self.func)
         result["function"] = to_class(Function, self.function)
         result["get"] = to_class(Get, self.get)
         result["global"] = to_class(Global, self.obj2_global)
         result["go"] = to_class(Go, self.go)
-        result["goto"] = to_class(Goto, self.goto)
+        return result
+
+
+@dataclass
+class Goto:
+    goto: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Goto':
+        assert isinstance(obj, dict)
+        goto = from_int(obj["goto"])
+        return Goto(goto)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["goto"] = from_int(self.goto)
         return result
 
 
@@ -3260,6 +3276,22 @@ class MapEntry:
         return result
 
 
+@dataclass
+class MarshalJSON:
+    marshal_json: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'MarshalJSON':
+        assert isinstance(obj, dict)
+        marshal_json = from_int(obj["MarshalJSON"])
+        return MarshalJSON(marshal_json)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["MarshalJSON"] = from_int(self.marshal_json)
+        return result
+
+
 @dataclass
 class MetadataPropertyHandling:
     metadata_property_handling: int
@@ -3420,22 +3452,6 @@ class No:
         return result
 
 
-@dataclass
-class Noexcept:
-    noexcept: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Noexcept':
-        assert isinstance(obj, dict)
-        noexcept = from_int(obj["noexcept"])
-        return Noexcept(noexcept)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["noexcept"] = from_int(self.noexcept)
-        return result
-
-
 @dataclass
 class If:
     if_if: int
@@ -3551,8 +3567,10 @@ class Obj3:
     json_token_type: JSONTokenType
     locale: Locale
     map_entry: MapEntry
+    marshal_json: MarshalJSON
     no: No
     dummy: int
+    goto: Goto
     guard: Guard
     has_own_property: HasOwnProperty
     hash_code: HashCode
@@ -3598,7 +3616,6 @@ class Obj3:
     new: New
     newtonsoft: Newtonsoft
     nil: Nil
-    noexcept: Noexcept
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj3':
@@ -3620,8 +3637,10 @@ class Obj3:
         json_token_type = JSONTokenType.from_dict(obj["JsonTokenType"])
         locale = Locale.from_dict(obj["Locale"])
         map_entry = MapEntry.from_dict(obj["MapEntry"])
+        marshal_json = MarshalJSON.from_dict(obj["MarshalJSON"])
         no = No.from_dict(obj["NO"])
         dummy = from_int(obj["dummy"])
+        goto = Goto.from_dict(obj["goto"])
         guard = Guard.from_dict(obj["guard"])
         has_own_property = HasOwnProperty.from_dict(obj["hasOwnProperty"])
         hash_code = HashCode.from_dict(obj["hashCode"])
@@ -3667,8 +3686,7 @@ class Obj3:
         new = New.from_dict(obj["new"])
         newtonsoft = Newtonsoft.from_dict(obj["newtonsoft"])
         nil = Nil.from_dict(obj["nil"])
-        noexcept = Noexcept.from_dict(obj["noexcept"])
-        return Obj3(hashable, hasher, imp, iso_date_time_offset_converter, json_any, json_coding_key, json_decoder, json_encoder, json_null, json_exception, json_generator, json_node, json_parser, json_reader, json_token_type, locale, map_entry, no, dummy, guard, has_own_property, hash_code, id, obj3_if, implements, implicit, obj3_import, obj3_in, indirect, infix, init, inline, inout, instanceof, obj3_int, interface, internal, 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)
+        return Obj3(hashable, hasher, imp, iso_date_time_offset_converter, json_any, json_coding_key, json_decoder, json_encoder, json_null, json_exception, json_generator, json_node, json_parser, json_reader, json_token_type, locale, map_entry, marshal_json, no, dummy, goto, guard, has_own_property, hash_code, id, obj3_if, implements, implicit, obj3_import, obj3_in, indirect, infix, init, inline, inout, instanceof, obj3_int, interface, internal, 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)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -3689,8 +3707,10 @@ class Obj3:
         result["JsonTokenType"] = to_class(JSONTokenType, self.json_token_type)
         result["Locale"] = to_class(Locale, self.locale)
         result["MapEntry"] = to_class(MapEntry, self.map_entry)
+        result["MarshalJSON"] = to_class(MarshalJSON, self.marshal_json)
         result["NO"] = to_class(No, self.no)
         result["dummy"] = from_int(self.dummy)
+        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)
@@ -3736,7 +3756,6 @@ class Obj3:
         result["new"] = to_class(New, self.new)
         result["newtonsoft"] = to_class(Newtonsoft, self.newtonsoft)
         result["nil"] = to_class(Nil, self.nil)
-        result["noexcept"] = to_class(Noexcept, self.noexcept)
         return result
 
 
@@ -3756,6 +3775,22 @@ class NoSuchMethod:
         return result
 
 
+@dataclass
+class Noexcept:
+    noexcept: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Noexcept':
+        assert isinstance(obj, dict)
+        noexcept = from_int(obj["noexcept"])
+        return Noexcept(noexcept)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["noexcept"] = from_int(self.noexcept)
+        return result
+
+
 @dataclass
 class Nonatomic:
     nonatomic: int
@@ -4748,22 +4783,6 @@ class Sel:
         return result
 
 
-@dataclass
-class Select:
-    select: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Select':
-        assert isinstance(obj, dict)
-        select = from_int(obj["select"])
-        return Select(select)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["select"] = from_int(self.select)
-        return result
-
-
 @dataclass
 class Obj4:
     ns_error: NSError
@@ -4777,6 +4796,7 @@ class Obj4:
     sel: Sel
     dummy: int
     no_such_method: NoSuchMethod
+    noexcept: Noexcept
     nonatomic: Nonatomic
     obj4_none: Obj4None
     obj4_nonlocal: Nonlocal
@@ -4830,7 +4850,6 @@ class Obj4:
     s: S
     sbyte: Sbyte
     sealed: Sealed
-    select: Select
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj4':
@@ -4846,6 +4865,7 @@ class Obj4:
         sel = Sel.from_dict(obj["SEL"])
         dummy = from_int(obj["dummy"])
         no_such_method = NoSuchMethod.from_dict(obj["noSuchMethod"])
+        noexcept = Noexcept.from_dict(obj["noexcept"])
         nonatomic = Nonatomic.from_dict(obj["nonatomic"])
         obj4_none = Obj4None.from_dict(obj["none"])
         obj4_nonlocal = Nonlocal.from_dict(obj["nonlocal"])
@@ -4899,8 +4919,7 @@ class Obj4:
         s = S.from_dict(obj["s"])
         sbyte = Sbyte.from_dict(obj["sbyte"])
         sealed = Sealed.from_dict(obj["sealed"])
-        select = Select.from_dict(obj["select"])
-        return Obj4(ns_error, ns_object, ns_string, null, none, object_mapper, protocol, reg_exp, sel, dummy, no_such_method, nonatomic, obj4_none, obj4_nonlocal, nonmutating, obj4_not, not_eq, obj4_null, nullptr, number, object, of, oneway, open, operator, optional, obj4_or, or_eq, out, override, package, params, obj4_pass, port, postfix, precedence, prefix, obj4_print, print_members, printf, private, protected, obj4_protocol, 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)
+        return Obj4(ns_error, ns_object, ns_string, null, none, object_mapper, protocol, reg_exp, sel, dummy, no_such_method, noexcept, nonatomic, obj4_none, obj4_nonlocal, nonmutating, obj4_not, not_eq, obj4_null, nullptr, number, object, of, oneway, open, operator, optional, obj4_or, or_eq, out, override, package, params, obj4_pass, port, postfix, precedence, prefix, obj4_print, print_members, printf, private, protected, obj4_protocol, 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)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -4915,6 +4934,7 @@ class Obj4:
         result["SEL"] = to_class(Sel, self.sel)
         result["dummy"] = from_int(self.dummy)
         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(Obj4None, self.obj4_none)
         result["nonlocal"] = to_class(Nonlocal, self.obj4_nonlocal)
@@ -4968,7 +4988,6 @@ class Obj4:
         result["s"] = to_class(S, self.s)
         result["sbyte"] = to_class(Sbyte, self.sbyte)
         result["sealed"] = to_class(Sealed, self.sealed)
-        result["select"] = to_class(Select, self.select)
         return result
 
 
@@ -5004,6 +5023,22 @@ class Self:
         return result
 
 
+@dataclass
+class ToDict:
+    to_dict_to_dict: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'ToDict':
+        assert isinstance(obj, dict)
+        to_dict_to_dict = from_int(obj["to_dict"])
+        return ToDict(to_dict_to_dict)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["to_dict"] = from_int(self.to_dict_to_dict)
+        return result
+
+
 @dataclass
 class Obj5True:
     true: int
@@ -5084,6 +5119,22 @@ class SelfClass:
         return result
 
 
+@dataclass
+class Select:
+    select: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Select':
+        assert isinstance(obj, dict)
+        select = from_int(obj["select"])
+        return Select(select)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["select"] = from_int(self.select)
+        return result
+
+
 @dataclass
 class Sendable:
     sendable: int
@@ -5916,6 +5967,22 @@ class UnionClass:
         return result
 
 
+@dataclass
+class UnmarshalJSON:
+    unmarshal_json: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'UnmarshalJSON':
+        assert isinstance(obj, dict)
+        unmarshal_json = from_int(obj["UnmarshalJSON"])
+        return UnmarshalJSON(unmarshal_json)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["UnmarshalJSON"] = from_int(self.unmarshal_json)
+        return result
+
+
 @dataclass
 class Unowned:
     unowned: int
@@ -5948,22 +6015,6 @@ class Unsafe:
         return result
 
 
-@dataclass
-class Unsigned:
-    unsigned: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Unsigned':
-        assert isinstance(obj, dict)
-        unsigned = from_int(obj["unsigned"])
-        return Unsigned(unsigned)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["unsigned"] = from_int(self.unsigned)
-        return result
-
-
 @dataclass
 class UseSerializers:
     use_serializers: int
@@ -5980,22 +6031,6 @@ class UseSerializers:
         return result
 
 
-@dataclass
-class Ushort:
-    ushort: int
-
-    @staticmethod
-    def from_dict(obj: Any) -> 'Ushort':
-        assert isinstance(obj, dict)
-        ushort = from_int(obj["ushort"])
-        return Ushort(ushort)
-
-    def to_dict(self) -> dict:
-        result: dict = {}
-        result["ushort"] = from_int(self.ushort)
-        return result
-
-
 @dataclass
 class Obj5:
     k_serializer: KSerializer
@@ -6015,8 +6050,10 @@ class Obj5:
     time_zone: TimeZone
     true: TrueClass
     type: TypeClass
+    unmarshal_json: UnmarshalJSON
     use_serializers: UseSerializers
     dummy: int
+    select: Select
     purple_self: SelfClass
     serialize: Serialize
     set: Set
@@ -6043,6 +6080,7 @@ class Obj5:
     throw: Throw
     throws: Throws
     to_string: ToString
+    obj5_to_dict: ToDict
     to_json: ToJSON
     top_level: TopLevelClass
     transient: Transient
@@ -6061,8 +6099,6 @@ class Obj5:
     union: UnionClass
     unowned: Unowned
     unsafe: Unsafe
-    unsigned: Unsigned
-    ushort: Ushort
 
     @staticmethod
     def from_dict(obj: Any) -> 'Obj5':
@@ -6084,8 +6120,10 @@ class Obj5:
         time_zone = TimeZone.from_dict(obj["TimeZone"])
         true = TrueClass.from_dict(obj["True"])
         type = TypeClass.from_dict(obj["Type"])
+        unmarshal_json = UnmarshalJSON.from_dict(obj["UnmarshalJSON"])
         use_serializers = UseSerializers.from_dict(obj["UseSerializers"])
         dummy = from_int(obj["dummy"])
+        select = Select.from_dict(obj["select"])
         purple_self = SelfClass.from_dict(obj["self"])
         serialize = Serialize.from_dict(obj["serialize"])
         set = Set.from_dict(obj["set"])
@@ -6112,6 +6150,7 @@ class Obj5:
         throw = Throw.from_dict(obj["throw"])
         throws = Throws.from_dict(obj["throws"])
         to_string = ToString.from_dict(obj["toString"])
+        obj5_to_dict = ToDict.from_dict(obj["to_dict"])
         to_json = ToJSON.from_dict(obj["to_json"])
         top_level = TopLevelClass.from_dict(obj["top_level"])
         transient = Transient.from_dict(obj["transient"])
@@ -6130,9 +6169,7 @@ class Obj5:
         union = UnionClass.from_dict(obj["union"])
         unowned = Unowned.from_dict(obj["unowned"])
         unsafe = Unsafe.from_dict(obj["unsafe"])
-        unsigned = Unsigned.from_dict(obj["unsigned"])
-        ushort = Ushort.from_dict(obj["ushort"])
-        return Obj5(k_serializer, primitive_kind, obj5_self, sendable, serial_descriptor, serial_name, serializable, serializer_provider, simple_module, standards, std_deserializer, std_serializer, time_only, time_only_converter, time_zone, true, type, use_serializers, dummy, 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, obj5_true, obj5_try, obj5_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unowned, unsafe, unsigned, ushort)
+        return Obj5(k_serializer, primitive_kind, obj5_self, sendable, serial_descriptor, serial_name, serializable, serializer_provider, simple_module, standards, std_deserializer, std_serializer, time_only, time_only_converter, time_zone, true, type, unmarshal_json, use_serializers, dummy, 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, obj5_to_dict, to_json, top_level, transient, obj5_true, obj5_try, obj5_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unowned, unsafe)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -6153,8 +6190,10 @@ class Obj5:
         result["TimeZone"] = to_class(TimeZone, self.time_zone)
         result["True"] = to_class(TrueClass, self.true)
         result["Type"] = to_class(TypeClass, self.type)
+        result["UnmarshalJSON"] = to_class(UnmarshalJSON, self.unmarshal_json)
         result["UseSerializers"] = to_class(UseSerializers, self.use_serializers)
         result["dummy"] = from_int(self.dummy)
+        result["select"] = to_class(Select, self.select)
         result["self"] = to_class(SelfClass, self.purple_self)
         result["serialize"] = to_class(Serialize, self.serialize)
         result["set"] = to_class(Set, self.set)
@@ -6181,6 +6220,7 @@ class Obj5:
         result["throw"] = to_class(Throw, self.throw)
         result["throws"] = to_class(Throws, self.throws)
         result["toString"] = to_class(ToString, self.to_string)
+        result["to_dict"] = to_class(ToDict, self.obj5_to_dict)
         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)
@@ -6199,8 +6239,6 @@ class Obj5:
         result["union"] = to_class(UnionClass, self.union)
         result["unowned"] = to_class(Unowned, self.unowned)
         result["unsafe"] = to_class(Unsafe, self.unsafe)
-        result["unsigned"] = to_class(Unsigned, self.unsigned)
-        result["ushort"] = to_class(Ushort, self.ushort)
         return result
 
 
@@ -6252,6 +6290,38 @@ class Yield:
         return result
 
 
+@dataclass
+class Unsigned:
+    unsigned: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Unsigned':
+        assert isinstance(obj, dict)
+        unsigned = from_int(obj["unsigned"])
+        return Unsigned(unsigned)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["unsigned"] = from_int(self.unsigned)
+        return result
+
+
+@dataclass
+class Ushort:
+    ushort: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'Ushort':
+        assert isinstance(obj, dict)
+        ushort = from_int(obj["ushort"])
+        return Ushort(ushort)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["ushort"] = from_int(self.ushort)
+        return result
+
+
 @dataclass
 class Using:
     using: int
@@ -6499,6 +6569,8 @@ class Obj6:
     utf8_json_writer: Utf8JSONWriter
     yes: Yes
     dummy: int
+    unsigned: Unsigned
+    ushort: Ushort
     using: Using
     var: Var
     virtual: Virtual
@@ -6522,6 +6594,8 @@ class Obj6:
         utf8_json_writer = Utf8JSONWriter.from_dict(obj["Utf8JsonWriter"])
         yes = Yes.from_dict(obj["YES"])
         dummy = from_int(obj["dummy"])
+        unsigned = Unsigned.from_dict(obj["unsigned"])
+        ushort = Ushort.from_dict(obj["ushort"])
         using = Using.from_dict(obj["using"])
         var = Var.from_dict(obj["var"])
         virtual = Virtual.from_dict(obj["virtual"])
@@ -6536,7 +6610,7 @@ class Obj6:
         xor = Xor.from_dict(obj["xor"])
         xor_eq = XorEq.from_dict(obj["xor_eq"])
         obj6_yield = Yield.from_dict(obj["yield"])
-        return Obj6(uuid, utf8_json_reader, utf8_json_writer, yes, dummy, using, var, virtual, void, volatile, wchar_t, weak, where, obj6_while, will_set, obj6_with, xor, xor_eq, obj6_yield)
+        return Obj6(uuid, utf8_json_reader, utf8_json_writer, yes, dummy, unsigned, ushort, using, var, virtual, void, volatile, wchar_t, weak, where, obj6_while, will_set, obj6_with, xor, xor_eq, obj6_yield)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -6545,6 +6619,8 @@ class Obj6:
         result["Utf8JsonWriter"] = to_class(Utf8JSONWriter, self.utf8_json_writer)
         result["YES"] = to_class(Yes, self.yes)
         result["dummy"] = from_int(self.dummy)
+        result["unsigned"] = to_class(Unsigned, self.unsigned)
+        result["ushort"] = to_class(Ushort, self.ushort)
         result["using"] = to_class(Using, self.using)
         result["var"] = to_class(Var, self.var)
         result["virtual"] = to_class(Virtual, self.virtual)
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 eabf957..98b81a9 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
@@ -3094,6 +3094,31 @@ class From < Dry::Struct
   end
 end
 
+class FromDict < Dry::Struct
+  attribute :from_dict, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      from_dict: d.fetch("from_dict"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "from_dict" => from_dict,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class FromJSON < Dry::Struct
   attribute :from_json, Types::Integer
 
@@ -3244,31 +3269,6 @@ class Go < Dry::Struct
   end
 end
 
-class Goto < Dry::Struct
-  attribute :goto, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      goto: d.fetch("goto"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "goto" => goto,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class Def < Dry::Struct
   attribute :def_def, Types::Integer
 
@@ -3496,13 +3496,13 @@ class Obj2 < Dry::Struct
   attribute :format_exception,    FormatException
   attribute :friend,              Friend
   attribute :from,                From
+  attribute :from_dict,           FromDict
   attribute :from_json,           FromJSON
   attribute :func,                Func
   attribute :function,            Function
   attribute :get,                 Get
   attribute :global,              Global
   attribute :go,                  Go
-  attribute :goto,                Goto
   attribute :obj2_def,            Def
   attribute :obj2_default,        Default
   attribute :obj2_do,             Do
@@ -3565,13 +3565,13 @@ class Obj2 < Dry::Struct
       format_exception:    FormatException.from_dynamic!(d.fetch("FormatException")),
       friend:              Friend.from_dynamic!(d.fetch("friend")),
       from:                From.from_dynamic!(d.fetch("from")),
+      from_dict:           FromDict.from_dynamic!(d.fetch("from_dict")),
       from_json:           FromJSON.from_dynamic!(d.fetch("from_json")),
       func:                Func.from_dynamic!(d.fetch("func")),
       function:            Function.from_dynamic!(d.fetch("function")),
       get:                 Get.from_dynamic!(d.fetch("get")),
       global:              Global.from_dynamic!(d.fetch("global")),
       go:                  Go.from_dynamic!(d.fetch("go")),
-      goto:                Goto.from_dynamic!(d.fetch("goto")),
       obj2_def:            Def.from_dynamic!(d.fetch("def")),
       obj2_default:        Default.from_dynamic!(d.fetch("default")),
       obj2_do:             Do.from_dynamic!(d.fetch("do")),
@@ -3639,13 +3639,13 @@ class Obj2 < Dry::Struct
       "FormatException"     => format_exception.to_dynamic,
       "friend"              => friend.to_dynamic,
       "from"                => from.to_dynamic,
+      "from_dict"           => from_dict.to_dynamic,
       "from_json"           => from_json.to_dynamic,
       "func"                => func.to_dynamic,
       "function"            => function.to_dynamic,
       "get"                 => get.to_dynamic,
       "global"              => global.to_dynamic,
       "go"                  => go.to_dynamic,
-      "goto"                => goto.to_dynamic,
       "def"                 => obj2_def.to_dynamic,
       "default"             => obj2_default.to_dynamic,
       "do"                  => obj2_do.to_dynamic,
@@ -3661,6 +3661,31 @@ class Obj2 < Dry::Struct
   end
 end
 
+class Goto < Dry::Struct
+  attribute :goto, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      goto: d.fetch("goto"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "goto" => goto,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Guard < Dry::Struct
   attribute :guard, Types::Integer
 
@@ -4911,6 +4936,31 @@ class MapEntry < Dry::Struct
   end
 end
 
+class MarshalJSON < Dry::Struct
+  attribute :marshal_json, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      marshal_json: d.fetch("MarshalJSON"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "MarshalJSON" => marshal_json,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class MetadataPropertyHandling < Dry::Struct
   attribute :metadata_property_handling, Types::Integer
 
@@ -5086,31 +5136,6 @@ class No < Dry::Struct
   end
 end
 
-class Noexcept < Dry::Struct
-  attribute :noexcept, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      noexcept: d.fetch("noexcept"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "noexcept" => noexcept,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class If < Dry::Struct
   attribute :if_if, Types::Integer
 
@@ -5263,6 +5288,7 @@ end
 
 class Obj3 < Dry::Struct
   attribute :dummy,                          Types::Integer
+  attribute :goto,                           Goto
   attribute :guard,                          Guard
   attribute :has_own_property,               HasOwnProperty
   attribute :hash_code,                      HashCode
@@ -5313,6 +5339,7 @@ class Obj3 < Dry::Struct
   attribute :long,                           Long
   attribute :map,                            Map
   attribute :map_entry,                      MapEntry
+  attribute :marshal_json,                   MarshalJSON
   attribute :metadata_property_handling,     MetadataPropertyHandling
   attribute :mutable,                        Mutable
   attribute :mutating,                       Mutating
@@ -5320,7 +5347,6 @@ class Obj3 < Dry::Struct
   attribute :native,                         Native
   attribute :newtonsoft,                     Newtonsoft
   attribute :no,                             No
-  attribute :noexcept,                       Noexcept
   attribute :obj3_if,                        If
   attribute :obj3_in,                        In
   attribute :obj3_lambda,                    Lambda
@@ -5332,6 +5358,7 @@ class Obj3 < Dry::Struct
     d = Types::Hash[d]
     new(
       dummy:                          d.fetch("dummy"),
+      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")),
@@ -5382,6 +5409,7 @@ class Obj3 < Dry::Struct
       long:                           Long.from_dynamic!(d.fetch("long")),
       map:                            Map.from_dynamic!(d.fetch("map")),
       map_entry:                      MapEntry.from_dynamic!(d.fetch("MapEntry")),
+      marshal_json:                   MarshalJSON.from_dynamic!(d.fetch("MarshalJSON")),
       metadata_property_handling:     MetadataPropertyHandling.from_dynamic!(d.fetch("metadata_property_handling")),
       mutable:                        Mutable.from_dynamic!(d.fetch("mutable")),
       mutating:                       Mutating.from_dynamic!(d.fetch("mutating")),
@@ -5389,7 +5417,6 @@ 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")),
-      noexcept:                       Noexcept.from_dynamic!(d.fetch("noexcept")),
       obj3_if:                        If.from_dynamic!(d.fetch("if")),
       obj3_in:                        In.from_dynamic!(d.fetch("in")),
       obj3_lambda:                    Lambda.from_dynamic!(d.fetch("lambda")),
@@ -5406,6 +5433,7 @@ class Obj3 < Dry::Struct
   def to_dynamic
     {
       "dummy"                      => dummy,
+      "goto"                       => goto.to_dynamic,
       "guard"                      => guard.to_dynamic,
       "hasOwnProperty"             => has_own_property.to_dynamic,
       "hashCode"                   => hash_code.to_dynamic,
@@ -5456,6 +5484,7 @@ class Obj3 < Dry::Struct
       "long"                       => long.to_dynamic,
       "map"                        => map.to_dynamic,
       "MapEntry"                   => map_entry.to_dynamic,
+      "MarshalJSON"                => marshal_json.to_dynamic,
       "metadata_property_handling" => metadata_property_handling.to_dynamic,
       "mutable"                    => mutable.to_dynamic,
       "mutating"                   => mutating.to_dynamic,
@@ -5463,7 +5492,6 @@ class Obj3 < Dry::Struct
       "native"                     => native.to_dynamic,
       "newtonsoft"                 => newtonsoft.to_dynamic,
       "NO"                         => no.to_dynamic,
-      "noexcept"                   => noexcept.to_dynamic,
       "if"                         => obj3_if.to_dynamic,
       "in"                         => obj3_in.to_dynamic,
       "lambda"                     => obj3_lambda.to_dynamic,
@@ -5503,6 +5531,31 @@ class NoSuchMethod < Dry::Struct
   end
 end
 
+class Noexcept < Dry::Struct
+  attribute :noexcept, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      noexcept: d.fetch("noexcept"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "noexcept" => noexcept,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Nonatomic < Dry::Struct
   attribute :nonatomic, Types::Integer
 
@@ -6078,31 +6131,6 @@ class Return < Dry::Struct
   end
 end
 
-class Select < Dry::Struct
-  attribute :select_select, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      select_select: d.fetch("select"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "select" => select_select,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class ObjectClass < Dry::Struct
   attribute :object, Types::Integer
 
@@ -7081,6 +7109,7 @@ end
 class Obj4 < Dry::Struct
   attribute :dummy,            Types::Integer
   attribute :no_such_method,   NoSuchMethod
+  attribute :noexcept,         Noexcept
   attribute :nonatomic,        Nonatomic
   attribute :none,             None
   attribute :nonlocal,         Nonlocal
@@ -7104,7 +7133,6 @@ class Obj4 < Dry::Struct
   attribute :obj4_raise,       Raise
   attribute :obj4_require,     Require
   attribute :obj4_return,      Return
-  attribute :obj4_select,      Select
   attribute :object,           ObjectClass
   attribute :object_mapper,    ObjectMapper
   attribute :of,               Of
@@ -7150,6 +7178,7 @@ class Obj4 < Dry::Struct
     new(
       dummy:            d.fetch("dummy"),
       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")),
       nonlocal:         Nonlocal.from_dynamic!(d.fetch("nonlocal")),
@@ -7173,7 +7202,6 @@ class Obj4 < Dry::Struct
       obj4_raise:       Raise.from_dynamic!(d.fetch("raise")),
       obj4_require:     Require.from_dynamic!(d.fetch("require")),
       obj4_return:      Return.from_dynamic!(d.fetch("return")),
-      obj4_select:      Select.from_dynamic!(d.fetch("select")),
       object:           ObjectClass.from_dynamic!(d.fetch("object")),
       object_mapper:    ObjectMapper.from_dynamic!(d.fetch("ObjectMapper")),
       of:               Of.from_dynamic!(d.fetch("of")),
@@ -7224,6 +7252,7 @@ class Obj4 < Dry::Struct
     {
       "dummy"            => dummy,
       "noSuchMethod"     => no_such_method.to_dynamic,
+      "noexcept"         => noexcept.to_dynamic,
       "nonatomic"        => nonatomic.to_dynamic,
       "None"             => none.to_dynamic,
       "nonlocal"         => nonlocal.to_dynamic,
@@ -7247,7 +7276,6 @@ class Obj4 < Dry::Struct
       "raise"            => obj4_raise.to_dynamic,
       "require"          => obj4_require.to_dynamic,
       "return"           => obj4_return.to_dynamic,
-      "select"           => obj4_select.to_dynamic,
       "object"           => object.to_dynamic,
       "ObjectMapper"     => object_mapper.to_dynamic,
       "of"               => of.to_dynamic,
@@ -7320,6 +7348,31 @@ class KSerializer < Dry::Struct
   end
 end
 
+class Select < Dry::Struct
+  attribute :select_select, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      select_select: d.fetch("select"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "select" => select_select,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class SelfClass < Dry::Struct
   attribute :self_self, Types::Integer
 
@@ -8395,6 +8448,31 @@ class TimeZone < Dry::Struct
   end
 end
 
+class ToDict < Dry::Struct
+  attribute :to_dict, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      to_dict: d.fetch("to_dict"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "to_dict" => to_dict,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class ToString < Dry::Struct
   attribute :to_string, Types::Integer
 
@@ -8770,13 +8848,13 @@ class Union < Dry::Struct
   end
 end
 
-class Unowned < Dry::Struct
-  attribute :unowned, Types::Integer
+class UnmarshalJSON < Dry::Struct
+  attribute :unmarshal_json, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      unowned: d.fetch("unowned"),
+      unmarshal_json: d.fetch("UnmarshalJSON"),
     )
   end
 
@@ -8786,7 +8864,7 @@ class Unowned < Dry::Struct
 
   def to_dynamic
     {
-      "unowned" => unowned,
+      "UnmarshalJSON" => unmarshal_json,
     }
   end
 
@@ -8795,13 +8873,13 @@ class Unowned < Dry::Struct
   end
 end
 
-class Unsafe < Dry::Struct
-  attribute :unsafe, Types::Integer
+class Unowned < Dry::Struct
+  attribute :unowned, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      unsafe: d.fetch("unsafe"),
+      unowned: d.fetch("unowned"),
     )
   end
 
@@ -8811,7 +8889,7 @@ class Unsafe < Dry::Struct
 
   def to_dynamic
     {
-      "unsafe" => unsafe,
+      "unowned" => unowned,
     }
   end
 
@@ -8820,13 +8898,13 @@ class Unsafe < Dry::Struct
   end
 end
 
-class Unsigned < Dry::Struct
-  attribute :unsigned, Types::Integer
+class Unsafe < Dry::Struct
+  attribute :unsafe, Types::Integer
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
-      unsigned: d.fetch("unsigned"),
+      unsafe: d.fetch("unsafe"),
     )
   end
 
@@ -8836,7 +8914,7 @@ class Unsigned < Dry::Struct
 
   def to_dynamic
     {
-      "unsigned" => unsigned,
+      "unsafe" => unsafe,
     }
   end
 
@@ -8870,34 +8948,10 @@ class UseSerializers < Dry::Struct
   end
 end
 
-class Ushort < Dry::Struct
-  attribute :ushort, Types::Integer
-
-  def self.from_dynamic!(d)
-    d = Types::Hash[d]
-    new(
-      ushort: d.fetch("ushort"),
-    )
-  end
-
-  def self.from_json!(json)
-    from_dynamic!(JSON.parse(json))
-  end
-
-  def to_dynamic
-    {
-      "ushort" => ushort,
-    }
-  end
-
-  def to_json(options = nil)
-    JSON.generate(to_dynamic, options)
-  end
-end
-
 class Obj5 < Dry::Struct
   attribute :dummy,               Types::Integer
   attribute :k_serializer,        KSerializer
+  attribute :obj5_select,         Select
   attribute :obj5_self,           SelfClass
   attribute :obj5_super,          Super
   attribute :obj5_system,         System
@@ -8941,6 +8995,7 @@ class Obj5 < Dry::Struct
   attribute :time_only,           TimeOnly
   attribute :time_only_converter, TimeOnlyConverter
   attribute :time_zone,           TimeZone
+  attribute :to_dict,             ToDict
   attribute :to_string,           ToString
   attribute :top_level,           TopLevelClass
   attribute :transient,           Transient
@@ -8956,17 +9011,17 @@ class Obj5 < Dry::Struct
   attribute :unchecked,           Unchecked
   attribute :undefined,           UndefinedClass
   attribute :union,               Union
+  attribute :unmarshal_json,      UnmarshalJSON
   attribute :unowned,             Unowned
   attribute :unsafe,              Unsafe
-  attribute :unsigned,            Unsigned
   attribute :use_serializers,     UseSerializers
-  attribute :ushort,              Ushort
 
   def self.from_dynamic!(d)
     d = Types::Hash[d]
     new(
       dummy:               d.fetch("dummy"),
       k_serializer:        KSerializer.from_dynamic!(d.fetch("KSerializer")),
+      obj5_select:         Select.from_dynamic!(d.fetch("select")),
       obj5_self:           SelfClass.from_dynamic!(d.fetch("Self")),
       obj5_super:          Super.from_dynamic!(d.fetch("super")),
       obj5_system:         System.from_dynamic!(d.fetch("system")),
@@ -9010,6 +9065,7 @@ class Obj5 < Dry::Struct
       time_only:           TimeOnly.from_dynamic!(d.fetch("TimeOnly")),
       time_only_converter: TimeOnlyConverter.from_dynamic!(d.fetch("TimeOnlyConverter")),
       time_zone:           TimeZone.from_dynamic!(d.fetch("TimeZone")),
+      to_dict:             ToDict.from_dynamic!(d.fetch("to_dict")),
       to_string:           ToString.from_dynamic!(d.fetch("toString")),
       top_level:           TopLevelClass.from_dynamic!(d.fetch("top_level")),
       transient:           Transient.from_dynamic!(d.fetch("transient")),
@@ -9025,11 +9081,10 @@ class Obj5 < Dry::Struct
       unchecked:           Unchecked.from_dynamic!(d.fetch("unchecked")),
       undefined:           UndefinedClass.from_dynamic!(d.fetch("undefined")),
       union:               Union.from_dynamic!(d.fetch("union")),
+      unmarshal_json:      UnmarshalJSON.from_dynamic!(d.fetch("UnmarshalJSON")),
       unowned:             Unowned.from_dynamic!(d.fetch("unowned")),
       unsafe:              Unsafe.from_dynamic!(d.fetch("unsafe")),
-      unsigned:            Unsigned.from_dynamic!(d.fetch("unsigned")),
       use_serializers:     UseSerializers.from_dynamic!(d.fetch("UseSerializers")),
-      ushort:              Ushort.from_dynamic!(d.fetch("ushort")),
     )
   end
 
@@ -9041,6 +9096,7 @@ class Obj5 < Dry::Struct
     {
       "dummy"              => dummy,
       "KSerializer"        => k_serializer.to_dynamic,
+      "select"             => obj5_select.to_dynamic,
       "Self"               => obj5_self.to_dynamic,
       "super"              => obj5_super.to_dynamic,
       "system"             => obj5_system.to_dynamic,
@@ -9084,6 +9140,7 @@ class Obj5 < Dry::Struct
       "TimeOnly"           => time_only.to_dynamic,
       "TimeOnlyConverter"  => time_only_converter.to_dynamic,
       "TimeZone"           => time_zone.to_dynamic,
+      "to_dict"            => to_dict.to_dynamic,
       "toString"           => to_string.to_dynamic,
       "top_level"          => top_level.to_dynamic,
       "transient"          => transient.to_dynamic,
@@ -9099,11 +9156,10 @@ class Obj5 < Dry::Struct
       "unchecked"          => unchecked.to_dynamic,
       "undefined"          => undefined.to_dynamic,
       "union"              => union.to_dynamic,
+      "UnmarshalJSON"      => unmarshal_json.to_dynamic,
       "unowned"            => unowned.to_dynamic,
       "unsafe"             => unsafe.to_dynamic,
-      "unsigned"           => unsigned.to_dynamic,
       "UseSerializers"     => use_serializers.to_dynamic,
-      "ushort"             => ushort.to_dynamic,
     }
   end
 
@@ -9187,6 +9243,56 @@ class Yield < Dry::Struct
   end
 end
 
+class Unsigned < Dry::Struct
+  attribute :unsigned, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      unsigned: d.fetch("unsigned"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "unsigned" => unsigned,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class Ushort < Dry::Struct
+  attribute :ushort, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      ushort: d.fetch("ushort"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "ushort" => ushort,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Using < Dry::Struct
   attribute :using, Types::Integer
 
@@ -9567,6 +9673,8 @@ class Obj6 < Dry::Struct
   attribute :obj6_while,       While
   attribute :obj6_with,        With
   attribute :obj6_yield,       Yield
+  attribute :unsigned,         Unsigned
+  attribute :ushort,           Ushort
   attribute :using,            Using
   attribute :utf8_json_reader, Utf8JSONReader
   attribute :utf8_json_writer, Utf8JSONWriter
@@ -9590,6 +9698,8 @@ class Obj6 < Dry::Struct
       obj6_while:       While.from_dynamic!(d.fetch("while")),
       obj6_with:        With.from_dynamic!(d.fetch("with")),
       obj6_yield:       Yield.from_dynamic!(d.fetch("yield")),
+      unsigned:         Unsigned.from_dynamic!(d.fetch("unsigned")),
+      ushort:           Ushort.from_dynamic!(d.fetch("ushort")),
       using:            Using.from_dynamic!(d.fetch("using")),
       utf8_json_reader: Utf8JSONReader.from_dynamic!(d.fetch("Utf8JsonReader")),
       utf8_json_writer: Utf8JSONWriter.from_dynamic!(d.fetch("Utf8JsonWriter")),
@@ -9618,6 +9728,8 @@ class Obj6 < Dry::Struct
       "while"          => obj6_while.to_dynamic,
       "with"           => obj6_with.to_dynamic,
       "yield"          => obj6_yield.to_dynamic,
+      "unsigned"       => unsigned.to_dynamic,
+      "ushort"         => ushort.to_dynamic,
       "using"          => using.to_dynamic,
       "Utf8JsonReader" => utf8_json_reader.to_dynamic,
       "Utf8JsonWriter" => utf8_json_writer.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 a903b78..193927e 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
@@ -639,6 +639,8 @@ pub struct Obj2 {
 
     pub from: From,
 
+    pub from_dict: FromDict,
+
     pub from_json: FromJson,
 
     pub func: Func,
@@ -651,8 +653,6 @@ pub struct Obj2 {
 
     pub go: Go,
 
-    pub goto: Goto,
-
     #[serde(rename = "default")]
     pub obj2_default: Default,
 
@@ -942,6 +942,11 @@ pub struct From {
     pub from: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct FromDict {
+    pub from_dict: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct FromJson {
     pub from_json: i64,
@@ -972,11 +977,6 @@ pub struct Go {
     pub go: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Goto {
-    pub goto: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Default {
     #[serde(rename = "default")]
@@ -1036,6 +1036,8 @@ pub struct FalseClass {
 pub struct Obj3 {
     pub dummy: i64,
 
+    pub goto: Goto,
+
     pub guard: Guard,
 
     #[serde(rename = "hasOwnProperty")]
@@ -1155,6 +1157,9 @@ pub struct Obj3 {
     #[serde(rename = "MapEntry")]
     pub map_entry: MapEntry,
 
+    #[serde(rename = "MarshalJSON")]
+    pub marshal_json: MarshalJson,
+
     pub metadata_property_handling: MetadataPropertyHandling,
 
     pub module: Module,
@@ -1176,8 +1181,6 @@ pub struct Obj3 {
     #[serde(rename = "NO")]
     pub no: No,
 
-    pub noexcept: Noexcept,
-
     #[serde(rename = "if")]
     pub obj3_if: If,
 
@@ -1188,6 +1191,11 @@ pub struct Obj3 {
     pub obj3_let: Let,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Goto {
+    pub goto: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Guard {
     pub guard: i64,
@@ -1462,6 +1470,13 @@ pub struct MapEntry {
     pub map_entry: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct MarshalJson {
+    #[serde(rename = "MarshalJSON")]
+    pub marshal_json: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct MetadataPropertyHandling {
     pub metadata_property_handling: i64,
@@ -1513,11 +1528,6 @@ pub struct No {
     pub no: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Noexcept {
-    pub noexcept: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct If {
     #[serde(rename = "if")]
@@ -1543,6 +1553,8 @@ pub struct Obj4 {
     #[serde(rename = "noSuchMethod")]
     pub no_such_method: NoSuchMethod,
 
+    pub noexcept: Noexcept,
+
     pub nonatomic: Nonatomic,
 
     #[serde(rename = "None")]
@@ -1683,8 +1695,6 @@ pub struct Obj4 {
 
     #[serde(rename = "SEL")]
     pub sel: Sel,
-
-    pub select: Select,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -1693,6 +1703,11 @@ pub struct NoSuchMethod {
     pub no_such_method: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Noexcept {
+    pub noexcept: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Nonatomic {
     pub nonatomic: i64,
@@ -2020,11 +2035,6 @@ pub struct Sel {
     pub sel: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Select {
-    pub select: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Obj5 {
     pub dummy: i64,
@@ -2074,6 +2084,8 @@ pub struct Obj5 {
     #[serde(rename = "type")]
     pub purple_type: TypeClass,
 
+    pub select: Select,
+
     #[serde(rename = "Sendable")]
     pub sendable: Sendable,
 
@@ -2150,6 +2162,8 @@ pub struct Obj5 {
     #[serde(rename = "TimeZone")]
     pub time_zone: TimeZone,
 
+    pub to_dict: ToDict,
+
     pub to_json: ToJson,
 
     #[serde(rename = "toString")]
@@ -2177,14 +2191,13 @@ pub struct Obj5 {
 
     pub undefined: Undefined,
 
-    pub unowned: Unowned,
+    #[serde(rename = "UnmarshalJSON")]
+    pub unmarshal_json: UnmarshalJson,
 
-    pub unsigned: Unsigned,
+    pub unowned: Unowned,
 
     #[serde(rename = "UseSerializers")]
     pub use_serializers: UseSerializers,
-
-    pub ushort: Ushort,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -2280,6 +2293,11 @@ pub struct TypeClass {
     pub type_type: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Select {
+    pub select: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(rename_all = "PascalCase")]
 pub struct Sendable {
@@ -2452,6 +2470,11 @@ pub struct TimeZone {
     pub time_zone: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct ToDict {
+    pub to_dict: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct ToJson {
     pub to_json: i64,
@@ -2519,13 +2542,15 @@ pub struct Undefined {
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Unowned {
-    pub unowned: i64,
+#[serde(rename_all = "PascalCase")]
+pub struct UnmarshalJson {
+    #[serde(rename = "UnmarshalJSON")]
+    pub unmarshal_json: i64,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Unsigned {
-    pub unsigned: i64,
+pub struct Unowned {
+    pub unowned: i64,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
@@ -2534,11 +2559,6 @@ pub struct UseSerializers {
     pub use_serializers: i64,
 }
 
-#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct Ushort {
-    pub ushort: i64,
-}
-
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Obj6 {
     pub dummy: i64,
@@ -2555,6 +2575,10 @@ pub struct Obj6 {
     #[serde(rename = "yield")]
     pub obj6_yield: Yield,
 
+    pub unsigned: Unsigned,
+
+    pub ushort: Ushort,
+
     pub using: Using,
 
     #[serde(rename = "Utf8JsonReader")]
@@ -2613,6 +2637,16 @@ pub struct Yield {
     pub yield_yield: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Unsigned {
+    pub unsigned: i64,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Ushort {
+    pub ushort: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Using {
     pub using: 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 9c606f8..fab2582 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
@@ -417,13 +417,13 @@ case class Obj2 (
     val FormatException : FormatException,
     val friend : Friend,
     val from : From,
+    val from_dict : FromDict,
     val from_json : FromJSON,
     val func : Func,
     val function : Function,
     val get : Get,
     val global : Global,
     val go : Go,
-    val goto : Goto,
     val `def` : Def,
     val `do` : Do,
     val `else` : Else,
@@ -635,6 +635,10 @@ case class From (
     val from : Long
 ) derives Encoder.AsObject, Decoder
 
+case class FromDict (
+    val from_dict : Long
+) derives Encoder.AsObject, Decoder
+
 case class FromJSON (
     val from_json : Long
 ) derives Encoder.AsObject, Decoder
@@ -659,10 +663,6 @@ case class Go (
     val go : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Goto (
-    val goto : Long
-) derives Encoder.AsObject, Decoder
-
 case class Def (
     val `def` : Long
 ) derives Encoder.AsObject, Decoder
@@ -709,6 +709,7 @@ case class FalseClass (
 
 case class Obj3 (
     val dummy : Long,
+    val goto : Goto,
     val guard : Guard,
     val hasOwnProperty : HasOwnProperty,
     val hashCodeValue : HashCode,
@@ -758,6 +759,7 @@ case class Obj3 (
     val long : LongClass,
     val map : MapClass,
     val MapEntry : MapEntry,
+    val MarshalJSON : MarshalJSON,
     val metadata_property_handling : MetadataPropertyHandling,
     val module : Module,
     val mutable : Mutable,
@@ -767,7 +769,6 @@ case class Obj3 (
     val newtonsoft : Newtonsoft,
     val nil : Nil,
     val NO : No,
-    val noexcept : Noexcept,
     val `if` : If,
     val `implicit` : Implicit,
     val `import` : Import,
@@ -784,6 +785,10 @@ object Obj3:
         )
     given io.circe.Codec.AsObject[Obj3] = io.circe.derivation.ConfiguredCodec.derived
 
+case class Goto (
+    val goto : Long
+) derives Encoder.AsObject, Decoder
+
 case class Guard (
     val guard : Long
 ) derives Encoder.AsObject, Decoder
@@ -989,6 +994,10 @@ case class MapEntry (
     val MapEntry : Long
 ) derives Encoder.AsObject, Decoder
 
+case class MarshalJSON (
+    val MarshalJSON : Long
+) derives Encoder.AsObject, Decoder
+
 case class MetadataPropertyHandling (
     val metadata_property_handling : Long
 ) derives Encoder.AsObject, Decoder
@@ -1025,10 +1034,6 @@ case class No (
     val NO : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Noexcept (
-    val noexcept : Long
-) derives Encoder.AsObject, Decoder
-
 case class If (
     val `if` : Long
 ) derives Encoder.AsObject, Decoder
@@ -1052,6 +1057,7 @@ case class New (
 case class Obj4 (
     val dummy : Long,
     val noSuchMethod : NoSuchMethod,
+    val noexcept : Noexcept,
     val nonatomic : Nonatomic,
     val None : NoneClass,
     val nonlocal : Nonlocal,
@@ -1113,14 +1119,17 @@ case class Obj4 (
     val runtimeType : RuntimeType,
     val s : S,
     val sbyte : Sbyte,
-    val SEL : Sel,
-    val select : Select
+    val SEL : Sel
 ) derives Encoder.AsObject, Decoder
 
 case class NoSuchMethod (
     val noSuchMethod : Long
 ) derives Encoder.AsObject, Decoder
 
+case class Noexcept (
+    val noexcept : Long
+) derives Encoder.AsObject, Decoder
+
 case class Nonatomic (
     val nonatomic : Long
 ) derives Encoder.AsObject, Decoder
@@ -1369,10 +1378,6 @@ case class Sel (
     val SEL : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Select (
-    val select : Long
-) derives Encoder.AsObject, Decoder
-
 case class Obj5 (
     val dummy : Long,
     val KSerializer : KSerializer,
@@ -1387,6 +1392,7 @@ case class Obj5 (
     val PrimitiveKind : PrimitiveKind,
     val `true` : TrueClass,
     val `type` : TypeClass,
+    val select : Select,
     val Self : Self,
     val Sendable : Sendable,
     val SerialDescriptor : SerialDescriptor,
@@ -1420,6 +1426,7 @@ case class Obj5 (
     val TimeOnly : TimeOnly,
     val TimeOnlyConverter : TimeOnlyConverter,
     val TimeZone : TimeZone,
+    val to_dict : ToDict,
     val to_json : ToJSON,
     val toStringValue : ToString,
     val top_level : TopLevelClass,
@@ -1434,11 +1441,10 @@ case class Obj5 (
     val unchecked : Unchecked,
     val undefined : Undefined,
     val union : Union,
+    val UnmarshalJSON : UnmarshalJSON,
     val unowned : Unowned,
     val unsafe : Unsafe,
-    val unsigned : Unsigned,
-    val UseSerializers : UseSerializers,
-    val ushort : Ushort
+    val UseSerializers : UseSerializers
 )
 
 object Obj5:
@@ -1499,6 +1505,10 @@ case class TypeClass (
     val `type` : Long
 ) derives Encoder.AsObject, Decoder
 
+case class Select (
+    val select : Long
+) derives Encoder.AsObject, Decoder
+
 case class Self (
     val Self : Long
 ) derives Encoder.AsObject, Decoder
@@ -1640,6 +1650,10 @@ case class TimeZone (
     val TimeZone : Long
 ) derives Encoder.AsObject, Decoder
 
+case class ToDict (
+    val to_dict : Long
+) derives Encoder.AsObject, Decoder
+
 case class ToJSON (
     val to_json : Long
 ) derives Encoder.AsObject, Decoder
@@ -1705,6 +1719,10 @@ case class Union (
     val union : Long
 ) derives Encoder.AsObject, Decoder
 
+case class UnmarshalJSON (
+    val UnmarshalJSON : Long
+) derives Encoder.AsObject, Decoder
+
 case class Unowned (
     val unowned : Long
 ) derives Encoder.AsObject, Decoder
@@ -1713,24 +1731,18 @@ case class Unsafe (
     val unsafe : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Unsigned (
-    val unsigned : Long
-) derives Encoder.AsObject, Decoder
-
 case class UseSerializers (
     val UseSerializers : Long
 ) derives Encoder.AsObject, Decoder
 
-case class Ushort (
-    val ushort : Long
-) derives Encoder.AsObject, Decoder
-
 case class Obj6 (
     val dummy : Long,
     val `var` : Var,
     val `while` : While,
     val `with` : With,
     val `yield` : Yield,
+    val unsigned : Unsigned,
+    val ushort : Ushort,
     val using : Using,
     val Utf8JsonReader : Utf8JSONReader,
     val Utf8JsonWriter : Utf8JSONWriter,
@@ -1763,6 +1775,14 @@ case class Yield (
     val `yield` : Long
 ) derives Encoder.AsObject, Decoder
 
+case class Unsigned (
+    val unsigned : Long
+) derives Encoder.AsObject, Decoder
+
+case class Ushort (
+    val ushort : Long
+) derives Encoder.AsObject, Decoder
+
 case class Using (
     val using : 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 0705d32..88d02d5 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
@@ -464,13 +464,13 @@ case class Obj2 (
     val FormatException : FormatException,
     val friend : Friend,
     val from : From,
+    val from_dict : FromDict,
     val from_json : FromJSON,
     val func : Func,
     val function : Function,
     val get : Get,
     val global : Global,
     val go : Go,
-    val goto : Goto,
     val `def` : Def,
     val `do` : Do,
     val `else` : Else,
@@ -684,6 +684,10 @@ case class From (
     val from : Long
 ) derives OptionPickler.ReadWriter
 
+case class FromDict (
+    val from_dict : Long
+) derives OptionPickler.ReadWriter
+
 case class FromJSON (
     val from_json : Long
 ) derives OptionPickler.ReadWriter
@@ -708,10 +712,6 @@ case class Go (
     val go : Long
 ) derives OptionPickler.ReadWriter
 
-case class Goto (
-    val goto : Long
-) derives OptionPickler.ReadWriter
-
 case class Def (
     val `def` : Long
 ) derives OptionPickler.ReadWriter
@@ -758,6 +758,7 @@ case class FalseClass (
 
 case class Obj3 (
     val dummy : Long,
+    val goto : Goto,
     val guard : Guard,
     val hasOwnProperty : HasOwnProperty,
     @upickle.implicits.key("hashCode")
@@ -808,6 +809,7 @@ case class Obj3 (
     val long : LongClass,
     val map : MapClass,
     val MapEntry : MapEntry,
+    val MarshalJSON : MarshalJSON,
     val metadata_property_handling : MetadataPropertyHandling,
     val module : Module,
     val mutable : Mutable,
@@ -817,7 +819,6 @@ case class Obj3 (
     val newtonsoft : Newtonsoft,
     val nil : Nil,
     val NO : No,
-    val noexcept : Noexcept,
     val `if` : If,
     val `implicit` : Implicit,
     val `import` : Import,
@@ -825,6 +826,10 @@ case class Obj3 (
     val `new` : New
 ) derives OptionPickler.ReadWriter
 
+case class Goto (
+    val goto : Long
+) derives OptionPickler.ReadWriter
+
 case class Guard (
     val guard : Long
 ) derives OptionPickler.ReadWriter
@@ -1022,6 +1027,10 @@ case class MapEntry (
     val MapEntry : Long
 ) derives OptionPickler.ReadWriter
 
+case class MarshalJSON (
+    val MarshalJSON : Long
+) derives OptionPickler.ReadWriter
+
 case class MetadataPropertyHandling (
     val metadata_property_handling : Long
 ) derives OptionPickler.ReadWriter
@@ -1058,10 +1067,6 @@ case class No (
     val NO : Long
 ) derives OptionPickler.ReadWriter
 
-case class Noexcept (
-    val noexcept : Long
-) derives OptionPickler.ReadWriter
-
 case class If (
     val `if` : Long
 ) derives OptionPickler.ReadWriter
@@ -1085,6 +1090,7 @@ case class New (
 case class Obj4 (
     val dummy : Long,
     val noSuchMethod : NoSuchMethod,
+    val noexcept : Noexcept,
     val nonatomic : Nonatomic,
     val None : NoneClass,
     val nonlocal : Nonlocal,
@@ -1146,14 +1152,17 @@ case class Obj4 (
     val runtimeType : RuntimeType,
     val s : S,
     val sbyte : Sbyte,
-    val SEL : Sel,
-    val select : Select
+    val SEL : Sel
 ) derives OptionPickler.ReadWriter
 
 case class NoSuchMethod (
     val noSuchMethod : Long
 ) derives OptionPickler.ReadWriter
 
+case class Noexcept (
+    val noexcept : Long
+) derives OptionPickler.ReadWriter
+
 case class Nonatomic (
     val nonatomic : Long
 ) derives OptionPickler.ReadWriter
@@ -1402,10 +1411,6 @@ case class Sel (
     val SEL : Long
 ) derives OptionPickler.ReadWriter
 
-case class Select (
-    val select : Long
-) derives OptionPickler.ReadWriter
-
 case class Obj5 (
     val dummy : Long,
     val KSerializer : KSerializer,
@@ -1420,6 +1425,7 @@ case class Obj5 (
     val PrimitiveKind : PrimitiveKind,
     val `true` : TrueClass,
     val `type` : TypeClass,
+    val select : Select,
     val Self : Self,
     val Sendable : Sendable,
     val SerialDescriptor : SerialDescriptor,
@@ -1454,6 +1460,7 @@ case class Obj5 (
     val TimeOnly : TimeOnly,
     val TimeOnlyConverter : TimeOnlyConverter,
     val TimeZone : TimeZone,
+    val to_dict : ToDict,
     val to_json : ToJSON,
     @upickle.implicits.key("toString")
     val toStringValue : ToString,
@@ -1469,11 +1476,10 @@ case class Obj5 (
     val unchecked : Unchecked,
     val undefined : Undefined,
     val union : Union,
+    val UnmarshalJSON : UnmarshalJSON,
     val unowned : Unowned,
     val unsafe : Unsafe,
-    val unsigned : Unsigned,
-    val UseSerializers : UseSerializers,
-    val ushort : Ushort
+    val UseSerializers : UseSerializers
 ) derives OptionPickler.ReadWriter
 
 case class KSerializer (
@@ -1524,6 +1530,10 @@ case class TypeClass (
     val `type` : Long
 ) derives OptionPickler.ReadWriter
 
+case class Select (
+    val select : Long
+) derives OptionPickler.ReadWriter
+
 case class Self (
     val Self : Long
 ) derives OptionPickler.ReadWriter
@@ -1657,6 +1667,10 @@ case class TimeZone (
     val TimeZone : Long
 ) derives OptionPickler.ReadWriter
 
+case class ToDict (
+    val to_dict : Long
+) derives OptionPickler.ReadWriter
+
 case class ToJSON (
     val to_json : Long
 ) derives OptionPickler.ReadWriter
@@ -1714,6 +1728,10 @@ case class Union (
     val union : Long
 ) derives OptionPickler.ReadWriter
 
+case class UnmarshalJSON (
+    val UnmarshalJSON : Long
+) derives OptionPickler.ReadWriter
+
 case class Unowned (
     val unowned : Long
 ) derives OptionPickler.ReadWriter
@@ -1722,24 +1740,18 @@ case class Unsafe (
     val unsafe : Long
 ) derives OptionPickler.ReadWriter
 
-case class Unsigned (
-    val unsigned : Long
-) derives OptionPickler.ReadWriter
-
 case class UseSerializers (
     val UseSerializers : Long
 ) derives OptionPickler.ReadWriter
 
-case class Ushort (
-    val ushort : Long
-) derives OptionPickler.ReadWriter
-
 case class Obj6 (
     val dummy : Long,
     val `var` : Var,
     val `while` : While,
     val `with` : With,
     val `yield` : Yield,
+    val unsigned : Unsigned,
+    val ushort : Ushort,
     val using : Using,
     val Utf8JsonReader : Utf8JSONReader,
     val Utf8JsonWriter : Utf8JSONWriter,
@@ -1772,6 +1784,14 @@ case class Yield (
     val `yield` : Long
 ) derives OptionPickler.ReadWriter
 
+case class Unsigned (
+    val unsigned : Long
+) derives OptionPickler.ReadWriter
+
+case class Ushort (
+    val ushort : Long
+) derives OptionPickler.ReadWriter
+
 case class Using (
     val using : Long
 ) derives OptionPickler.ReadWriter
diff --git a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
index 8253ae9..3f00f00 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
+++ b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.c
@@ -129,6 +129,7 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "FormatException")) x = ENUM_FORMAT_EXCEPTION;
         else if (!strcmp(cJSON_GetStringValue(j), "friend")) x = ENUM_FRIEND;
         else if (!strcmp(cJSON_GetStringValue(j), "from")) x = ENUM_FROM;
+        else if (!strcmp(cJSON_GetStringValue(j), "from_dict")) x = ENUM_FROM_DICT;
         else if (!strcmp(cJSON_GetStringValue(j), "from_json")) x = ENUM_FROM_JSON;
         else if (!strcmp(cJSON_GetStringValue(j), "func")) x = ENUM_FUNC;
         else if (!strcmp(cJSON_GetStringValue(j), "function")) x = ENUM_FUNCTION;
@@ -188,6 +189,7 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "lock")) x = ENUM_LOCK;
         else if (!strcmp(cJSON_GetStringValue(j), "long")) x = ENUM_LONG;
         else if (!strcmp(cJSON_GetStringValue(j), "map")) x = ENUM_MAP;
+        else if (!strcmp(cJSON_GetStringValue(j), "MarshalJSON")) x = ENUM_MARSHAL_JSON;
         else if (!strcmp(cJSON_GetStringValue(j), "MapEntry")) x = ENUM_MAP_ENTRY;
         else if (!strcmp(cJSON_GetStringValue(j), "metadata_property_handling")) x = ENUM_METADATA_PROPERTY_HANDLING;
         else if (!strcmp(cJSON_GetStringValue(j), "module")) x = ENUM_MODULE;
@@ -307,6 +309,7 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "to_json")) x = ENUM_TO_JSON;
         else if (!strcmp(cJSON_GetStringValue(j), "top_level")) x = ENUM_TOP_LEVEL;
         else if (!strcmp(cJSON_GetStringValue(j), "toString")) x = ENUM_TO_STRING;
+        else if (!strcmp(cJSON_GetStringValue(j), "to_dict")) x = ENUM_TO_DICT;
         else if (!strcmp(cJSON_GetStringValue(j), "transient")) x = ENUM_TRANSIENT;
         else if (!strcmp(cJSON_GetStringValue(j), "True")) x = ENUM_TRUE;
         else if (!strcmp(cJSON_GetStringValue(j), "true")) x = ENUM_ENUM_TRUE;
@@ -323,6 +326,7 @@ enum Enum cJSON_GetEnumValue(const cJSON * j) {
         else if (!strcmp(cJSON_GetStringValue(j), "unchecked")) x = ENUM_UNCHECKED;
         else if (!strcmp(cJSON_GetStringValue(j), "undefined")) x = ENUM_UNDEFINED;
         else if (!strcmp(cJSON_GetStringValue(j), "union")) x = ENUM_UNION;
+        else if (!strcmp(cJSON_GetStringValue(j), "UnmarshalJSON")) x = ENUM_UNMARSHAL_JSON;
         else if (!strcmp(cJSON_GetStringValue(j), "UseSerializers")) x = ENUM_USE_SERIALIZERS;
         else if (!strcmp(cJSON_GetStringValue(j), "unowned")) x = ENUM_UNOWNED;
         else if (!strcmp(cJSON_GetStringValue(j), "unsafe")) x = ENUM_UNSAFE;
@@ -475,6 +479,7 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_FORMAT_EXCEPTION: j = cJSON_CreateString("FormatException"); break;
         case ENUM_FRIEND: j = cJSON_CreateString("friend"); break;
         case ENUM_FROM: j = cJSON_CreateString("from"); break;
+        case ENUM_FROM_DICT: j = cJSON_CreateString("from_dict"); break;
         case ENUM_FROM_JSON: j = cJSON_CreateString("from_json"); break;
         case ENUM_FUNC: j = cJSON_CreateString("func"); break;
         case ENUM_FUNCTION: j = cJSON_CreateString("function"); break;
@@ -534,6 +539,7 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_LOCK: j = cJSON_CreateString("lock"); break;
         case ENUM_LONG: j = cJSON_CreateString("long"); break;
         case ENUM_MAP: j = cJSON_CreateString("map"); break;
+        case ENUM_MARSHAL_JSON: j = cJSON_CreateString("MarshalJSON"); break;
         case ENUM_MAP_ENTRY: j = cJSON_CreateString("MapEntry"); break;
         case ENUM_METADATA_PROPERTY_HANDLING: j = cJSON_CreateString("metadata_property_handling"); break;
         case ENUM_MODULE: j = cJSON_CreateString("module"); break;
@@ -653,6 +659,7 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_TO_JSON: j = cJSON_CreateString("to_json"); break;
         case ENUM_TOP_LEVEL: j = cJSON_CreateString("top_level"); break;
         case ENUM_TO_STRING: j = cJSON_CreateString("toString"); break;
+        case ENUM_TO_DICT: j = cJSON_CreateString("to_dict"); break;
         case ENUM_TRANSIENT: j = cJSON_CreateString("transient"); break;
         case ENUM_TRUE: j = cJSON_CreateString("True"); break;
         case ENUM_ENUM_TRUE: j = cJSON_CreateString("true"); break;
@@ -669,6 +676,7 @@ cJSON * cJSON_CreateEnum(const enum Enum x) {
         case ENUM_UNCHECKED: j = cJSON_CreateString("unchecked"); break;
         case ENUM_UNDEFINED: j = cJSON_CreateString("undefined"); break;
         case ENUM_UNION: j = cJSON_CreateString("union"); break;
+        case ENUM_UNMARSHAL_JSON: j = cJSON_CreateString("UnmarshalJSON"); break;
         case ENUM_USE_SERIALIZERS: j = cJSON_CreateString("UseSerializers"); break;
         case ENUM_UNOWNED: j = cJSON_CreateString("unowned"); break;
         case ENUM_UNSAFE: j = cJSON_CreateString("unsafe"); break;
diff --git a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
index 0476658..6a6a864 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
+++ b/head/schema-cjson/test/inputs/schema/keyword-enum.schema/default/TopLevel.h
@@ -170,6 +170,7 @@ enum Enum {
     ENUM_FORMAT_EXCEPTION,
     ENUM_FRIEND,
     ENUM_FROM,
+    ENUM_FROM_DICT,
     ENUM_FROM_JSON,
     ENUM_FUNC,
     ENUM_FUNCTION,
@@ -229,6 +230,7 @@ enum Enum {
     ENUM_LOCK,
     ENUM_LONG,
     ENUM_MAP,
+    ENUM_MARSHAL_JSON,
     ENUM_MAP_ENTRY,
     ENUM_METADATA_PROPERTY_HANDLING,
     ENUM_MODULE,
@@ -348,6 +350,7 @@ enum Enum {
     ENUM_TO_JSON,
     ENUM_TOP_LEVEL,
     ENUM_TO_STRING,
+    ENUM_TO_DICT,
     ENUM_TRANSIENT,
     ENUM_TRUE,
     ENUM_ENUM_TRUE,
@@ -364,6 +367,7 @@ enum Enum {
     ENUM_UNCHECKED,
     ENUM_UNDEFINED,
     ENUM_UNION,
+    ENUM_UNMARSHAL_JSON,
     ENUM_USE_SERIALIZERS,
     ENUM_UNOWNED,
     ENUM_UNSAFE,
diff --git a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
index a05d6b3..5b2cf7a 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
+++ b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.c
@@ -3173,6 +3173,50 @@ void cJSON_DeleteUnionFrom(struct UnionFrom * x) {
     }
 }
 
+struct UnionFromDict * cJSON_GetUnionFromDictValue(const cJSON * j) {
+    struct UnionFromDict * x = cJSON_malloc(sizeof(struct UnionFromDict));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionFromDict));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.from_dict = cJSON_GetFromDictValue(j);
+            if (NULL == x->value.from_dict) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionFromDict * cJSON_ParseUnionFromDict(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionFromDict * x = j ? cJSON_GetUnionFromDictValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionFromDict(const struct UnionFromDict * x) { cJSON * j = cJSON_CreateUnionFromDict(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionFromDict(const struct UnionFromDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateFromDict(x->value.from_dict);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionFromDict(struct UnionFromDict * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteFromDict(x->value.from_dict);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionFromJson * cJSON_GetUnionFromJsonValue(const cJSON * j) {
     struct UnionFromJson * x = cJSON_malloc(sizeof(struct UnionFromJson));
     if (NULL != x) {
@@ -5637,6 +5681,50 @@ void cJSON_DeleteUnionMapEntry(struct UnionMapEntry * x) {
     }
 }
 
+struct UnionMarshalJson * cJSON_GetUnionMarshalJsonValue(const cJSON * j) {
+    struct UnionMarshalJson * x = cJSON_malloc(sizeof(struct UnionMarshalJson));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionMarshalJson));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.marshal_json = cJSON_GetMarshalJsonValue(j);
+            if (NULL == x->value.marshal_json) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionMarshalJson * cJSON_ParseUnionMarshalJson(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionMarshalJson * x = j ? cJSON_GetUnionMarshalJsonValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionMarshalJson(const struct UnionMarshalJson * x) { cJSON * j = cJSON_CreateUnionMarshalJson(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionMarshalJson(const struct UnionMarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateMarshalJson(x->value.marshal_json);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionMarshalJson(struct UnionMarshalJson * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteMarshalJson(x->value.marshal_json);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionMetadataPropertyHandling * cJSON_GetUnionMetadataPropertyHandlingValue(const cJSON * j) {
     struct UnionMetadataPropertyHandling * x = cJSON_malloc(sizeof(struct UnionMetadataPropertyHandling));
     if (NULL != x) {
@@ -9201,6 +9289,50 @@ void cJSON_DeleteUnionTimeZone(struct UnionTimeZone * x) {
     }
 }
 
+struct UnionToDict * cJSON_GetUnionToDictValue(const cJSON * j) {
+    struct UnionToDict * x = cJSON_malloc(sizeof(struct UnionToDict));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionToDict));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.to_dict = cJSON_GetToDictValue(j);
+            if (NULL == x->value.to_dict) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionToDict * cJSON_ParseUnionToDict(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionToDict * x = j ? cJSON_GetUnionToDictValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionToDict(const struct UnionToDict * x) { cJSON * j = cJSON_CreateUnionToDict(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionToDict(const struct UnionToDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateToDict(x->value.to_dict);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionToDict(struct UnionToDict * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteToDict(x->value.to_dict);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionToJson * cJSON_GetUnionToJsonValue(const cJSON * j) {
     struct UnionToJson * x = cJSON_malloc(sizeof(struct UnionToJson));
     if (NULL != x) {
@@ -14261,6 +14393,50 @@ void cJSON_DeleteUnionUndefined(struct UnionUndefined * x) {
     }
 }
 
+struct UnionUnmarshalJson * cJSON_GetUnionUnmarshalJsonValue(const cJSON * j) {
+    struct UnionUnmarshalJson * x = cJSON_malloc(sizeof(struct UnionUnmarshalJson));
+    if (NULL != x) {
+        memset(x, 0, sizeof(struct UnionUnmarshalJson));
+        if (cJSON_IsNumber(j)) {
+            x->type = cJSON_Number;
+            x->value.number = cJSON_GetNumberValue(j);
+        }
+        else if (cJSON_IsObject(j)) {
+            x->type = cJSON_Object;
+            x->value.unmarshal_json = cJSON_GetUnmarshalJsonValue(j);
+            if (NULL == x->value.unmarshal_json) x->type = 0;
+        }
+        if (0 == x->type) { cJSON_free(x); return NULL; }
+    }
+    return x;
+}
+struct UnionUnmarshalJson * cJSON_ParseUnionUnmarshalJson(const char * s) { cJSON * j = cJSON_Parse(s); struct UnionUnmarshalJson * x = j ? cJSON_GetUnionUnmarshalJsonValue(j) : NULL; cJSON_Delete(j); return x; }
+char * cJSON_PrintUnionUnmarshalJson(const struct UnionUnmarshalJson * x) { cJSON * j = cJSON_CreateUnionUnmarshalJson(x); char * s = j ? cJSON_Print(j) : NULL; cJSON_Delete(j); return s; }
+
+cJSON * cJSON_CreateUnionUnmarshalJson(const struct UnionUnmarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+            j = cJSON_CreateNumber(x->value.number);
+        }
+        else if (cJSON_Object == x->type) {
+            j = cJSON_CreateUnmarshalJson(x->value.unmarshal_json);
+        }
+    }
+    return j;
+}
+
+void cJSON_DeleteUnionUnmarshalJson(struct UnionUnmarshalJson * x) {
+    if (NULL != x) {
+        if (cJSON_Number == x->type) {
+        }
+        else if (cJSON_Object == x->type) {
+            cJSON_DeleteUnmarshalJson(x->value.unmarshal_json);
+        }
+        cJSON_free(x);
+    }
+}
+
 struct UnionUnowned * cJSON_GetUnionUnownedValue(const cJSON * j) {
     struct UnionUnowned * x = cJSON_malloc(sizeof(struct UnionUnowned));
     if (NULL != x) {
@@ -18405,6 +18581,55 @@ void cJSON_DeleteFrom(struct From * x) {
     }
 }
 
+struct FromDict * cJSON_ParseFromDict(const char * s) {
+    struct FromDict * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetFromDictValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct FromDict * cJSON_GetFromDictValue(const cJSON * j) {
+    struct FromDict * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct FromDict)))) {
+            memset(x, 0, sizeof(struct FromDict));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateFromDict(const struct FromDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintFromDict(const struct FromDict * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateFromDict(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteFromDict(struct FromDict * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct FromJson * cJSON_ParseFromJson(const char * s) {
     struct FromJson * x = NULL;
     if (NULL != s) {
@@ -21149,6 +21374,55 @@ void cJSON_DeleteMapEntry(struct MapEntry * x) {
     }
 }
 
+struct MarshalJson * cJSON_ParseMarshalJson(const char * s) {
+    struct MarshalJson * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetMarshalJsonValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct MarshalJson * cJSON_GetMarshalJsonValue(const cJSON * j) {
+    struct MarshalJson * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct MarshalJson)))) {
+            memset(x, 0, sizeof(struct MarshalJson));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateMarshalJson(const struct MarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintMarshalJson(const struct MarshalJson * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateMarshalJson(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteMarshalJson(struct MarshalJson * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct MetadataPropertyHandling * cJSON_ParseMetadataPropertyHandling(const char * s) {
     struct MetadataPropertyHandling * x = NULL;
     if (NULL != s) {
@@ -25118,6 +25392,55 @@ void cJSON_DeleteTimeZone(struct TimeZone * x) {
     }
 }
 
+struct ToDict * cJSON_ParseToDict(const char * s) {
+    struct ToDict * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetToDictValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct ToDict * cJSON_GetToDictValue(const cJSON * j) {
+    struct ToDict * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct ToDict)))) {
+            memset(x, 0, sizeof(struct ToDict));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateToDict(const struct ToDict * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintToDict(const struct ToDict * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateToDict(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteToDict(struct ToDict * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct ToJson * cJSON_ParseToJson(const char * s) {
     struct ToJson * x = NULL;
     if (NULL != s) {
@@ -30753,6 +31076,55 @@ void cJSON_DeleteUndefined(struct Undefined * x) {
     }
 }
 
+struct UnmarshalJson * cJSON_ParseUnmarshalJson(const char * s) {
+    struct UnmarshalJson * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetUnmarshalJsonValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct UnmarshalJson * cJSON_GetUnmarshalJsonValue(const cJSON * j) {
+    struct UnmarshalJson * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct UnmarshalJson)))) {
+            memset(x, 0, sizeof(struct UnmarshalJson));
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateUnmarshalJson(const struct UnmarshalJson * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintUnmarshalJson(const struct UnmarshalJson * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateUnmarshalJson(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteUnmarshalJson(struct UnmarshalJson * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Unowned * cJSON_ParseUnowned(const char * s) {
     struct Unowned * x = NULL;
     if (NULL != s) {
@@ -32067,6 +32439,11 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->from = cJSON_GetUnionFromValue(cJSON_GetObjectItemCaseSensitive(j, "from"));
                 if (NULL == x->from) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "from_dict")) {
+                if (!cJSON_IsUnionFromDict(cJSON_GetObjectItemCaseSensitive(j, "from_dict"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->from_dict = cJSON_GetUnionFromDictValue(cJSON_GetObjectItemCaseSensitive(j, "from_dict"));
+                if (NULL == x->from_dict) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "from_json")) {
                 if (!cJSON_IsUnionFromJson(cJSON_GetObjectItemCaseSensitive(j, "from_json"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->from_json = cJSON_GetUnionFromJsonValue(cJSON_GetObjectItemCaseSensitive(j, "from_json"));
@@ -32372,6 +32749,11 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->map_entry = cJSON_GetUnionMapEntryValue(cJSON_GetObjectItemCaseSensitive(j, "MapEntry"));
                 if (NULL == x->map_entry) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "MarshalJSON")) {
+                if (!cJSON_IsUnionMarshalJson(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->marshal_json = cJSON_GetUnionMarshalJsonValue(cJSON_GetObjectItemCaseSensitive(j, "MarshalJSON"));
+                if (NULL == x->marshal_json) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "metadata_property_handling")) {
                 if (!cJSON_IsUnionMetadataPropertyHandling(cJSON_GetObjectItemCaseSensitive(j, "metadata_property_handling"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->metadata_property_handling = cJSON_GetUnionMetadataPropertyHandlingValue(cJSON_GetObjectItemCaseSensitive(j, "metadata_property_handling"));
@@ -32942,6 +33324,11 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->time_zone = cJSON_GetUnionTimeZoneValue(cJSON_GetObjectItemCaseSensitive(j, "TimeZone"));
                 if (NULL == x->time_zone) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "to_dict")) {
+                if (!cJSON_IsUnionToDict(cJSON_GetObjectItemCaseSensitive(j, "to_dict"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->to_dict = cJSON_GetUnionToDictValue(cJSON_GetObjectItemCaseSensitive(j, "to_dict"));
+                if (NULL == x->to_dict) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "to_json")) {
                 if (!cJSON_IsUnionToJson(cJSON_GetObjectItemCaseSensitive(j, "to_json"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->to_json = cJSON_GetUnionToJsonValue(cJSON_GetObjectItemCaseSensitive(j, "to_json"));
@@ -33037,6 +33424,11 @@ struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
                 x->top_level_union = cJSON_GetUnionUnionUnionValue(cJSON_GetObjectItemCaseSensitive(j, "union"));
                 if (NULL == x->top_level_union) { cJSON_DeleteTopLevel(x); return NULL; }
             }
+            if (cJSON_HasObjectItem(j, "UnmarshalJSON")) {
+                if (!cJSON_IsUnionUnmarshalJson(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->unmarshal_json = cJSON_GetUnionUnmarshalJsonValue(cJSON_GetObjectItemCaseSensitive(j, "UnmarshalJSON"));
+                if (NULL == x->unmarshal_json) { cJSON_DeleteTopLevel(x); return NULL; }
+            }
             if (cJSON_HasObjectItem(j, "unowned")) {
                 if (!cJSON_IsUnionUnowned(cJSON_GetObjectItemCaseSensitive(j, "unowned"))) { cJSON_DeleteTopLevel(x); return NULL; }
                 x->unowned = cJSON_GetUnionUnownedValue(cJSON_GetObjectItemCaseSensitive(j, "unowned"));
@@ -33527,6 +33919,9 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->from) {
                 cJSON_AddItemToObject(j, "from", cJSON_CreateUnionFrom(x->from));
             }
+            if (NULL != x->from_dict) {
+                cJSON_AddItemToObject(j, "from_dict", cJSON_CreateUnionFromDict(x->from_dict));
+            }
             if (NULL != x->from_json) {
                 cJSON_AddItemToObject(j, "from_json", cJSON_CreateUnionFromJson(x->from_json));
             }
@@ -33710,6 +34105,9 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->map_entry) {
                 cJSON_AddItemToObject(j, "MapEntry", cJSON_CreateUnionMapEntry(x->map_entry));
             }
+            if (NULL != x->marshal_json) {
+                cJSON_AddItemToObject(j, "MarshalJSON", cJSON_CreateUnionMarshalJson(x->marshal_json));
+            }
             if (NULL != x->metadata_property_handling) {
                 cJSON_AddItemToObject(j, "metadata_property_handling", cJSON_CreateUnionMetadataPropertyHandling(x->metadata_property_handling));
             }
@@ -34052,6 +34450,9 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->time_zone) {
                 cJSON_AddItemToObject(j, "TimeZone", cJSON_CreateUnionTimeZone(x->time_zone));
             }
+            if (NULL != x->to_dict) {
+                cJSON_AddItemToObject(j, "to_dict", cJSON_CreateUnionToDict(x->to_dict));
+            }
             if (NULL != x->to_json) {
                 cJSON_AddItemToObject(j, "to_json", cJSON_CreateUnionToJson(x->to_json));
             }
@@ -34109,6 +34510,9 @@ cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
             if (NULL != x->top_level_union) {
                 cJSON_AddItemToObject(j, "union", cJSON_CreateUnionUnionUnion(x->top_level_union));
             }
+            if (NULL != x->unmarshal_json) {
+                cJSON_AddItemToObject(j, "UnmarshalJSON", cJSON_CreateUnionUnmarshalJson(x->unmarshal_json));
+            }
             if (NULL != x->unowned) {
                 cJSON_AddItemToObject(j, "unowned", cJSON_CreateUnionUnowned(x->unowned));
             }
@@ -34563,6 +34967,9 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->from) {
             cJSON_DeleteUnionFrom(x->from);
         }
+        if (NULL != x->from_dict) {
+            cJSON_DeleteUnionFromDict(x->from_dict);
+        }
         if (NULL != x->from_json) {
             cJSON_DeleteUnionFromJson(x->from_json);
         }
@@ -34746,6 +35153,9 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->map_entry) {
             cJSON_DeleteUnionMapEntry(x->map_entry);
         }
+        if (NULL != x->marshal_json) {
+            cJSON_DeleteUnionMarshalJson(x->marshal_json);
+        }
         if (NULL != x->metadata_property_handling) {
             cJSON_DeleteUnionMetadataPropertyHandling(x->metadata_property_handling);
         }
@@ -35088,6 +35498,9 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->time_zone) {
             cJSON_DeleteUnionTimeZone(x->time_zone);
         }
+        if (NULL != x->to_dict) {
+            cJSON_DeleteUnionToDict(x->to_dict);
+        }
         if (NULL != x->to_json) {
             cJSON_DeleteUnionToJson(x->to_json);
         }
@@ -35145,6 +35558,9 @@ void cJSON_DeleteTopLevel(struct TopLevel * x) {
         if (NULL != x->top_level_union) {
             cJSON_DeleteUnionUnionUnion(x->top_level_union);
         }
+        if (NULL != x->unmarshal_json) {
+            cJSON_DeleteUnionUnmarshalJson(x->unmarshal_json);
+        }
         if (NULL != x->unowned) {
             cJSON_DeleteUnionUnowned(x->unowned);
         }
diff --git a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
index ddaf185..857773c 100644
--- a/base/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
+++ b/head/schema-cjson/test/inputs/schema/keyword-unions.schema/default/TopLevel.h
@@ -840,6 +840,17 @@ struct UnionFrom {
     } value;
 };
 
+struct FromDict {
+};
+
+struct UnionFromDict {
+    int type;
+    union {
+        double number;
+        struct FromDict * from_dict;
+    } value;
+};
+
 struct FromJson {
 };
 
@@ -1456,6 +1467,17 @@ struct UnionMapEntry {
     } value;
 };
 
+struct MarshalJson {
+};
+
+struct UnionMarshalJson {
+    int type;
+    union {
+        double number;
+        struct MarshalJson * marshal_json;
+    } value;
+};
+
 struct MetadataPropertyHandling {
 };
 
@@ -2347,6 +2369,17 @@ struct UnionTimeZone {
     } value;
 };
 
+struct ToDict {
+};
+
+struct UnionToDict {
+    int type;
+    union {
+        double number;
+        struct ToDict * to_dict;
+    } value;
+};
+
 struct ToJson {
 };
 
@@ -3612,6 +3645,17 @@ struct UnionUndefined {
     } value;
 };
 
+struct UnmarshalJson {
+};
+
+struct UnionUnmarshalJson {
+    int type;
+    union {
+        double number;
+        struct UnmarshalJson * unmarshal_json;
+    } value;
+};
+
 struct Unowned {
 };
 
@@ -3889,6 +3933,7 @@ struct TopLevel {
     struct UnionFormatException * format_exception;
     struct UnionFriend * top_level_friend;
     struct UnionFrom * from;
+    struct UnionFromDict * from_dict;
     struct UnionFromJson * from_json;
     struct UnionFunc * func;
     struct UnionFunction * function;
@@ -3950,6 +3995,7 @@ struct TopLevel {
     struct UnionLong * top_level_long;
     struct UnionMap * map;
     struct UnionMapEntry * map_entry;
+    struct UnionMarshalJson * marshal_json;
     struct UnionMetadataPropertyHandling * metadata_property_handling;
     struct UnionModule * top_level_module;
     struct UnionMutable * top_level_mutable;
@@ -4064,6 +4110,7 @@ struct TopLevel {
     struct UnionTimeOnly * time_only;
     struct UnionTimeOnlyConverter * time_only_converter;
     struct UnionTimeZone * time_zone;
+    struct UnionToDict * to_dict;
     struct UnionToJson * to_json;
     struct UnionTopLevel * top_level;
     struct UnionToString * to_string;
@@ -4083,6 +4130,7 @@ struct TopLevel {
     struct UnionUnchecked * unchecked;
     struct UnionUndefined * undefined;
     struct UnionUnionUnion * top_level_union;
+    struct UnionUnmarshalJson * unmarshal_json;
     struct UnionUnowned * unowned;
     struct UnionUnsafe * unsafe;
     struct UnionUnsigned * top_level_unsigned;
@@ -4612,6 +4660,13 @@ void cJSON_DeleteUnionFrom(struct UnionFrom * x);
 struct UnionFrom * cJSON_ParseUnionFrom(const char * s);
 char * cJSON_PrintUnionFrom(const struct UnionFrom * x);
 
+#define cJSON_IsUnionFromDict(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionFromDict * cJSON_GetUnionFromDictValue(const cJSON * j);
+cJSON * cJSON_CreateUnionFromDict(const struct UnionFromDict * x);
+void cJSON_DeleteUnionFromDict(struct UnionFromDict * x);
+struct UnionFromDict * cJSON_ParseUnionFromDict(const char * s);
+char * cJSON_PrintUnionFromDict(const struct UnionFromDict * x);
+
 #define cJSON_IsUnionFromJson(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionFromJson * cJSON_GetUnionFromJsonValue(const cJSON * j);
 cJSON * cJSON_CreateUnionFromJson(const struct UnionFromJson * x);
@@ -5004,6 +5059,13 @@ void cJSON_DeleteUnionMapEntry(struct UnionMapEntry * x);
 struct UnionMapEntry * cJSON_ParseUnionMapEntry(const char * s);
 char * cJSON_PrintUnionMapEntry(const struct UnionMapEntry * x);
 
+#define cJSON_IsUnionMarshalJson(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionMarshalJson * cJSON_GetUnionMarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateUnionMarshalJson(const struct UnionMarshalJson * x);
+void cJSON_DeleteUnionMarshalJson(struct UnionMarshalJson * x);
+struct UnionMarshalJson * cJSON_ParseUnionMarshalJson(const char * s);
+char * cJSON_PrintUnionMarshalJson(const struct UnionMarshalJson * x);
+
 #define cJSON_IsUnionMetadataPropertyHandling(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionMetadataPropertyHandling * cJSON_GetUnionMetadataPropertyHandlingValue(const cJSON * j);
 cJSON * cJSON_CreateUnionMetadataPropertyHandling(const struct UnionMetadataPropertyHandling * x);
@@ -5571,6 +5633,13 @@ void cJSON_DeleteUnionTimeZone(struct UnionTimeZone * x);
 struct UnionTimeZone * cJSON_ParseUnionTimeZone(const char * s);
 char * cJSON_PrintUnionTimeZone(const struct UnionTimeZone * x);
 
+#define cJSON_IsUnionToDict(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionToDict * cJSON_GetUnionToDictValue(const cJSON * j);
+cJSON * cJSON_CreateUnionToDict(const struct UnionToDict * x);
+void cJSON_DeleteUnionToDict(struct UnionToDict * x);
+struct UnionToDict * cJSON_ParseUnionToDict(const char * s);
+char * cJSON_PrintUnionToDict(const struct UnionToDict * x);
+
 #define cJSON_IsUnionToJson(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionToJson * cJSON_GetUnionToJsonValue(const cJSON * j);
 cJSON * cJSON_CreateUnionToJson(const struct UnionToJson * x);
@@ -6376,6 +6445,13 @@ void cJSON_DeleteUnionUndefined(struct UnionUndefined * x);
 struct UnionUndefined * cJSON_ParseUnionUndefined(const char * s);
 char * cJSON_PrintUnionUndefined(const struct UnionUndefined * x);
 
+#define cJSON_IsUnionUnmarshalJson(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
+struct UnionUnmarshalJson * cJSON_GetUnionUnmarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateUnionUnmarshalJson(const struct UnionUnmarshalJson * x);
+void cJSON_DeleteUnionUnmarshalJson(struct UnionUnmarshalJson * x);
+struct UnionUnmarshalJson * cJSON_ParseUnionUnmarshalJson(const char * s);
+char * cJSON_PrintUnionUnmarshalJson(const struct UnionUnmarshalJson * x);
+
 #define cJSON_IsUnionUnowned(j) (cJSON_IsNumber(j) || cJSON_IsObject(j))
 struct UnionUnowned * cJSON_GetUnionUnownedValue(const cJSON * j);
 cJSON * cJSON_CreateUnionUnowned(const struct UnionUnowned * x);
@@ -6906,6 +6982,12 @@ cJSON * cJSON_CreateFrom(const struct From * x);
 char * cJSON_PrintFrom(const struct From * x);
 void cJSON_DeleteFrom(struct From * x);
 
+struct FromDict * cJSON_ParseFromDict(const char * s);
+struct FromDict * cJSON_GetFromDictValue(const cJSON * j);
+cJSON * cJSON_CreateFromDict(const struct FromDict * x);
+char * cJSON_PrintFromDict(const struct FromDict * x);
+void cJSON_DeleteFromDict(struct FromDict * x);
+
 struct FromJson * cJSON_ParseFromJson(const char * s);
 struct FromJson * cJSON_GetFromJsonValue(const cJSON * j);
 cJSON * cJSON_CreateFromJson(const struct FromJson * x);
@@ -7242,6 +7324,12 @@ cJSON * cJSON_CreateMapEntry(const struct MapEntry * x);
 char * cJSON_PrintMapEntry(const struct MapEntry * x);
 void cJSON_DeleteMapEntry(struct MapEntry * x);
 
+struct MarshalJson * cJSON_ParseMarshalJson(const char * s);
+struct MarshalJson * cJSON_GetMarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateMarshalJson(const struct MarshalJson * x);
+char * cJSON_PrintMarshalJson(const struct MarshalJson * x);
+void cJSON_DeleteMarshalJson(struct MarshalJson * x);
+
 struct MetadataPropertyHandling * cJSON_ParseMetadataPropertyHandling(const char * s);
 struct MetadataPropertyHandling * cJSON_GetMetadataPropertyHandlingValue(const cJSON * j);
 cJSON * cJSON_CreateMetadataPropertyHandling(const struct MetadataPropertyHandling * x);
@@ -7728,6 +7816,12 @@ cJSON * cJSON_CreateTimeZone(const struct TimeZone * x);
 char * cJSON_PrintTimeZone(const struct TimeZone * x);
 void cJSON_DeleteTimeZone(struct TimeZone * x);
 
+struct ToDict * cJSON_ParseToDict(const char * s);
+struct ToDict * cJSON_GetToDictValue(const cJSON * j);
+cJSON * cJSON_CreateToDict(const struct ToDict * x);
+char * cJSON_PrintToDict(const struct ToDict * x);
+void cJSON_DeleteToDict(struct ToDict * x);
+
 struct ToJson * cJSON_ParseToJson(const char * s);
 struct ToJson * cJSON_GetToJsonValue(const cJSON * j);
 cJSON * cJSON_CreateToJson(const struct ToJson * x);
@@ -8418,6 +8512,12 @@ cJSON * cJSON_CreateUndefined(const struct Undefined * x);
 char * cJSON_PrintUndefined(const struct Undefined * x);
 void cJSON_DeleteUndefined(struct Undefined * x);
 
+struct UnmarshalJson * cJSON_ParseUnmarshalJson(const char * s);
+struct UnmarshalJson * cJSON_GetUnmarshalJsonValue(const cJSON * j);
+cJSON * cJSON_CreateUnmarshalJson(const struct UnmarshalJson * x);
+char * cJSON_PrintUnmarshalJson(const struct UnmarshalJson * x);
+void cJSON_DeleteUnmarshalJson(struct UnmarshalJson * x);
+
 struct Unowned * cJSON_ParseUnowned(const char * s);
 struct Unowned * cJSON_GetUnownedValue(const cJSON * j);
 cJSON * cJSON_CreateUnowned(const struct Unowned * x);
diff --git a/base/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
index 9990771..46f6f4c 100644
--- a/base/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
+++ b/head/schema-cplusplus/test/inputs/schema/keyword-enum.schema/default/quicktype.hpp
@@ -89,7 +89,7 @@ namespace quicktype {
     }
     #endif
 
-    enum class Enum : int { EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, ENUM_NULL, PURPLE_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY };
+    enum class Enum : int { EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, ENUM_NULL, PURPLE_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY };
 
     class TopLevel {
         public:
@@ -247,6 +247,7 @@ namespace quicktype {
             {"FormatException", Enum::FORMAT_EXCEPTION},
             {"friend", Enum::FRIEND},
             {"from", Enum::FROM},
+            {"from_dict", Enum::FROM_DICT},
             {"from_json", Enum::FROM_JSON},
             {"func", Enum::FUNC},
             {"function", Enum::FUNCTION},
@@ -306,6 +307,7 @@ namespace quicktype {
             {"lock", Enum::LOCK},
             {"long", Enum::LONG},
             {"map", Enum::MAP},
+            {"MarshalJSON", Enum::MARSHAL_JSON},
             {"MapEntry", Enum::MAP_ENTRY},
             {"metadata_property_handling", Enum::METADATA_PROPERTY_HANDLING},
             {"module", Enum::MODULE},
@@ -425,6 +427,7 @@ namespace quicktype {
             {"to_json", Enum::TO_JSON},
             {"top_level", Enum::TOP_LEVEL},
             {"toString", Enum::TO_STRING},
+            {"to_dict", Enum::TO_DICT},
             {"transient", Enum::TRANSIENT},
             {"True", Enum::TRUE},
             {"true", Enum::ENUM_TRUE},
@@ -441,6 +444,7 @@ namespace quicktype {
             {"unchecked", Enum::UNCHECKED},
             {"undefined", Enum::UNDEFINED},
             {"union", Enum::UNION},
+            {"UnmarshalJSON", Enum::UNMARSHAL_JSON},
             {"UseSerializers", Enum::USE_SERIALIZERS},
             {"unowned", Enum::UNOWNED},
             {"unsafe", Enum::UNSAFE},
@@ -596,6 +600,7 @@ namespace quicktype {
             case Enum::FORMAT_EXCEPTION: j = "FormatException"; break;
             case Enum::FRIEND: j = "friend"; break;
             case Enum::FROM: j = "from"; break;
+            case Enum::FROM_DICT: j = "from_dict"; break;
             case Enum::FROM_JSON: j = "from_json"; break;
             case Enum::FUNC: j = "func"; break;
             case Enum::FUNCTION: j = "function"; break;
@@ -655,6 +660,7 @@ namespace quicktype {
             case Enum::LOCK: j = "lock"; break;
             case Enum::LONG: j = "long"; break;
             case Enum::MAP: j = "map"; break;
+            case Enum::MARSHAL_JSON: j = "MarshalJSON"; break;
             case Enum::MAP_ENTRY: j = "MapEntry"; break;
             case Enum::METADATA_PROPERTY_HANDLING: j = "metadata_property_handling"; break;
             case Enum::MODULE: j = "module"; break;
@@ -774,6 +780,7 @@ namespace quicktype {
             case Enum::TO_JSON: j = "to_json"; break;
             case Enum::TOP_LEVEL: j = "top_level"; break;
             case Enum::TO_STRING: j = "toString"; break;
+            case Enum::TO_DICT: j = "to_dict"; break;
             case Enum::TRANSIENT: j = "transient"; break;
             case Enum::TRUE: j = "True"; break;
             case Enum::ENUM_TRUE: j = "true"; break;
@@ -790,6 +797,7 @@ namespace quicktype {
             case Enum::UNCHECKED: j = "unchecked"; break;
             case Enum::UNDEFINED: j = "undefined"; break;
             case Enum::UNION: j = "union"; break;
+            case Enum::UNMARSHAL_JSON: j = "UnmarshalJSON"; break;
             case Enum::USE_SERIALIZERS: j = "UseSerializers"; break;
             case Enum::UNOWNED: j = "unowned"; break;
             case Enum::UNSAFE: j = "unsafe"; break;
diff --git a/base/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
index 6da64bd..6b2af6f 100644
--- a/base/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
+++ b/head/schema-cplusplus/test/inputs/schema/keyword-unions.schema/default/quicktype.hpp
@@ -953,6 +953,18 @@ namespace quicktype {
 
     using UnionFrom = std::variant<From, double>;
 
+    class FromDict {
+        public:
+        FromDict() = default;
+        virtual ~FromDict() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionFromDict = std::variant<FromDict, double>;
+
     class FromJson {
         public:
         FromJson() = default;
@@ -1625,6 +1637,18 @@ namespace quicktype {
 
     using UnionMapEntry = std::variant<MapEntry, double>;
 
+    class MarshalJson {
+        public:
+        MarshalJson() = default;
+        virtual ~MarshalJson() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionMarshalJson = std::variant<MarshalJson, double>;
+
     class MetadataPropertyHandling {
         public:
         MetadataPropertyHandling() = default;
@@ -2609,6 +2633,18 @@ namespace quicktype {
 
     using UnionTimeZone = std::variant<TimeZone, double>;
 
+    class ToDict {
+        public:
+        ToDict() = default;
+        virtual ~ToDict() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionToDict = std::variant<ToDict, double>;
+
     class ToJson {
         public:
         ToJson() = default;
@@ -3977,6 +4013,18 @@ namespace quicktype {
 
     using UnionUndefined = std::variant<Undefined, double>;
 
+    class UnmarshalJson {
+        public:
+        UnmarshalJson() = default;
+        virtual ~UnmarshalJson() = default;
+
+        private:
+
+        public:
+    };
+
+    using UnionUnmarshalJson = std::variant<UnmarshalJson, double>;
+
     class Unowned {
         public:
         Unowned() = default;
@@ -4273,6 +4321,7 @@ namespace quicktype {
         std::optional<UnionFormatException> format_exception;
         std::optional<UnionFriend> top_level_friend;
         std::optional<UnionFrom> from;
+        std::optional<UnionFromDict> from_dict;
         std::optional<UnionFromJson> from_json;
         std::optional<UnionFunc> func;
         std::optional<UnionFunction> function;
@@ -4334,6 +4383,7 @@ namespace quicktype {
         std::optional<UnionLong> top_level_long;
         std::optional<UnionMap> map;
         std::optional<UnionMapEntry> map_entry;
+        std::optional<UnionMarshalJson> marshal_json;
         std::optional<UnionMetadataPropertyHandling> metadata_property_handling;
         std::optional<UnionModule> top_level_module;
         std::optional<UnionMutable> top_level_mutable;
@@ -4448,6 +4498,7 @@ namespace quicktype {
         std::optional<UnionTimeOnly> time_only;
         std::optional<UnionTimeOnlyConverter> time_only_converter;
         std::optional<UnionTimeZone> time_zone;
+        std::optional<UnionToDict> to_dict;
         std::optional<UnionToJson> to_json;
         std::optional<UnionTopLevel> top_level;
         std::optional<UnionToString> to_string;
@@ -4467,6 +4518,7 @@ namespace quicktype {
         std::optional<UnionUnchecked> unchecked;
         std::optional<UnionUndefined> undefined;
         std::optional<UnionUnionUnion> top_level_union;
+        std::optional<UnionUnmarshalJson> unmarshal_json;
         std::optional<UnionUnowned> unowned;
         std::optional<UnionUnsafe> unsafe;
         std::optional<UnionUnsigned> top_level_unsigned;
@@ -4980,6 +5032,10 @@ namespace quicktype {
         std::optional<UnionFrom> & get_mutable_from() { return from; }
         void set_from(const std::optional<UnionFrom> & value) { this->from = value; }
 
+        const std::optional<UnionFromDict> & get_from_dict() const { return from_dict; }
+        std::optional<UnionFromDict> & get_mutable_from_dict() { return from_dict; }
+        void set_from_dict(const std::optional<UnionFromDict> & value) { this->from_dict = value; }
+
         const std::optional<UnionFromJson> & get_from_json() const { return from_json; }
         std::optional<UnionFromJson> & get_mutable_from_json() { return from_json; }
         void set_from_json(const std::optional<UnionFromJson> & value) { this->from_json = value; }
@@ -5224,6 +5280,10 @@ namespace quicktype {
         std::optional<UnionMapEntry> & get_mutable_map_entry() { return map_entry; }
         void set_map_entry(const std::optional<UnionMapEntry> & value) { this->map_entry = value; }
 
+        const std::optional<UnionMarshalJson> & get_marshal_json() const { return marshal_json; }
+        std::optional<UnionMarshalJson> & get_mutable_marshal_json() { return marshal_json; }
+        void set_marshal_json(const std::optional<UnionMarshalJson> & value) { this->marshal_json = value; }
+
         const std::optional<UnionMetadataPropertyHandling> & get_metadata_property_handling() const { return metadata_property_handling; }
         std::optional<UnionMetadataPropertyHandling> & get_mutable_metadata_property_handling() { return metadata_property_handling; }
         void set_metadata_property_handling(const std::optional<UnionMetadataPropertyHandling> & value) { this->metadata_property_handling = value; }
@@ -5680,6 +5740,10 @@ namespace quicktype {
         std::optional<UnionTimeZone> & get_mutable_time_zone() { return time_zone; }
         void set_time_zone(const std::optional<UnionTimeZone> & value) { this->time_zone = value; }
 
+        const std::optional<UnionToDict> & get_to_dict() const { return to_dict; }
+        std::optional<UnionToDict> & get_mutable_to_dict() { return to_dict; }
+        void set_to_dict(const std::optional<UnionToDict> & value) { this->to_dict = value; }
+
         const std::optional<UnionToJson> & get_to_json() const { return to_json; }
         std::optional<UnionToJson> & get_mutable_to_json() { return to_json; }
         void set_to_json(const std::optional<UnionToJson> & value) { this->to_json = value; }
@@ -5756,6 +5820,10 @@ namespace quicktype {
         std::optional<UnionUnionUnion> & get_mutable_top_level_union() { return top_level_union; }
         void set_top_level_union(const std::optional<UnionUnionUnion> & value) { this->top_level_union = value; }
 
+        const std::optional<UnionUnmarshalJson> & get_unmarshal_json() const { return unmarshal_json; }
+        std::optional<UnionUnmarshalJson> & get_mutable_unmarshal_json() { return unmarshal_json; }
+        void set_unmarshal_json(const std::optional<UnionUnmarshalJson> & value) { this->unmarshal_json = value; }
+
         const std::optional<UnionUnowned> & get_unowned() const { return unowned; }
         std::optional<UnionUnowned> & get_mutable_unowned() { return unowned; }
         void set_unowned(const std::optional<UnionUnowned> & value) { this->unowned = value; }
@@ -6067,6 +6135,9 @@ void to_json(json & j, const FormatException & x);
 void from_json(const json & j, From & x);
 void to_json(json & j, const From & x);
 
+void from_json(const json & j, FromDict & x);
+void to_json(json & j, const FromDict & x);
+
 void from_json(const json & j, FromJson & x);
 void to_json(json & j, const FromJson & x);
 
@@ -6235,6 +6306,9 @@ void to_json(json & j, const Map & x);
 void from_json(const json & j, MapEntry & x);
 void to_json(json & j, const MapEntry & x);
 
+void from_json(const json & j, MarshalJson & x);
+void to_json(json & j, const MarshalJson & x);
+
 void from_json(const json & j, MetadataPropertyHandling & x);
 void to_json(json & j, const MetadataPropertyHandling & x);
 
@@ -6481,6 +6555,9 @@ void to_json(json & j, const TimeOnlyConverter & x);
 void from_json(const json & j, TimeZone & x);
 void to_json(json & j, const TimeZone & x);
 
+void from_json(const json & j, ToDict & x);
+void to_json(json & j, const ToDict & x);
+
 void from_json(const json & j, ToJson & x);
 void to_json(json & j, const ToJson & x);
 
@@ -6823,6 +6900,9 @@ void to_json(json & j, const Unchecked & x);
 void from_json(const json & j, Undefined & x);
 void to_json(json & j, const Undefined & x);
 
+void from_json(const json & j, UnmarshalJson & x);
+void to_json(json & j, const UnmarshalJson & x);
+
 void from_json(const json & j, Unowned & x);
 void to_json(json & j, const Unowned & x);
 
@@ -7301,6 +7381,12 @@ struct adl_serializer<std::variant<quicktype::From, double>> {
     static void to_json(json & j, const std::variant<quicktype::From, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::FromDict, double>> {
+    static void from_json(const json & j, std::variant<quicktype::FromDict, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::FromDict, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::FromJson, double>> {
     static void from_json(const json & j, std::variant<quicktype::FromJson, double> & x);
@@ -7637,6 +7723,12 @@ struct adl_serializer<std::variant<quicktype::MapEntry, double>> {
     static void to_json(json & j, const std::variant<quicktype::MapEntry, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::MarshalJson, double>> {
+    static void from_json(const json & j, std::variant<quicktype::MarshalJson, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::MarshalJson, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::MetadataPropertyHandling, double>> {
     static void from_json(const json & j, std::variant<quicktype::MetadataPropertyHandling, double> & x);
@@ -8129,6 +8221,12 @@ struct adl_serializer<std::variant<quicktype::TimeZone, double>> {
     static void to_json(json & j, const std::variant<quicktype::TimeZone, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::ToDict, double>> {
+    static void from_json(const json & j, std::variant<quicktype::ToDict, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::ToDict, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::ToJson, double>> {
     static void from_json(const json & j, std::variant<quicktype::ToJson, double> & x);
@@ -8813,6 +8911,12 @@ struct adl_serializer<std::variant<quicktype::Undefined, double>> {
     static void to_json(json & j, const std::variant<quicktype::Undefined, double> & x);
 };
 
+template <>
+struct adl_serializer<std::variant<quicktype::UnmarshalJson, double>> {
+    static void from_json(const json & j, std::variant<quicktype::UnmarshalJson, double> & x);
+    static void to_json(json & j, const std::variant<quicktype::UnmarshalJson, double> & x);
+};
+
 template <>
 struct adl_serializer<std::variant<quicktype::Unowned, double>> {
     static void from_json(const json & j, std::variant<quicktype::Unowned, double> & x);
@@ -9690,6 +9794,17 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, FromDict& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const FromDict & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, FromJson& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -10306,6 +10421,17 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, MarshalJson& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const MarshalJson & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, MetadataPropertyHandling& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -11208,6 +11334,17 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, ToDict& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const ToDict & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, ToJson& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -12462,6 +12599,17 @@ namespace quicktype {
         (void)x;
     }
 
+    inline void from_json(const json & j, UnmarshalJson& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        (void)j;
+        (void)x;
+    }
+
+    inline void to_json(json & j, const UnmarshalJson & x) {
+        j = json::object();
+        (void)x;
+    }
+
     inline void from_json(const json & j, Unowned& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         (void)j;
@@ -12862,6 +13010,8 @@ namespace quicktype {
         x.set_top_level_friend(get_stack_optional<std::variant<Friend, double>>(j, "friend"));
         if (j.find("from") != j.end() && j.at("from").is_null()) throw std::runtime_error("Unexpected null");
         x.set_from(get_stack_optional<std::variant<From, double>>(j, "from"));
+        if (j.find("from_dict") != j.end() && j.at("from_dict").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_from_dict(get_stack_optional<std::variant<FromDict, double>>(j, "from_dict"));
         if (j.find("from_json") != j.end() && j.at("from_json").is_null()) throw std::runtime_error("Unexpected null");
         x.set_from_json(get_stack_optional<std::variant<FromJson, double>>(j, "from_json"));
         if (j.find("func") != j.end() && j.at("func").is_null()) throw std::runtime_error("Unexpected null");
@@ -12984,6 +13134,8 @@ namespace quicktype {
         x.set_map(get_stack_optional<std::variant<Map, double>>(j, "map"));
         if (j.find("MapEntry") != j.end() && j.at("MapEntry").is_null()) throw std::runtime_error("Unexpected null");
         x.set_map_entry(get_stack_optional<std::variant<MapEntry, double>>(j, "MapEntry"));
+        if (j.find("MarshalJSON") != j.end() && j.at("MarshalJSON").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_marshal_json(get_stack_optional<std::variant<MarshalJson, double>>(j, "MarshalJSON"));
         if (j.find("metadata_property_handling") != j.end() && j.at("metadata_property_handling").is_null()) throw std::runtime_error("Unexpected null");
         x.set_metadata_property_handling(get_stack_optional<std::variant<MetadataPropertyHandling, double>>(j, "metadata_property_handling"));
         if (j.find("module") != j.end() && j.at("module").is_null()) throw std::runtime_error("Unexpected null");
@@ -13212,6 +13364,8 @@ namespace quicktype {
         x.set_time_only_converter(get_stack_optional<std::variant<TimeOnlyConverter, double>>(j, "TimeOnlyConverter"));
         if (j.find("TimeZone") != j.end() && j.at("TimeZone").is_null()) throw std::runtime_error("Unexpected null");
         x.set_time_zone(get_stack_optional<std::variant<TimeZone, double>>(j, "TimeZone"));
+        if (j.find("to_dict") != j.end() && j.at("to_dict").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_to_dict(get_stack_optional<std::variant<ToDict, double>>(j, "to_dict"));
         if (j.find("to_json") != j.end() && j.at("to_json").is_null()) throw std::runtime_error("Unexpected null");
         x.set_to_json(get_stack_optional<std::variant<ToJson, double>>(j, "to_json"));
         if (j.find("top_level") != j.end() && j.at("top_level").is_null()) throw std::runtime_error("Unexpected null");
@@ -13250,6 +13404,8 @@ namespace quicktype {
         x.set_undefined(get_stack_optional<std::variant<Undefined, double>>(j, "undefined"));
         if (j.find("union") != j.end() && j.at("union").is_null()) throw std::runtime_error("Unexpected null");
         x.set_top_level_union(get_stack_optional<std::variant<Union, double>>(j, "union"));
+        if (j.find("UnmarshalJSON") != j.end() && j.at("UnmarshalJSON").is_null()) throw std::runtime_error("Unexpected null");
+        x.set_unmarshal_json(get_stack_optional<std::variant<UnmarshalJson, double>>(j, "UnmarshalJSON"));
         if (j.find("unowned") != j.end() && j.at("unowned").is_null()) throw std::runtime_error("Unexpected null");
         x.set_unowned(get_stack_optional<std::variant<Unowned, double>>(j, "unowned"));
         if (j.find("unsafe") != j.end() && j.at("unsafe").is_null()) throw std::runtime_error("Unexpected null");
@@ -13422,6 +13578,7 @@ namespace quicktype {
         j["FormatException"] = x.get_format_exception();
         j["friend"] = x.get_top_level_friend();
         j["from"] = x.get_from();
+        j["from_dict"] = x.get_from_dict();
         j["from_json"] = x.get_from_json();
         j["func"] = x.get_func();
         j["function"] = x.get_function();
@@ -13483,6 +13640,7 @@ namespace quicktype {
         j["long"] = x.get_top_level_long();
         j["map"] = x.get_map();
         j["MapEntry"] = x.get_map_entry();
+        j["MarshalJSON"] = x.get_marshal_json();
         j["metadata_property_handling"] = x.get_metadata_property_handling();
         j["module"] = x.get_top_level_module();
         j["mutable"] = x.get_top_level_mutable();
@@ -13597,6 +13755,7 @@ namespace quicktype {
         j["TimeOnly"] = x.get_time_only();
         j["TimeOnlyConverter"] = x.get_time_only_converter();
         j["TimeZone"] = x.get_time_zone();
+        j["to_dict"] = x.get_to_dict();
         j["to_json"] = x.get_to_json();
         j["top_level"] = x.get_top_level();
         j["toString"] = x.get_to_string();
@@ -13616,6 +13775,7 @@ namespace quicktype {
         j["unchecked"] = x.get_unchecked();
         j["undefined"] = x.get_undefined();
         j["union"] = x.get_top_level_union();
+        j["UnmarshalJSON"] = x.get_unmarshal_json();
         j["unowned"] = x.get_unowned();
         j["unsafe"] = x.get_unsafe();
         j["unsigned"] = x.get_top_level_unsigned();
@@ -15082,6 +15242,26 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::FromDict, double>>::from_json(const json & j, std::variant<quicktype::FromDict, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::FromDict>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::FromDict, double>>::to_json(json & j, const std::variant<quicktype::FromDict, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::FromDict>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::FromJson, double>>::from_json(const json & j, std::variant<quicktype::FromJson, double> & x) {
         if (j.is_number())
             x = j.get<double>();
@@ -16202,6 +16382,26 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::MarshalJson, double>>::from_json(const json & j, std::variant<quicktype::MarshalJson, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::MarshalJson>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::MarshalJson, double>>::to_json(json & j, const std::variant<quicktype::MarshalJson, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::MarshalJson>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::MetadataPropertyHandling, double>>::from_json(const json & j, std::variant<quicktype::MetadataPropertyHandling, double> & x) {
         if (j.is_number())
             x = j.get<double>();
@@ -17842,6 +18042,26 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::ToDict, double>>::from_json(const json & j, std::variant<quicktype::ToDict, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::ToDict>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::ToDict, double>>::to_json(json & j, const std::variant<quicktype::ToDict, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::ToDict>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::ToJson, double>>::from_json(const json & j, std::variant<quicktype::ToJson, double> & x) {
         if (j.is_number())
             x = j.get<double>();
@@ -20122,6 +20342,26 @@ namespace nlohmann {
         }
     }
 
+    inline void adl_serializer<std::variant<quicktype::UnmarshalJson, double>>::from_json(const json & j, std::variant<quicktype::UnmarshalJson, double> & x) {
+        if (j.is_number())
+            x = j.get<double>();
+        else if (j.is_object())
+            x = j.get<quicktype::UnmarshalJson>();
+        else throw std::runtime_error("Could not deserialise!");
+    }
+
+    inline void adl_serializer<std::variant<quicktype::UnmarshalJson, double>>::to_json(json & j, const std::variant<quicktype::UnmarshalJson, double> & x) {
+        switch (x.index()) {
+            case 0:
+                j = std::get<quicktype::UnmarshalJson>(x);
+                break;
+            case 1:
+                j = std::get<double>(x);
+                break;
+            default: throw std::runtime_error("Input JSON does not conform to schema!");
+        }
+    }
+
     inline void adl_serializer<std::variant<quicktype::Unowned, double>>::from_json(const json & j, std::variant<quicktype::Unowned, double> & x) {
         if (j.is_number())
             x = j.get<double>();
diff --git a/base/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr b/head/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
index 23b7f5d..3ff1e0c 100644
--- a/base/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
+++ b/head/schema-crystal/test/inputs/schema/keyword-unions.schema/default/TopLevel.cr
@@ -287,6 +287,8 @@ class TopLevel
 
   property from : UnionFrom?
 
+  property from_dict : UnionFromDict?
+
   property from_json : UnionFromJson?
 
   property func : UnionFunc?
@@ -431,6 +433,9 @@ class TopLevel
   @[JSON::Field(key: "MapEntry")]
   property map_entry : UnionMapEntry?
 
+  @[JSON::Field(key: "MarshalJSON")]
+  property marshal_json : UnionMarshalJson?
+
   property metadata_property_handling : UnionMetadataPropertyHandling?
 
   @[JSON::Field(key: "module")]
@@ -703,6 +708,8 @@ class TopLevel
   @[JSON::Field(key: "TimeZone")]
   property time_zone : UnionTimeZone?
 
+  property to_dict : UnionToDict?
+
   @[JSON::Field(key: "to_json")]
   property top_level_to_json : UnionToJson?
 
@@ -749,6 +756,9 @@ class TopLevel
   @[JSON::Field(key: "union")]
   property top_level_union : UnionUnionUnion?
 
+  @[JSON::Field(key: "UnmarshalJSON")]
+  property unmarshal_json : UnionUnmarshalJson?
+
   property unowned : UnionUnowned?
 
   property unsafe : UnionUnsafe?
@@ -1320,6 +1330,11 @@ class From
 
 end
 
+class FromDict
+  include JSON::Serializable
+
+end
+
 class FromJson
   include JSON::Serializable
 
@@ -1620,6 +1635,11 @@ class MapEntry
 
 end
 
+class MarshalJson
+  include JSON::Serializable
+
+end
+
 class MetadataPropertyHandling
   include JSON::Serializable
 
@@ -2130,6 +2150,11 @@ class TimeZone
 
 end
 
+class ToDict
+  include JSON::Serializable
+
+end
+
 class ToString
   include JSON::Serializable
 
@@ -2395,6 +2420,11 @@ class Undefined
 
 end
 
+class UnmarshalJson
+  include JSON::Serializable
+
+end
+
 class Unowned
   include JSON::Serializable
 
@@ -2701,6 +2731,8 @@ alias UnionFriend = Float64 | Friend
 
 alias UnionFrom = Float64 | From
 
+alias UnionFromDict = Float64 | FromDict
+
 alias UnionFromJson = Float64 | FromJson
 
 alias UnionFunc = Float64 | Func
@@ -2821,6 +2853,8 @@ alias UnionMap = Float64 | Map
 
 alias UnionMapEntry = Float64 | MapEntry
 
+alias UnionMarshalJson = Float64 | MarshalJson
+
 alias UnionMetadataPropertyHandling = Float64 | MetadataPropertyHandling
 
 alias UnionMutable = Float64 | Mutable
@@ -3025,6 +3059,8 @@ alias UnionTimeOnlyConverter = Float64 | TimeOnlyConverter
 
 alias UnionTimeZone = Float64 | TimeZone
 
+alias UnionToDict = Float64 | ToDict
+
 alias UnionToString = Float64 | ToString
 
 alias UnionTopLevel = Float64 | TopLevelClass
@@ -3131,6 +3167,8 @@ alias UnionUnchecked = Float64 | Unchecked
 
 alias UnionUndefined = Float64 | Undefined
 
+alias UnionUnmarshalJson = Float64 | UnmarshalJson
+
 alias UnionUnowned = Float64 | Unowned
 
 alias UnionUnsafe = Float64 | Unsafe
diff --git a/base/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index 0c15d57..a6ab54c 100644
--- a/base/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -29,7 +29,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial class TopLevel
     {
@@ -307,6 +307,8 @@ namespace QuickType
                     return Enum.Friend;
                 case "from":
                     return Enum.From;
+                case "from_dict":
+                    return Enum.FromDict;
                 case "from_json":
                     return Enum.FromJson;
                 case "func":
@@ -425,6 +427,8 @@ namespace QuickType
                     return Enum.Long;
                 case "map":
                     return Enum.Map;
+                case "MarshalJSON":
+                    return Enum.MarshalJson;
                 case "MapEntry":
                     return Enum.MapEntry;
                 case "metadata_property_handling":
@@ -663,6 +667,8 @@ namespace QuickType
                     return Enum.TopLevel;
                 case "toString":
                     return Enum.ToString;
+                case "to_dict":
+                    return Enum.ToDict;
                 case "transient":
                     return Enum.Transient;
                 case "True":
@@ -695,6 +701,8 @@ namespace QuickType
                     return Enum.Undefined;
                 case "union":
                     return Enum.Union;
+                case "UnmarshalJSON":
+                    return Enum.UnmarshalJson;
                 case "UseSerializers":
                     return Enum.UseSerializers;
                 case "unowned":
@@ -1120,6 +1128,9 @@ namespace QuickType
                 case Enum.From:
                     serializer.Serialize(writer, "from");
                     return;
+                case Enum.FromDict:
+                    serializer.Serialize(writer, "from_dict");
+                    return;
                 case Enum.FromJson:
                     serializer.Serialize(writer, "from_json");
                     return;
@@ -1297,6 +1308,9 @@ namespace QuickType
                 case Enum.Map:
                     serializer.Serialize(writer, "map");
                     return;
+                case Enum.MarshalJson:
+                    serializer.Serialize(writer, "MarshalJSON");
+                    return;
                 case Enum.MapEntry:
                     serializer.Serialize(writer, "MapEntry");
                     return;
@@ -1654,6 +1668,9 @@ namespace QuickType
                 case Enum.ToString:
                     serializer.Serialize(writer, "toString");
                     return;
+                case Enum.ToDict:
+                    serializer.Serialize(writer, "to_dict");
+                    return;
                 case Enum.Transient:
                     serializer.Serialize(writer, "transient");
                     return;
@@ -1702,6 +1719,9 @@ namespace QuickType
                 case Enum.Union:
                     serializer.Serialize(writer, "union");
                     return;
+                case Enum.UnmarshalJson:
+                    serializer.Serialize(writer, "UnmarshalJSON");
+                    return;
                 case Enum.UseSerializers:
                     serializer.Serialize(writer, "UseSerializers");
                     return;
diff --git a/base/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index 4953ce9..f0d6542 100644
--- a/base/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -391,6 +391,9 @@ namespace QuickType
         [JsonProperty("from", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionFrom? From { get; set; }
 
+        [JsonProperty("from_dict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFromDict? FromDict { get; set; }
+
         [JsonProperty("from_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionFromJson? TopLevelFromJson { get; set; }
 
@@ -574,6 +577,9 @@ namespace QuickType
         [JsonProperty("MapEntry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionMapEntry? MapEntry { get; set; }
 
+        [JsonProperty("MarshalJSON", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMarshalJson? MarshalJson { get; set; }
+
         [JsonProperty("metadata_property_handling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionMetadataPropertyHandling? MetadataPropertyHandling { get; set; }
 
@@ -916,6 +922,9 @@ namespace QuickType
         [JsonProperty("TimeZone", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionTimeZone? TimeZone { get; set; }
 
+        [JsonProperty("to_dict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionToDict? ToDict { get; set; }
+
         [JsonProperty("to_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionToJson? TopLevelToJson { get; set; }
 
@@ -973,6 +982,9 @@ namespace QuickType
         [JsonProperty("union", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionUnionUnion? Union { get; set; }
 
+        [JsonProperty("UnmarshalJSON", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnmarshalJson? UnmarshalJson { get; set; }
+
         [JsonProperty("unowned", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionUnowned? Unowned { get; set; }
 
@@ -1503,6 +1515,10 @@ namespace QuickType
     {
     }
 
+    public partial class FromDict
+    {
+    }
+
     public partial class Func
     {
     }
@@ -1747,6 +1763,10 @@ namespace QuickType
     {
     }
 
+    public partial class MarshalJson
+    {
+    }
+
     public partial class MetadataPropertyHandlingClass
     {
     }
@@ -2187,6 +2207,10 @@ namespace QuickType
     {
     }
 
+    public partial class ToDict
+    {
+    }
+
     public partial class AnyClass
     {
     }
@@ -2303,6 +2327,10 @@ namespace QuickType
     {
     }
 
+    public partial class UnmarshalJson
+    {
+    }
+
     public partial class Unowned
     {
     }
@@ -3430,6 +3458,15 @@ namespace QuickType
         public static implicit operator UnionFrom(From From) => new UnionFrom { From = From };
     }
 
+    public partial struct UnionFromDict
+    {
+        public double? Double;
+        public FromDict? FromDict;
+
+        public static implicit operator UnionFromDict(double Double) => new UnionFromDict { Double = Double };
+        public static implicit operator UnionFromDict(FromDict FromDict) => new UnionFromDict { FromDict = FromDict };
+    }
+
     public partial struct UnionFunc
     {
         public double? Double;
@@ -3979,6 +4016,15 @@ namespace QuickType
         public static implicit operator UnionMapEntry(MapEntry MapEntry) => new UnionMapEntry { MapEntry = MapEntry };
     }
 
+    public partial struct UnionMarshalJson
+    {
+        public double? Double;
+        public MarshalJson? MarshalJson;
+
+        public static implicit operator UnionMarshalJson(double Double) => new UnionMarshalJson { Double = Double };
+        public static implicit operator UnionMarshalJson(MarshalJson MarshalJson) => new UnionMarshalJson { MarshalJson = MarshalJson };
+    }
+
     public partial struct UnionMetadataPropertyHandling
     {
         public double? Double;
@@ -4969,6 +5015,15 @@ namespace QuickType
         public static implicit operator UnionTimeZone(TimeZone TimeZone) => new UnionTimeZone { TimeZone = TimeZone };
     }
 
+    public partial struct UnionToDict
+    {
+        public double? Double;
+        public ToDict? ToDict;
+
+        public static implicit operator UnionToDict(double Double) => new UnionToDict { Double = Double };
+        public static implicit operator UnionToDict(ToDict ToDict) => new UnionToDict { ToDict = ToDict };
+    }
+
     public partial struct UnionAnyUnion
     {
         public AnyClass? AnyClass;
@@ -5230,6 +5285,15 @@ namespace QuickType
         public static implicit operator UnionUnionUnion(Union Union) => new UnionUnionUnion { Union = Union };
     }
 
+    public partial struct UnionUnmarshalJson
+    {
+        public double? Double;
+        public UnmarshalJson? UnmarshalJson;
+
+        public static implicit operator UnionUnmarshalJson(double Double) => new UnionUnmarshalJson { Double = Double };
+        public static implicit operator UnionUnmarshalJson(UnmarshalJson UnmarshalJson) => new UnionUnmarshalJson { UnmarshalJson = UnmarshalJson };
+    }
+
     public partial struct UnionUnowned
     {
         public double? Double;
@@ -5493,6 +5557,7 @@ namespace QuickType
                 UnionKSerializerConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
+                UnionMarshalJsonConverter.Singleton,
                 UnionNoConverter.Singleton,
                 UnionNsErrorConverter.Singleton,
                 UnionNsObjectConverter.Singleton,
@@ -5520,6 +5585,7 @@ namespace QuickType
                 UnionTrueConverter.Singleton,
                 UnionTypeConverter.Singleton,
                 UnionUuidConverter.Singleton,
+                UnionUnmarshalJsonConverter.Singleton,
                 UnionUseSerializersConverter.Singleton,
                 UnionUtf8JsonReaderConverter.Singleton,
                 UnionUtf8JsonWriterConverter.Singleton,
@@ -5625,6 +5691,7 @@ namespace QuickType
                 UnionForeachConverter.Singleton,
                 UnionFriendConverter.Singleton,
                 UnionFromConverter.Singleton,
+                UnionFromDictConverter.Singleton,
                 UnionFromJsonConverter.Singleton,
                 UnionFuncConverter.Singleton,
                 UnionFunctionConverter.Singleton,
@@ -5759,6 +5826,7 @@ namespace QuickType
                 UnionThrowConverter.Singleton,
                 UnionThrowsConverter.Singleton,
                 UnionToStringConverter.Singleton,
+                UnionToDictConverter.Singleton,
                 UnionToJsonConverter.Singleton,
                 UnionTopLevelConverter.Singleton,
                 UnionTransientConverter.Singleton,
@@ -7242,6 +7310,44 @@ namespace QuickType
         public static readonly UnionMapEntryConverter Singleton = new UnionMapEntryConverter();
     }
 
+    internal class UnionMarshalJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMarshalJson) || t == typeof(UnionMarshalJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMarshalJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MarshalJson>(reader);
+                    return new UnionMarshalJson { MarshalJson = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMarshalJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMarshalJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MarshalJson != null)
+            {
+                serializer.Serialize(writer, value.MarshalJson);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMarshalJson");
+        }
+
+        public static readonly UnionMarshalJsonConverter Singleton = new UnionMarshalJsonConverter();
+    }
+
     internal class UnionNoConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionNo) || t == typeof(UnionNo?);
@@ -8268,6 +8374,44 @@ namespace QuickType
         public static readonly UnionUuidConverter Singleton = new UnionUuidConverter();
     }
 
+    internal class UnionUnmarshalJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnmarshalJson) || t == typeof(UnionUnmarshalJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnmarshalJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnmarshalJson>(reader);
+                    return new UnionUnmarshalJson { UnmarshalJson = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnmarshalJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnmarshalJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnmarshalJson != null)
+            {
+                serializer.Serialize(writer, value.UnmarshalJson);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnmarshalJson");
+        }
+
+        public static readonly UnionUnmarshalJsonConverter Singleton = new UnionUnmarshalJsonConverter();
+    }
+
     internal class UnionUseSerializersConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionUseSerializers) || t == typeof(UnionUseSerializers?);
@@ -12258,6 +12402,44 @@ namespace QuickType
         public static readonly UnionFromConverter Singleton = new UnionFromConverter();
     }
 
+    internal class UnionFromDictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFromDict) || t == typeof(UnionFromDict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFromDict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FromDict>(reader);
+                    return new UnionFromDict { FromDict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFromDict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFromDict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FromDict != null)
+            {
+                serializer.Serialize(writer, value.FromDict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFromDict");
+        }
+
+        public static readonly UnionFromDictConverter Singleton = new UnionFromDictConverter();
+    }
+
     internal class UnionFromJsonConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionFromJson) || t == typeof(UnionFromJson?);
@@ -17350,6 +17532,44 @@ namespace QuickType
         public static readonly UnionToStringConverter Singleton = new UnionToStringConverter();
     }
 
+    internal class UnionToDictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionToDict) || t == typeof(UnionToDict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionToDict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ToDict>(reader);
+                    return new UnionToDict { ToDict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionToDict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionToDict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ToDict != null)
+            {
+                serializer.Serialize(writer, value.ToDict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionToDict");
+        }
+
+        public static readonly UnionToDictConverter Singleton = new UnionToDictConverter();
+    }
+
     internal class UnionToJsonConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionToJson) || t == typeof(UnionToJson?);
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index 67a2818..099fad3 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -27,7 +27,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial class TopLevel
     {
@@ -304,6 +304,8 @@ namespace QuickType
                     return Enum.Friend;
                 case "from":
                     return Enum.From;
+                case "from_dict":
+                    return Enum.FromDict;
                 case "from_json":
                     return Enum.FromJson;
                 case "func":
@@ -422,6 +424,8 @@ namespace QuickType
                     return Enum.Long;
                 case "map":
                     return Enum.Map;
+                case "MarshalJSON":
+                    return Enum.MarshalJson;
                 case "MapEntry":
                     return Enum.MapEntry;
                 case "metadata_property_handling":
@@ -660,6 +664,8 @@ namespace QuickType
                     return Enum.TopLevel;
                 case "toString":
                     return Enum.ToString;
+                case "to_dict":
+                    return Enum.ToDict;
                 case "transient":
                     return Enum.Transient;
                 case "True":
@@ -692,6 +698,8 @@ namespace QuickType
                     return Enum.Undefined;
                 case "union":
                     return Enum.Union;
+                case "UnmarshalJSON":
+                    return Enum.UnmarshalJson;
                 case "UseSerializers":
                     return Enum.UseSerializers;
                 case "unowned":
@@ -1111,6 +1119,9 @@ namespace QuickType
                 case Enum.From:
                     JsonSerializer.Serialize(writer, "from", options);
                     return;
+                case Enum.FromDict:
+                    JsonSerializer.Serialize(writer, "from_dict", options);
+                    return;
                 case Enum.FromJson:
                     JsonSerializer.Serialize(writer, "from_json", options);
                     return;
@@ -1288,6 +1299,9 @@ namespace QuickType
                 case Enum.Map:
                     JsonSerializer.Serialize(writer, "map", options);
                     return;
+                case Enum.MarshalJson:
+                    JsonSerializer.Serialize(writer, "MarshalJSON", options);
+                    return;
                 case Enum.MapEntry:
                     JsonSerializer.Serialize(writer, "MapEntry", options);
                     return;
@@ -1645,6 +1659,9 @@ namespace QuickType
                 case Enum.ToString:
                     JsonSerializer.Serialize(writer, "toString", options);
                     return;
+                case Enum.ToDict:
+                    JsonSerializer.Serialize(writer, "to_dict", options);
+                    return;
                 case Enum.Transient:
                     JsonSerializer.Serialize(writer, "transient", options);
                     return;
@@ -1693,6 +1710,9 @@ namespace QuickType
                 case Enum.Union:
                     JsonSerializer.Serialize(writer, "union", options);
                     return;
+                case Enum.UnmarshalJson:
+                    JsonSerializer.Serialize(writer, "UnmarshalJSON", options);
+                    return;
                 case Enum.UseSerializers:
                     JsonSerializer.Serialize(writer, "UseSerializers", options);
                     return;
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index ae1c7ce..46631d8 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -510,6 +510,10 @@ namespace QuickType
         [JsonPropertyName("from")]
         public UnionFrom? From { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("from_dict")]
+        public UnionFromDict? FromDict { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("from_json")]
         public UnionFromJson? TopLevelFromJson { get; set; }
@@ -754,6 +758,10 @@ namespace QuickType
         [JsonPropertyName("MapEntry")]
         public UnionMapEntry? MapEntry { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("MarshalJSON")]
+        public UnionMarshalJson? MarshalJson { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("metadata_property_handling")]
         public UnionMetadataPropertyHandling? MetadataPropertyHandling { get; set; }
@@ -1210,6 +1218,10 @@ namespace QuickType
         [JsonPropertyName("TimeZone")]
         public UnionTimeZone? TimeZone { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("to_dict")]
+        public UnionToDict? ToDict { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("to_json")]
         public UnionToJson? TopLevelToJson { get; set; }
@@ -1286,6 +1298,10 @@ namespace QuickType
         [JsonPropertyName("union")]
         public UnionUnionUnion? Union { get; set; }
 
+        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+        [JsonPropertyName("UnmarshalJSON")]
+        public UnionUnmarshalJson? UnmarshalJson { get; set; }
+
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("unowned")]
         public UnionUnowned? Unowned { get; set; }
@@ -1839,6 +1855,10 @@ namespace QuickType
     {
     }
 
+    public partial class FromDict
+    {
+    }
+
     public partial class Func
     {
     }
@@ -2083,6 +2103,10 @@ namespace QuickType
     {
     }
 
+    public partial class MarshalJson
+    {
+    }
+
     public partial class MetadataPropertyHandling
     {
     }
@@ -2523,6 +2547,10 @@ namespace QuickType
     {
     }
 
+    public partial class ToDict
+    {
+    }
+
     public partial class AnyClass
     {
     }
@@ -2639,6 +2667,10 @@ namespace QuickType
     {
     }
 
+    public partial class UnmarshalJson
+    {
+    }
+
     public partial class Unowned
     {
     }
@@ -3766,6 +3798,15 @@ namespace QuickType
         public static implicit operator UnionFrom(From From) => new UnionFrom { From = From };
     }
 
+    public partial struct UnionFromDict
+    {
+        public double? Double;
+        public FromDict? FromDict;
+
+        public static implicit operator UnionFromDict(double Double) => new UnionFromDict { Double = Double };
+        public static implicit operator UnionFromDict(FromDict FromDict) => new UnionFromDict { FromDict = FromDict };
+    }
+
     public partial struct UnionFunc
     {
         public double? Double;
@@ -4315,6 +4356,15 @@ namespace QuickType
         public static implicit operator UnionMapEntry(MapEntry MapEntry) => new UnionMapEntry { MapEntry = MapEntry };
     }
 
+    public partial struct UnionMarshalJson
+    {
+        public double? Double;
+        public MarshalJson? MarshalJson;
+
+        public static implicit operator UnionMarshalJson(double Double) => new UnionMarshalJson { Double = Double };
+        public static implicit operator UnionMarshalJson(MarshalJson MarshalJson) => new UnionMarshalJson { MarshalJson = MarshalJson };
+    }
+
     public partial struct UnionMetadataPropertyHandling
     {
         public double? Double;
@@ -5305,6 +5355,15 @@ namespace QuickType
         public static implicit operator UnionTimeZone(TimeZone TimeZone) => new UnionTimeZone { TimeZone = TimeZone };
     }
 
+    public partial struct UnionToDict
+    {
+        public double? Double;
+        public ToDict? ToDict;
+
+        public static implicit operator UnionToDict(double Double) => new UnionToDict { Double = Double };
+        public static implicit operator UnionToDict(ToDict ToDict) => new UnionToDict { ToDict = ToDict };
+    }
+
     public partial struct UnionAnyUnion
     {
         public AnyClass? AnyClass;
@@ -5566,6 +5625,15 @@ namespace QuickType
         public static implicit operator UnionUnionUnion(Union Union) => new UnionUnionUnion { Union = Union };
     }
 
+    public partial struct UnionUnmarshalJson
+    {
+        public double? Double;
+        public UnmarshalJson? UnmarshalJson;
+
+        public static implicit operator UnionUnmarshalJson(double Double) => new UnionUnmarshalJson { Double = Double };
+        public static implicit operator UnionUnmarshalJson(UnmarshalJson UnmarshalJson) => new UnionUnmarshalJson { UnmarshalJson = UnmarshalJson };
+    }
+
     public partial struct UnionUnowned
     {
         public double? Double;
@@ -5827,6 +5895,7 @@ namespace QuickType
                 UnionKSerializerConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
+                UnionMarshalJsonConverter.Singleton,
                 UnionNoConverter.Singleton,
                 UnionNsErrorConverter.Singleton,
                 UnionNsObjectConverter.Singleton,
@@ -5854,6 +5923,7 @@ namespace QuickType
                 UnionTrueConverter.Singleton,
                 UnionTypeConverter.Singleton,
                 UnionUuidConverter.Singleton,
+                UnionUnmarshalJsonConverter.Singleton,
                 UnionUseSerializersConverter.Singleton,
                 UnionUtf8JsonReaderConverter.Singleton,
                 UnionUtf8JsonWriterConverter.Singleton,
@@ -5959,6 +6029,7 @@ namespace QuickType
                 UnionForeachConverter.Singleton,
                 UnionFriendConverter.Singleton,
                 UnionFromConverter.Singleton,
+                UnionFromDictConverter.Singleton,
                 UnionFromJsonConverter.Singleton,
                 UnionFuncConverter.Singleton,
                 UnionFunctionConverter.Singleton,
@@ -6093,6 +6164,7 @@ namespace QuickType
                 UnionThrowConverter.Singleton,
                 UnionThrowsConverter.Singleton,
                 UnionToStringConverter.Singleton,
+                UnionToDictConverter.Singleton,
                 UnionToJsonConverter.Singleton,
                 UnionTopLevelConverter.Singleton,
                 UnionTransientConverter.Singleton,
@@ -7502,6 +7574,42 @@ namespace QuickType
         public static readonly UnionMapEntryConverter Singleton = new UnionMapEntryConverter();
     }
 
+    internal class UnionMarshalJsonConverter : JsonConverter<UnionMarshalJson>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMarshalJson);
+
+        public override UnionMarshalJson Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionMarshalJson { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<MarshalJson>(ref reader, options);
+                    return new UnionMarshalJson { MarshalJson = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionMarshalJson");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionMarshalJson value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.MarshalJson != null)
+            {
+                JsonSerializer.Serialize(writer, value.MarshalJson, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionMarshalJson");
+        }
+
+        public static readonly UnionMarshalJsonConverter Singleton = new UnionMarshalJsonConverter();
+    }
+
     internal class UnionNoConverter : JsonConverter<UnionNo>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionNo);
@@ -8474,6 +8582,42 @@ namespace QuickType
         public static readonly UnionUuidConverter Singleton = new UnionUuidConverter();
     }
 
+    internal class UnionUnmarshalJsonConverter : JsonConverter<UnionUnmarshalJson>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnmarshalJson);
+
+        public override UnionUnmarshalJson Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionUnmarshalJson { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<UnmarshalJson>(ref reader, options);
+                    return new UnionUnmarshalJson { UnmarshalJson = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionUnmarshalJson");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionUnmarshalJson value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.UnmarshalJson != null)
+            {
+                JsonSerializer.Serialize(writer, value.UnmarshalJson, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionUnmarshalJson");
+        }
+
+        public static readonly UnionUnmarshalJsonConverter Singleton = new UnionUnmarshalJsonConverter();
+    }
+
     internal class UnionUseSerializersConverter : JsonConverter<UnionUseSerializers>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionUseSerializers);
@@ -12254,6 +12398,42 @@ namespace QuickType
         public static readonly UnionFromConverter Singleton = new UnionFromConverter();
     }
 
+    internal class UnionFromDictConverter : JsonConverter<UnionFromDict>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFromDict);
+
+        public override UnionFromDict Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionFromDict { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<FromDict>(ref reader, options);
+                    return new UnionFromDict { FromDict = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionFromDict");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionFromDict value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.FromDict != null)
+            {
+                JsonSerializer.Serialize(writer, value.FromDict, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionFromDict");
+        }
+
+        public static readonly UnionFromDictConverter Singleton = new UnionFromDictConverter();
+    }
+
     internal class UnionFromJsonConverter : JsonConverter<UnionFromJson>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionFromJson);
@@ -17078,6 +17258,42 @@ namespace QuickType
         public static readonly UnionToStringConverter Singleton = new UnionToStringConverter();
     }
 
+    internal class UnionToDictConverter : JsonConverter<UnionToDict>
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionToDict);
+
+        public override UnionToDict Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonTokenType.Number:
+                    var doubleValue1 = reader.GetDouble();
+                    return new UnionToDict { Double = doubleValue1 };
+                case JsonTokenType.StartObject:
+                    var objectValue = JsonSerializer.Deserialize<ToDict>(ref reader, options);
+                    return new UnionToDict { ToDict = objectValue };
+            }
+            throw new JsonException("Cannot unmarshal type UnionToDict");
+        }
+
+        public override void Write(Utf8JsonWriter writer, UnionToDict value, JsonSerializerOptions options)
+        {
+            if (value.Double != null)
+            {
+                JsonSerializer.Serialize(writer, value.Double.Value, options);
+                return;
+            }
+            if (value.ToDict != null)
+            {
+                JsonSerializer.Serialize(writer, value.ToDict, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type UnionToDict");
+        }
+
+        public static readonly UnionToDictConverter Singleton = new UnionToDictConverter();
+    }
+
     internal class UnionToJsonConverter : JsonConverter<UnionToJson>
     {
         public override bool CanConvert(Type t) => t == typeof(UnionToJson);
diff --git a/base/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
index d04349e..fa3397e 100644
--- a/base/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-enum.schema/default/QuickType.cs
@@ -29,7 +29,7 @@ namespace QuickType
         public Enum? Enum { get; set; }
     }
 
-    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
+    public enum Enum { Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, Asm, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBool, PurpleBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJson, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, Id, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, IsoDateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, Json, JsonConverter, JsonSerializer, JsonToken, JsonWriter, JsonAny, JsonCodingKey, JsonDecoder, JsonEncoder, JsonException, JsonGenerator, JsonNode, JsonNull, JsonParser, JsonReader, JsonTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MarshalJson, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NsObject, NoSuchMethod, Not, NotEq, NsError, NsString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJson, TopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJson, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JsonReader, Utf8JsonWriter, Uuid, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy };
 
     public partial record TopLevel
     {
@@ -307,6 +307,8 @@ namespace QuickType
                     return Enum.Friend;
                 case "from":
                     return Enum.From;
+                case "from_dict":
+                    return Enum.FromDict;
                 case "from_json":
                     return Enum.FromJson;
                 case "func":
@@ -425,6 +427,8 @@ namespace QuickType
                     return Enum.Long;
                 case "map":
                     return Enum.Map;
+                case "MarshalJSON":
+                    return Enum.MarshalJson;
                 case "MapEntry":
                     return Enum.MapEntry;
                 case "metadata_property_handling":
@@ -663,6 +667,8 @@ namespace QuickType
                     return Enum.TopLevel;
                 case "toString":
                     return Enum.ToString;
+                case "to_dict":
+                    return Enum.ToDict;
                 case "transient":
                     return Enum.Transient;
                 case "True":
@@ -695,6 +701,8 @@ namespace QuickType
                     return Enum.Undefined;
                 case "union":
                     return Enum.Union;
+                case "UnmarshalJSON":
+                    return Enum.UnmarshalJson;
                 case "UseSerializers":
                     return Enum.UseSerializers;
                 case "unowned":
@@ -1120,6 +1128,9 @@ namespace QuickType
                 case Enum.From:
                     serializer.Serialize(writer, "from");
                     return;
+                case Enum.FromDict:
+                    serializer.Serialize(writer, "from_dict");
+                    return;
                 case Enum.FromJson:
                     serializer.Serialize(writer, "from_json");
                     return;
@@ -1297,6 +1308,9 @@ namespace QuickType
                 case Enum.Map:
                     serializer.Serialize(writer, "map");
                     return;
+                case Enum.MarshalJson:
+                    serializer.Serialize(writer, "MarshalJSON");
+                    return;
                 case Enum.MapEntry:
                     serializer.Serialize(writer, "MapEntry");
                     return;
@@ -1654,6 +1668,9 @@ namespace QuickType
                 case Enum.ToString:
                     serializer.Serialize(writer, "toString");
                     return;
+                case Enum.ToDict:
+                    serializer.Serialize(writer, "to_dict");
+                    return;
                 case Enum.Transient:
                     serializer.Serialize(writer, "transient");
                     return;
@@ -1702,6 +1719,9 @@ namespace QuickType
                 case Enum.Union:
                     serializer.Serialize(writer, "union");
                     return;
+                case Enum.UnmarshalJson:
+                    serializer.Serialize(writer, "UnmarshalJSON");
+                    return;
                 case Enum.UseSerializers:
                     serializer.Serialize(writer, "UseSerializers");
                     return;
diff --git a/base/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
index faa8dd9..6bd4798 100644
--- a/base/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/keyword-unions.schema/default/QuickType.cs
@@ -391,6 +391,9 @@ namespace QuickType
         [JsonProperty("from", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionFrom? From { get; set; }
 
+        [JsonProperty("from_dict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionFromDict? FromDict { get; set; }
+
         [JsonProperty("from_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionFromJson? TopLevelFromJson { get; set; }
 
@@ -574,6 +577,9 @@ namespace QuickType
         [JsonProperty("MapEntry", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionMapEntry? MapEntry { get; set; }
 
+        [JsonProperty("MarshalJSON", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionMarshalJson? MarshalJson { get; set; }
+
         [JsonProperty("metadata_property_handling", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionMetadataPropertyHandling? MetadataPropertyHandling { get; set; }
 
@@ -916,6 +922,9 @@ namespace QuickType
         [JsonProperty("TimeZone", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionTimeZone? TimeZone { get; set; }
 
+        [JsonProperty("to_dict", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionToDict? ToDict { get; set; }
+
         [JsonProperty("to_json", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionToJson? TopLevelToJson { get; set; }
 
@@ -973,6 +982,9 @@ namespace QuickType
         [JsonProperty("union", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionUnionUnion? Union { get; set; }
 
+        [JsonProperty("UnmarshalJSON", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public UnionUnmarshalJson? UnmarshalJson { get; set; }
+
         [JsonProperty("unowned", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
         public UnionUnowned? Unowned { get; set; }
 
@@ -1495,6 +1507,10 @@ namespace QuickType
     {
     }
 
+    public partial record FromDict
+    {
+    }
+
     public partial record Func
     {
     }
@@ -1739,6 +1755,10 @@ namespace QuickType
     {
     }
 
+    public partial record MarshalJson
+    {
+    }
+
     public partial record MetadataPropertyHandlingClass
     {
     }
@@ -2175,6 +2195,10 @@ namespace QuickType
     {
     }
 
+    public partial record ToDict
+    {
+    }
+
     public partial record AnyClass
     {
     }
@@ -2303,6 +2327,10 @@ namespace QuickType
     {
     }
 
+    public partial record UnmarshalJson
+    {
+    }
+
     public partial record Unowned
     {
     }
@@ -3412,6 +3440,15 @@ namespace QuickType
         public static implicit operator UnionFrom(From From) => new UnionFrom { From = From };
     }
 
+    public partial struct UnionFromDict
+    {
+        public double? Double;
+        public FromDict? FromDict;
+
+        public static implicit operator UnionFromDict(double Double) => new UnionFromDict { Double = Double };
+        public static implicit operator UnionFromDict(FromDict FromDict) => new UnionFromDict { FromDict = FromDict };
+    }
+
     public partial struct UnionFunc
     {
         public double? Double;
@@ -3961,6 +3998,15 @@ namespace QuickType
         public static implicit operator UnionMapEntry(MapEntry MapEntry) => new UnionMapEntry { MapEntry = MapEntry };
     }
 
+    public partial struct UnionMarshalJson
+    {
+        public double? Double;
+        public MarshalJson? MarshalJson;
+
+        public static implicit operator UnionMarshalJson(double Double) => new UnionMarshalJson { Double = Double };
+        public static implicit operator UnionMarshalJson(MarshalJson MarshalJson) => new UnionMarshalJson { MarshalJson = MarshalJson };
+    }
+
     public partial struct UnionMetadataPropertyHandling
     {
         public double? Double;
@@ -4942,6 +4988,15 @@ namespace QuickType
         public static implicit operator UnionTimeZone(TimeZone TimeZone) => new UnionTimeZone { TimeZone = TimeZone };
     }
 
+    public partial struct UnionToDict
+    {
+        public double? Double;
+        public ToDict? ToDict;
+
+        public static implicit operator UnionToDict(double Double) => new UnionToDict { Double = Double };
+        public static implicit operator UnionToDict(ToDict ToDict) => new UnionToDict { ToDict = ToDict };
+    }
+
     public partial struct UnionAnyUnion
     {
         public AnyClass? AnyClass;
@@ -5230,6 +5285,15 @@ namespace QuickType
         public static implicit operator UnionUnionUnion(Union Union) => new UnionUnionUnion { Union = Union };
     }
 
+    public partial struct UnionUnmarshalJson
+    {
+        public double? Double;
+        public UnmarshalJson? UnmarshalJson;
+
+        public static implicit operator UnionUnmarshalJson(double Double) => new UnionUnmarshalJson { Double = Double };
+        public static implicit operator UnionUnmarshalJson(UnmarshalJson UnmarshalJson) => new UnionUnmarshalJson { UnmarshalJson = UnmarshalJson };
+    }
+
     public partial struct UnionUnowned
     {
         public double? Double;
@@ -5493,6 +5557,7 @@ namespace QuickType
                 UnionKSerializerConverter.Singleton,
                 UnionLocaleConverter.Singleton,
                 UnionMapEntryConverter.Singleton,
+                UnionMarshalJsonConverter.Singleton,
                 UnionNoConverter.Singleton,
                 UnionNsErrorConverter.Singleton,
                 UnionNsObjectConverter.Singleton,
@@ -5520,6 +5585,7 @@ namespace QuickType
                 UnionTrueConverter.Singleton,
                 UnionTypeConverter.Singleton,
                 UnionUuidConverter.Singleton,
+                UnionUnmarshalJsonConverter.Singleton,
                 UnionUseSerializersConverter.Singleton,
                 UnionUtf8JsonReaderConverter.Singleton,
                 UnionUtf8JsonWriterConverter.Singleton,
@@ -5625,6 +5691,7 @@ namespace QuickType
                 UnionForeachConverter.Singleton,
                 UnionFriendConverter.Singleton,
                 UnionFromConverter.Singleton,
+                UnionFromDictConverter.Singleton,
                 UnionFromJsonConverter.Singleton,
                 UnionFuncConverter.Singleton,
                 UnionFunctionConverter.Singleton,
@@ -5759,6 +5826,7 @@ namespace QuickType
                 UnionThrowConverter.Singleton,
                 UnionThrowsConverter.Singleton,
                 UnionToStringConverter.Singleton,
+                UnionToDictConverter.Singleton,
                 UnionToJsonConverter.Singleton,
                 UnionTopLevelConverter.Singleton,
                 UnionTransientConverter.Singleton,
@@ -7242,6 +7310,44 @@ namespace QuickType
         public static readonly UnionMapEntryConverter Singleton = new UnionMapEntryConverter();
     }
 
+    internal class UnionMarshalJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionMarshalJson) || t == typeof(UnionMarshalJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionMarshalJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<MarshalJson>(reader);
+                    return new UnionMarshalJson { MarshalJson = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionMarshalJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionMarshalJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.MarshalJson != null)
+            {
+                serializer.Serialize(writer, value.MarshalJson);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionMarshalJson");
+        }
+
+        public static readonly UnionMarshalJsonConverter Singleton = new UnionMarshalJsonConverter();
+    }
+
     internal class UnionNoConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionNo) || t == typeof(UnionNo?);
@@ -8268,6 +8374,44 @@ namespace QuickType
         public static readonly UnionUuidConverter Singleton = new UnionUuidConverter();
     }
 
+    internal class UnionUnmarshalJsonConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionUnmarshalJson) || t == typeof(UnionUnmarshalJson?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionUnmarshalJson { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<UnmarshalJson>(reader);
+                    return new UnionUnmarshalJson { UnmarshalJson = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionUnmarshalJson");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionUnmarshalJson)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.UnmarshalJson != null)
+            {
+                serializer.Serialize(writer, value.UnmarshalJson);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionUnmarshalJson");
+        }
+
+        public static readonly UnionUnmarshalJsonConverter Singleton = new UnionUnmarshalJsonConverter();
+    }
+
     internal class UnionUseSerializersConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionUseSerializers) || t == typeof(UnionUseSerializers?);
@@ -12258,6 +12402,44 @@ namespace QuickType
         public static readonly UnionFromConverter Singleton = new UnionFromConverter();
     }
 
+    internal class UnionFromDictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionFromDict) || t == typeof(UnionFromDict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionFromDict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<FromDict>(reader);
+                    return new UnionFromDict { FromDict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionFromDict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionFromDict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.FromDict != null)
+            {
+                serializer.Serialize(writer, value.FromDict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionFromDict");
+        }
+
+        public static readonly UnionFromDictConverter Singleton = new UnionFromDictConverter();
+    }
+
     internal class UnionFromJsonConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionFromJson) || t == typeof(UnionFromJson?);
@@ -17350,6 +17532,44 @@ namespace QuickType
         public static readonly UnionToStringConverter Singleton = new UnionToStringConverter();
     }
 
+    internal class UnionToDictConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(UnionToDict) || t == typeof(UnionToDict?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            switch (reader.TokenType)
+            {
+                case JsonToken.Integer:
+                case JsonToken.Float:
+                    var doubleValue = serializer.Deserialize<double>(reader);
+                    return new UnionToDict { Double = doubleValue };
+                case JsonToken.StartObject:
+                    var objectValue = serializer.Deserialize<ToDict>(reader);
+                    return new UnionToDict { ToDict = objectValue };
+            }
+            throw new Exception("Cannot unmarshal type UnionToDict");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            var value = (UnionToDict)untypedValue;
+            if (value.Double != null)
+            {
+                serializer.Serialize(writer, value.Double.Value);
+                return;
+            }
+            if (value.ToDict != null)
+            {
+                serializer.Serialize(writer, value.ToDict);
+                return;
+            }
+            throw new Exception("Cannot marshal type UnionToDict");
+        }
+
+        public static readonly UnionToDictConverter Singleton = new UnionToDictConverter();
+    }
+
     internal class UnionToJsonConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(UnionToJson) || t == typeof(UnionToJson?);
diff --git a/base/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
index 7c5b257..f8649a4 100644
--- a/base/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/keyword-enum.schema/default/TopLevel.dart
@@ -146,6 +146,7 @@ enum Enum {
     FORMAT_EXCEPTION,
     FRIEND,
     FROM,
+    FROM_DICT,
     FROM_JSON,
     FUNC,
     FUNCTION,
@@ -205,6 +206,7 @@ enum Enum {
     LOCK,
     LONG,
     MAP,
+    MARSHAL_JSON,
     MAP_ENTRY,
     METADATA_PROPERTY_HANDLING,
     MODULE,
@@ -324,6 +326,7 @@ enum Enum {
     TO_JSON,
     TOP_LEVEL,
     TO_STRING,
+    TO_DICT,
     TRANSIENT,
     TRUE,
     ENUM_TRUE,
@@ -340,6 +343,7 @@ enum Enum {
     UNCHECKED,
     UNDEFINED,
     UNION,
+    UNMARSHAL_JSON,
     USE_SERIALIZERS,
     UNOWNED,
     UNSAFE,
@@ -488,6 +492,7 @@ final enumValues = EnumValues({
     "FormatException": Enum.FORMAT_EXCEPTION,
     "friend": Enum.FRIEND,
     "from": Enum.FROM,
+    "from_dict": Enum.FROM_DICT,
     "from_json": Enum.FROM_JSON,
     "func": Enum.FUNC,
     "function": Enum.FUNCTION,
@@ -547,6 +552,7 @@ final enumValues = EnumValues({
     "lock": Enum.LOCK,
     "long": Enum.LONG,
     "map": Enum.MAP,
+    "MarshalJSON": Enum.MARSHAL_JSON,
     "MapEntry": Enum.MAP_ENTRY,
     "metadata_property_handling": Enum.METADATA_PROPERTY_HANDLING,
     "module": Enum.MODULE,
@@ -666,6 +672,7 @@ final enumValues = EnumValues({
     "to_json": Enum.TO_JSON,
     "top_level": Enum.TOP_LEVEL,
     "toString": Enum.TO_STRING,
+    "to_dict": Enum.TO_DICT,
     "transient": Enum.TRANSIENT,
     "True": Enum.TRUE,
     "true": Enum.ENUM_TRUE,
@@ -682,6 +689,7 @@ final enumValues = EnumValues({
     "unchecked": Enum.UNCHECKED,
     "undefined": Enum.UNDEFINED,
     "union": Enum.UNION,
+    "UnmarshalJSON": Enum.UNMARSHAL_JSON,
     "UseSerializers": Enum.USE_SERIALIZERS,
     "unowned": Enum.UNOWNED,
     "unsafe": Enum.UNSAFE,
diff --git a/base/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
index a7df2a1..1ba1d25 100644
--- a/base/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/keyword-unions.schema/default/TopLevel.dart
@@ -131,6 +131,7 @@ class TopLevel {
     final dynamic formatException;
     final dynamic friend;
     final dynamic from;
+    final dynamic fromDict;
     final dynamic topLevelFromJson;
     final dynamic func;
     final dynamic function;
@@ -192,6 +193,7 @@ class TopLevel {
     final dynamic long;
     final dynamic map;
     final dynamic mapEntry;
+    final dynamic marshalJson;
     final dynamic metadataPropertyHandling;
     final dynamic module;
     final dynamic mutable;
@@ -306,6 +308,7 @@ class TopLevel {
     final dynamic timeOnly;
     final dynamic timeOnlyConverter;
     final dynamic timeZone;
+    final dynamic toDict;
     final dynamic topLevelToJson;
     final dynamic topLevel;
     final dynamic topLevelToString;
@@ -325,6 +328,7 @@ class TopLevel {
     final dynamic unchecked;
     final dynamic undefined;
     final dynamic union;
+    final dynamic unmarshalJson;
     final dynamic unowned;
     final dynamic unsafe;
     final dynamic unsigned;
@@ -472,6 +476,7 @@ class TopLevel {
         this.formatException,
         this.friend,
         this.from,
+        this.fromDict,
         this.topLevelFromJson,
         this.func,
         this.function,
@@ -533,6 +538,7 @@ class TopLevel {
         this.long,
         this.map,
         this.mapEntry,
+        this.marshalJson,
         this.metadataPropertyHandling,
         this.module,
         this.mutable,
@@ -647,6 +653,7 @@ class TopLevel {
         this.timeOnly,
         this.timeOnlyConverter,
         this.timeZone,
+        this.toDict,
         this.topLevelToJson,
         this.topLevel,
         this.topLevelToString,
@@ -666,6 +673,7 @@ class TopLevel {
         this.unchecked,
         this.undefined,
         this.union,
+        this.unmarshalJson,
         this.unowned,
         this.unsafe,
         this.unsigned,
@@ -814,6 +822,7 @@ class TopLevel {
         formatException: json["FormatException"],
         friend: json["friend"],
         from: json["from"],
+        fromDict: json["from_dict"],
         topLevelFromJson: json["from_json"],
         func: json["func"],
         function: json["function"],
@@ -875,6 +884,7 @@ class TopLevel {
         long: json["long"],
         map: json["map"],
         mapEntry: json["MapEntry"],
+        marshalJson: json["MarshalJSON"],
         metadataPropertyHandling: json["metadata_property_handling"],
         module: json["module"],
         mutable: json["mutable"],
@@ -989,6 +999,7 @@ class TopLevel {
         timeOnly: json["TimeOnly"],
         timeOnlyConverter: json["TimeOnlyConverter"],
         timeZone: json["TimeZone"],
+        toDict: json["to_dict"],
         topLevelToJson: json["to_json"],
         topLevel: json["top_level"],
         topLevelToString: json["toString"],
@@ -1008,6 +1019,7 @@ class TopLevel {
         unchecked: json["unchecked"],
         undefined: json["undefined"],
         union: json["union"],
+        unmarshalJson: json["UnmarshalJSON"],
         unowned: json["unowned"],
         unsafe: json["unsafe"],
         unsigned: json["unsigned"],
@@ -1156,6 +1168,7 @@ class TopLevel {
         "FormatException": formatException,
         "friend": friend,
         "from": from,
+        "from_dict": fromDict,
         "from_json": topLevelFromJson,
         "func": func,
         "function": function,
@@ -1217,6 +1230,7 @@ class TopLevel {
         "long": long,
         "map": map,
         "MapEntry": mapEntry,
+        "MarshalJSON": marshalJson,
         "metadata_property_handling": metadataPropertyHandling,
         "module": module,
         "mutable": mutable,
@@ -1331,6 +1345,7 @@ class TopLevel {
         "TimeOnly": timeOnly,
         "TimeOnlyConverter": timeOnlyConverter,
         "TimeZone": timeZone,
+        "to_dict": toDict,
         "to_json": topLevelToJson,
         "top_level": topLevel,
         "toString": topLevelToString,
@@ -1350,6 +1365,7 @@ class TopLevel {
         "unchecked": unchecked,
         "undefined": undefined,
         "union": union,
+        "UnmarshalJSON": unmarshalJson,
         "unowned": unowned,
         "unsafe": unsafe,
         "unsigned": unsigned,
@@ -2296,6 +2312,16 @@ class From {
     };
 }
 
+class FromDict {
+    FromDict();
+
+    factory FromDict.fromJson(Map<String, dynamic> json) => FromDict(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class Func {
     Func();
 
@@ -2816,6 +2842,16 @@ class MapEntryClass {
     };
 }
 
+class MarshalJson {
+    MarshalJson();
+
+    factory MarshalJson.fromJson(Map<String, dynamic> json) => MarshalJson(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class MetadataPropertyHandling {
     MetadataPropertyHandling();
 
@@ -3846,6 +3882,16 @@ class TimeZone {
     };
 }
 
+class ToDict {
+    ToDict();
+
+    factory ToDict.fromJson(Map<String, dynamic> json) => ToDict(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class TopLevelClass {
     TopLevelClass();
 
@@ -4576,6 +4622,16 @@ class Union {
     };
 }
 
+class UnmarshalJson {
+    UnmarshalJson();
+
+    factory UnmarshalJson.fromJson(Map<String, dynamic> json) => UnmarshalJson(
+    );
+
+    Map<String, dynamic> toJson() => {
+    };
+}
+
 class Unowned {
     Unowned();
 
diff --git a/base/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
index 7f24fec..7edf71c 100644
--- a/base/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/keyword-enum.schema/default/QuickType.ex
@@ -128,6 +128,7 @@ defmodule EnumEnum do
     :FormatException,
     :friend,
     :from,
+    :from_dict,
     :from_json,
     :func,
     :function,
@@ -187,6 +188,7 @@ defmodule EnumEnum do
     :lock,
     :long,
     :map,
+    :MarshalJSON,
     :MapEntry,
     :metadata_property_handling,
     :module,
@@ -306,6 +308,7 @@ defmodule EnumEnum do
     :to_json,
     :top_level,
     :toString,
+    :to_dict,
     :transient,
     :True,
     :true,
@@ -322,6 +325,7 @@ defmodule EnumEnum do
     :unchecked,
     :undefined,
     :union,
+    :UnmarshalJSON,
     :UseSerializers,
     :unowned,
     :unsafe,
diff --git a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
index 6d803b9..9b072f4 100644
--- a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
@@ -3224,6 +3224,35 @@ defmodule From do
   end
 end
 
+defmodule FromDict do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %FromDict{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule FromJSON do
   defstruct []
 
@@ -4964,6 +4993,35 @@ defmodule MapEntry do
   end
 end
 
+defmodule MarshalJSON do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %MarshalJSON{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule MetadataPropertyHandling do
   defstruct []
 
@@ -8067,6 +8125,35 @@ defmodule TimeZone do
   end
 end
 
+defmodule ToDict do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %ToDict{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule ToJSON do
   defstruct []
 
@@ -9140,6 +9227,35 @@ defmodule Union do
   end
 end
 
+defmodule UnmarshalJSON do
+  defstruct []
+
+  @type t :: %__MODULE__{
+        }
+
+  def from_map(m) when is_map(m) do
+    %UnmarshalJSON{
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(_struct) do
+    %{
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Unowned do
   defstruct []
 
@@ -9808,7 +9924,7 @@ defmodule Yield do
 end
 
 defmodule TopLevel do
-  defstruct [:empty, :top_level_bool, :complex, :imaginery, :abstract, :alignas, :alignof, :top_level_and, :and_eq, :top_level_any, :any, :array, :as, :asm, :assert, :associatedtype, :associativity, :async, :atomic, :atomic_cancel, :atomic_commit, :atomic_noexcept, :auto, :await, :base, :bitand, :bitor, :bool, :bool_1, :boolean, :break, :bycopy, :byref, :byte, :calendar, :case, :top_level_catch, :chan, :char, :char16_t, :char32_t, :checked, :top_level_class, :class, :clone, :co_await, :co_return, :co_yield, :codable, :coding_key, :coding_keys, :compl, :concept, :console, :const, :const_cast, :constexpr, :constructor, :continue, :convenience, :convert, :converter, :culture_info, :date, :date_parse_handling, :date_formatter, :date_only, :date_only_converter, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :top_level_def, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :top_level_do, :double, :dummy, :dynamic, :dynamic_cast, :elif, :top_level_else, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :top_level_false, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :hashable, :hash_code, :hasher, :has_own_property, :id, :if, :imp, :implements, :implicit, :top_level_import, :top_level_in, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :json_any, :json_coding_key, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_token_type, :k_serializer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :top_level_nil, :no, :noexcept, :nonatomic, :top_level_none, :none, :nonlocal, :nonmutating, :no_such_method, :top_level_not, :not_eq, :ns_error, :ns_object, :ns_string, :null, :top_level_null, :nullptr, :number, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :top_level_or, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :primitive_kind, :print, :printf, :print_members, :private, :protected, :protocol, :top_level_protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :top_level_self, :sendable, :serial_descriptor, :serializable, :serialize, :serializer_provider, :serial_name, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_json, :top_level, :to_string, :transient, :top_level_true, :true_1, :try, :type, :top_level_type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
+  defstruct [:empty, :top_level_bool, :complex, :imaginery, :abstract, :alignas, :alignof, :top_level_and, :and_eq, :top_level_any, :any, :array, :as, :asm, :assert, :associatedtype, :associativity, :async, :atomic, :atomic_cancel, :atomic_commit, :atomic_noexcept, :auto, :await, :base, :bitand, :bitor, :bool, :bool_1, :boolean, :break, :bycopy, :byref, :byte, :calendar, :case, :top_level_catch, :chan, :char, :char16_t, :char32_t, :checked, :top_level_class, :class, :clone, :co_await, :co_return, :co_yield, :codable, :coding_key, :coding_keys, :compl, :concept, :console, :const, :const_cast, :constexpr, :constructor, :continue, :convenience, :convert, :converter, :culture_info, :date, :date_parse_handling, :date_formatter, :date_only, :date_only_converter, :date_time, :date_time_styles, :debugger, :decimal, :declare, :decltype, :decode_string, :decoder, :decoding_error, :top_level_def, :default, :defer, :deinit, :del, :delegate, :delete, :dict, :dictionary, :did_set, :top_level_do, :double, :dummy, :dynamic, :dynamic_cast, :elif, :top_level_else, :encode_quick_type, :encoder, :enum, :enum_values, :equality_contract, :equatable, :event, :except, :exception, :explicit, :export, :exposing, :extends, :extension, :extern, :fallthrough, :false_1, :top_level_false, :fileprivate, :final, :finally, :fixed, :float, :for, :foreach, :format_exception, :friend, :from, :from_dict, :from_json, :func, :function, :get, :global, :go, :goto, :guard, :hashable, :hash_code, :hasher, :has_own_property, :id, :if, :imp, :implements, :implicit, :top_level_import, :top_level_in, :indirect, :infix, :init, :inline, :inout, :instanceof, :int, :interface, :internal, :is, :iso_date_time_offset_converter, :iterable, :jdec, :jenc, :jpipe, :json, :json_converter, :json_serializer, :json_token, :json_writer, :json_any, :json_coding_key, :json_decoder, :json_encoder, :json_exception, :json_generator, :json_node, :json_null, :json_parser, :json_reader, :json_token_type, :k_serializer, :lambda, :lazy, :left, :let, :list, :locale, :lock, :long, :map, :map_entry, :marshal_json, :metadata_property_handling, :module, :mutable, :mutating, :namespace, :native, :new, :newtonsoft, :top_level_nil, :no, :noexcept, :nonatomic, :top_level_none, :none, :nonlocal, :nonmutating, :no_such_method, :top_level_not, :not_eq, :ns_error, :ns_object, :ns_string, :null, :top_level_null, :nullptr, :number, :object, :object_mapper, :of, :oneway, :open, :operator, :optional, :top_level_or, :or_eq, :out, :override, :package, :params, :pass, :port, :postfix, :precedence, :prefix, :primitive_kind, :print, :printf, :print_members, :private, :protected, :protocol, :top_level_protocol, :public, :quicktype, :raise, :range, :readonly, :ref, :reg_exp, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :runtime_type, :s, :sbyte, :sealed, :sel, :select, :self, :top_level_self, :sendable, :serial_descriptor, :serializable, :serialize, :serializer_provider, :serial_name, :set, :short, :signed, :simple_module, :sizeof, :stackalloc, :standards, :static, :static_assert, :static_cast, :std_deserializer, :std_serializer, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :time_only, :time_only_converter, :time_zone, :to_dict, :to_json, :top_level, :to_string, :transient, :top_level_true, :true_1, :try, :type, :top_level_type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined, :union, :unmarshal_json, :unowned, :unsafe, :unsigned, :use_serializers, :ushort, :using, :utf8_json_reader, :utf8_json_writer, :uuid, :var, :virtual, :void, :volatile, :wchar_t, :weak, :where, :while, :will_set, :with, :xor, :xor_eq, :yes, :yield]
 
   @type t :: %__MODULE__{
           empty: Empty.t() | float() | nil,
@@ -9933,6 +10049,7 @@ defmodule TopLevel do
           format_exception: FormatException.t() | float() | nil,
           friend: Friend.t() | float() | nil,
           from: From.t() | float() | nil,
+          from_dict: FromDict.t() | float() | nil,
           from_json: FromJSON.t() | float() | nil,
           func: Func.t() | float() | nil,
           function: FunctionClass.t() | float() | nil,
@@ -9994,6 +10111,7 @@ defmodule TopLevel do
           long: Long.t() | float() | nil,
           map: MapClass.t() | float() | nil,
           map_entry: MapEntry.t() | float() | nil,
+          marshal_json: MarshalJSON.t() | float() | nil,
           metadata_property_handling: MetadataPropertyHandling.t() | float() | nil,
           module: ModuleClass.t() | float() | nil,
           mutable: Mutable.t() | float() | nil,
@@ -10108,6 +10226,7 @@ defmodule TopLevel do
           time_only: TimeOnly.t() | float() | nil,
           time_only_converter: TimeOnlyConverter.t() | float() | nil,
           time_zone: TimeZone.t() | float() | nil,
+          to_dict: ToDict.t() | float() | nil,
           to_json: ToJSON.t() | float() | nil,
           top_level: TopLevelClass.t() | float() | nil,
           to_string: ToString.t() | float() | nil,
@@ -10127,6 +10246,7 @@ defmodule TopLevel do
           unchecked: Unchecked.t() | float() | nil,
           undefined: Undefined.t() | float() | nil,
           union: Union.t() | float() | nil,
+          unmarshal_json: UnmarshalJSON.t() | float() | nil,
           unowned: Unowned.t() | float() | nil,
           unsafe: Unsafe.t() | float() | nil,
           unsigned: Unsigned.t() | float() | nil,
@@ -11612,6 +11732,18 @@ defmodule TopLevel do
   def encode_from(value) when is_nil(value), do: value
   def encode_from(_), do: {:error, "Unexpected type when encoding TopLevel.from"}
 
+  def decode_from_dict(%{} = value), do: FromDict.from_map(value)
+  def decode_from_dict(value) when is_float(value), do: value
+  def decode_from_dict(value) when is_integer(value), do: value
+  def decode_from_dict(value) when is_nil(value), do: value
+  def decode_from_dict(_), do: {:error, "Unexpected type when decoding TopLevel.from_dict"}
+
+  def encode_from_dict(%FromDict{} = value), do: FromDict.to_map(value)
+  def encode_from_dict(value) when is_float(value), do: value
+  def encode_from_dict(value) when is_integer(value), do: value
+  def encode_from_dict(value) when is_nil(value), do: value
+  def encode_from_dict(_), do: {:error, "Unexpected type when encoding TopLevel.from_dict"}
+
   def decode_from_json(%{} = value), do: FromJSON.from_map(value)
   def decode_from_json(value) when is_float(value), do: value
   def decode_from_json(value) when is_integer(value), do: value
@@ -12344,6 +12476,18 @@ defmodule TopLevel do
   def encode_map_entry(value) when is_nil(value), do: value
   def encode_map_entry(_), do: {:error, "Unexpected type when encoding TopLevel.map_entry"}
 
+  def decode_marshal_json(%{} = value), do: MarshalJSON.from_map(value)
+  def decode_marshal_json(value) when is_float(value), do: value
+  def decode_marshal_json(value) when is_integer(value), do: value
+  def decode_marshal_json(value) when is_nil(value), do: value
+  def decode_marshal_json(_), do: {:error, "Unexpected type when decoding TopLevel.marshal_json"}
+
+  def encode_marshal_json(%MarshalJSON{} = value), do: MarshalJSON.to_map(value)
+  def encode_marshal_json(value) when is_float(value), do: value
+  def encode_marshal_json(value) when is_integer(value), do: value
+  def encode_marshal_json(value) when is_nil(value), do: value
+  def encode_marshal_json(_), do: {:error, "Unexpected type when encoding TopLevel.marshal_json"}
+
   def decode_metadata_property_handling(%{} = value), do: MetadataPropertyHandling.from_map(value)
   def decode_metadata_property_handling(value) when is_float(value), do: value
   def decode_metadata_property_handling(value) when is_integer(value), do: value
@@ -13712,6 +13856,18 @@ defmodule TopLevel do
   def encode_time_zone(value) when is_nil(value), do: value
   def encode_time_zone(_), do: {:error, "Unexpected type when encoding TopLevel.time_zone"}
 
+  def decode_to_dict(%{} = value), do: ToDict.from_map(value)
+  def decode_to_dict(value) when is_float(value), do: value
+  def decode_to_dict(value) when is_integer(value), do: value
+  def decode_to_dict(value) when is_nil(value), do: value
+  def decode_to_dict(_), do: {:error, "Unexpected type when decoding TopLevel.to_dict"}
+
+  def encode_to_dict(%ToDict{} = value), do: ToDict.to_map(value)
+  def encode_to_dict(value) when is_float(value), do: value
+  def encode_to_dict(value) when is_integer(value), do: value
+  def encode_to_dict(value) when is_nil(value), do: value
+  def encode_to_dict(_), do: {:error, "Unexpected type when encoding TopLevel.to_dict"}
+
   def decode_to_json(%{} = value), do: ToJSON.from_map(value)
   def decode_to_json(value) when is_float(value), do: value
   def decode_to_json(value) when is_integer(value), do: value
@@ -13940,6 +14096,18 @@ defmodule TopLevel do
   def encode_union(value) when is_nil(value), do: value
   def encode_union(_), do: {:error, "Unexpected type when encoding TopLevel.union"}
 
+  def decode_unmarshal_json(%{} = value), do: UnmarshalJSON.from_map(value)
+  def decode_unmarshal_json(value) when is_float(value), do: value
+  def decode_unmarshal_json(value) when is_integer(value), do: value
+  def decode_unmarshal_json(value) when is_nil(value), do: value
+  def decode_unmarshal_json(_), do: {:error, "Unexpected type when decoding TopLevel.unmarshal_json"}
+
+  def encode_unmarshal_json(%UnmarshalJSON{} = value), do: UnmarshalJSON.to_map(value)
+  def encode_unmarshal_json(value) when is_float(value), do: value
+  def encode_unmarshal_json(value) when is_integer(value), do: value
+  def encode_unmarshal_json(value) when is_nil(value), do: value
+  def encode_unmarshal_json(_), do: {:error, "Unexpected type when encoding TopLevel.unmarshal_json"}
+
   def decode_unowned(%{} = value), do: Unowned.from_map(value)
   def decode_unowned(value) when is_float(value), do: value
   def decode_unowned(value) when is_integer(value), do: value
@@ -14340,6 +14508,7 @@ defmodule TopLevel do
       format_exception: decode_format_exception(m["FormatException"]),
       friend: decode_friend(m["friend"]),
       from: decode_from(m["from"]),
+      from_dict: decode_from_dict(m["from_dict"]),
       from_json: decode_from_json(m["from_json"]),
       func: decode_func(m["func"]),
       function: decode_function(m["function"]),
@@ -14401,6 +14570,7 @@ defmodule TopLevel do
       long: decode_long(m["long"]),
       map: decode_map(m["map"]),
       map_entry: decode_map_entry(m["MapEntry"]),
+      marshal_json: decode_marshal_json(m["MarshalJSON"]),
       metadata_property_handling: decode_metadata_property_handling(m["metadata_property_handling"]),
       module: decode_module(m["module"]),
       mutable: decode_mutable(m["mutable"]),
@@ -14515,6 +14685,7 @@ defmodule TopLevel do
       time_only: decode_time_only(m["TimeOnly"]),
       time_only_converter: decode_time_only_converter(m["TimeOnlyConverter"]),
       time_zone: decode_time_zone(m["TimeZone"]),
+      to_dict: decode_to_dict(m["to_dict"]),
       to_json: decode_to_json(m["to_json"]),
       top_level: decode_top_level(m["top_level"]),
       to_string: decode_to_string(m["toString"]),
@@ -14534,6 +14705,7 @@ defmodule TopLevel do
       unchecked: decode_unchecked(m["unchecked"]),
       undefined: decode_undefined(m["undefined"]),
       union: decode_union(m["union"]),
+      unmarshal_json: decode_unmarshal_json(m["UnmarshalJSON"]),
       unowned: decode_unowned(m["unowned"]),
       unsafe: decode_unsafe(m["unsafe"]),
       unsigned: decode_unsigned(m["unsigned"]),
@@ -14690,6 +14862,7 @@ defmodule TopLevel do
       "FormatException" => encode_format_exception(struct.format_exception),
       "friend" => encode_friend(struct.friend),
       "from" => encode_from(struct.from),
+      "from_dict" => encode_from_dict(struct.from_dict),
       "from_json" => encode_from_json(struct.from_json),
       "func" => encode_func(struct.func),
       "function" => encode_function(struct.function),
@@ -14751,6 +14924,7 @@ defmodule TopLevel do
       "long" => encode_long(struct.long),
       "map" => encode_map(struct.map),
       "MapEntry" => encode_map_entry(struct.map_entry),
+      "MarshalJSON" => encode_marshal_json(struct.marshal_json),
       "metadata_property_handling" => encode_metadata_property_handling(struct.metadata_property_handling),
       "module" => encode_module(struct.module),
       "mutable" => encode_mutable(struct.mutable),
@@ -14865,6 +15039,7 @@ defmodule TopLevel do
       "TimeOnly" => encode_time_only(struct.time_only),
       "TimeOnlyConverter" => encode_time_only_converter(struct.time_only_converter),
       "TimeZone" => encode_time_zone(struct.time_zone),
+      "to_dict" => encode_to_dict(struct.to_dict),
       "to_json" => encode_to_json(struct.to_json),
       "top_level" => encode_top_level(struct.top_level),
       "toString" => encode_to_string(struct.to_string),
@@ -14884,6 +15059,7 @@ defmodule TopLevel do
       "unchecked" => encode_unchecked(struct.unchecked),
       "undefined" => encode_undefined(struct.undefined),
       "union" => encode_union(struct.union),
+      "UnmarshalJSON" => encode_unmarshal_json(struct.unmarshal_json),
       "unowned" => encode_unowned(struct.unowned),
       "unsafe" => encode_unsafe(struct.unsafe),
       "unsigned" => encode_unsigned(struct.unsigned),
diff --git a/base/schema-elm/test/inputs/schema/any.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/any.schema/default/QuickType.elm
index 3f06795..5bc2880 100644
--- a/base/schema-elm/test/inputs/schema/any.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/any.schema/default/QuickType.elm
@@ -48,11 +48,19 @@ encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
         [ ("foo", identity x.foo)
-        , ("values", Jenc.dict identity identity x.values)
+        , ("values", makeDictEncoder identity identity x.values)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/class-map-union.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/class-map-union.schema/default/QuickType.elm
index a4df8a7..6bccbcd 100644
--- a/base/schema-elm/test/inputs/schema/class-map-union.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/class-map-union.schema/default/QuickType.elm
@@ -57,7 +57,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("union", makeNullableEncoder (Jenc.dict identity encodeUnionValue) x.union)
+        [ ("union", makeNullableEncoder (makeDictEncoder identity encodeUnionValue) x.union)
         ]
 
 unionValue : Jdec.Decoder UnionValue
@@ -89,6 +89,14 @@ encodeUnionClass x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/class-with-additional.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/class-with-additional.schema/default/QuickType.elm
index 43a6887..bedfb02 100644
--- a/base/schema-elm/test/inputs/schema/class-with-additional.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/class-with-additional.schema/default/QuickType.elm
@@ -50,7 +50,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("map", makeNullableEncoder (Jenc.dict identity encodeMap) x.map)
+        [ ("map", makeNullableEncoder (makeDictEncoder identity encodeMap) x.map)
         ]
 
 map : Jdec.Decoder Map
@@ -67,6 +67,14 @@ encodeMap x = case x of
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/direct-union.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/direct-union.schema/default/QuickType.elm
index b8f0f54..9a4c1bc 100644
--- a/base/schema-elm/test/inputs/schema/direct-union.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/direct-union.schema/default/QuickType.elm
@@ -61,7 +61,7 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("stuff", Jenc.dict identity encodeThing x.stuff)
+        [ ("stuff", makeDictEncoder identity encodeThing x.stuff)
         ]
 
 thing : Jdec.Decoder Thing
@@ -97,10 +97,18 @@ encodeAnything x = case x of
     NullInAnything -> Jenc.null
     StringInAnything y -> Jenc.string y
     DoubleInAnything y -> Jenc.float y
-    AnythingMapInAnything y -> Jenc.dict identity identity y
+    AnythingMapInAnything y -> makeDictEncoder identity identity y
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/empty-object.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/empty-object.schema/default/QuickType.elm
index e1250b9..d90e676 100644
--- a/base/schema-elm/test/inputs/schema/empty-object.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/empty-object.schema/default/QuickType.elm
@@ -36,10 +36,18 @@ quickType : Jdec.Decoder QuickType
 quickType = Jdec.dict Jdec.value
 
 quickTypeToString : QuickType -> String
-quickTypeToString r = Jenc.encode 0 (Jenc.dict identity identity r)
+quickTypeToString r = Jenc.encode 0 (makeDictEncoder identity identity r)
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.elm
index dd84bf9..1fb6989 100644
--- a/base/schema-elm/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/go-schema-pattern-properties.schema/default/QuickType.elm
@@ -45,11 +45,19 @@ quickType =
 encodeQuickType : QuickType -> Jenc.Value
 encodeQuickType x =
     Jenc.object
-        [ ("map", Jenc.dict identity Jenc.int x.map)
+        [ ("map", makeDictEncoder identity Jenc.int x.map)
         ]
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
index 40c72a7..3edab40 100644
--- a/base/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/keyword-enum.schema/default/QuickType.elm
@@ -149,6 +149,7 @@ type EnumEnum
     | FormatException
     | Friend
     | From
+    | FromDict
     | FromJSON
     | Func
     | Function
@@ -208,6 +209,7 @@ type EnumEnum
     | Lock
     | Long
     | Map
+    | MarshalJSON
     | MapEntry
     | MetadataPropertyHandling
     | Module
@@ -327,6 +329,7 @@ type EnumEnum
     | ToJSON
     | TopLevel
     | ToString
+    | ToDict
     | Transient
     | EnumTrue
     | PurpleTrue
@@ -343,6 +346,7 @@ type EnumEnum
     | Unchecked
     | Undefined
     | Union
+    | UnmarshalJSON
     | UseSerializers
     | Unowned
     | Unsafe
@@ -516,6 +520,7 @@ enumEnum =
                 "FormatException" -> Jdec.succeed FormatException
                 "friend" -> Jdec.succeed Friend
                 "from" -> Jdec.succeed From
+                "from_dict" -> Jdec.succeed FromDict
                 "from_json" -> Jdec.succeed FromJSON
                 "func" -> Jdec.succeed Func
                 "function" -> Jdec.succeed Function
@@ -575,6 +580,7 @@ enumEnum =
                 "lock" -> Jdec.succeed Lock
                 "long" -> Jdec.succeed Long
                 "map" -> Jdec.succeed Map
+                "MarshalJSON" -> Jdec.succeed MarshalJSON
                 "MapEntry" -> Jdec.succeed MapEntry
                 "metadata_property_handling" -> Jdec.succeed MetadataPropertyHandling
                 "module" -> Jdec.succeed Module
@@ -694,6 +700,7 @@ enumEnum =
                 "to_json" -> Jdec.succeed ToJSON
                 "top_level" -> Jdec.succeed TopLevel
                 "toString" -> Jdec.succeed ToString
+                "to_dict" -> Jdec.succeed ToDict
                 "transient" -> Jdec.succeed Transient
                 "True" -> Jdec.succeed EnumTrue
                 "true" -> Jdec.succeed PurpleTrue
@@ -710,6 +717,7 @@ enumEnum =
                 "unchecked" -> Jdec.succeed Unchecked
                 "undefined" -> Jdec.succeed Undefined
                 "union" -> Jdec.succeed Union
+                "UnmarshalJSON" -> Jdec.succeed UnmarshalJSON
                 "UseSerializers" -> Jdec.succeed UseSerializers
                 "unowned" -> Jdec.succeed Unowned
                 "unsafe" -> Jdec.succeed Unsafe
@@ -860,6 +868,7 @@ encodeEnumEnum x = case x of
     FormatException -> Jenc.string "FormatException"
     Friend -> Jenc.string "friend"
     From -> Jenc.string "from"
+    FromDict -> Jenc.string "from_dict"
     FromJSON -> Jenc.string "from_json"
     Func -> Jenc.string "func"
     Function -> Jenc.string "function"
@@ -919,6 +928,7 @@ encodeEnumEnum x = case x of
     Lock -> Jenc.string "lock"
     Long -> Jenc.string "long"
     Map -> Jenc.string "map"
+    MarshalJSON -> Jenc.string "MarshalJSON"
     MapEntry -> Jenc.string "MapEntry"
     MetadataPropertyHandling -> Jenc.string "metadata_property_handling"
     Module -> Jenc.string "module"
@@ -1038,6 +1048,7 @@ encodeEnumEnum x = case x of
     ToJSON -> Jenc.string "to_json"
     TopLevel -> Jenc.string "top_level"
     ToString -> Jenc.string "toString"
+    ToDict -> Jenc.string "to_dict"
     Transient -> Jenc.string "transient"
     EnumTrue -> Jenc.string "True"
     PurpleTrue -> Jenc.string "true"
@@ -1054,6 +1065,7 @@ encodeEnumEnum x = case x of
     Unchecked -> Jenc.string "unchecked"
     Undefined -> Jenc.string "undefined"
     Union -> Jenc.string "union"
+    UnmarshalJSON -> Jenc.string "UnmarshalJSON"
     UseSerializers -> Jenc.string "UseSerializers"
     Unowned -> Jenc.string "unowned"
     Unsafe -> Jenc.string "unsafe"
diff --git a/base/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
index 1421eff..cd38620 100644
--- a/base/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/keyword-unions.schema/default/QuickType.elm
@@ -123,6 +123,7 @@ module QuickType exposing
     , FormatException
     , Friend
     , From
+    , FromDict
     , FromJSON
     , Func
     , Function
@@ -179,6 +180,7 @@ module QuickType exposing
     , Long
     , Map
     , MapEntry
+    , MarshalJSON
     , MetadataPropertyHandling
     , Mutable
     , Mutating
@@ -315,6 +317,7 @@ module QuickType exposing
     , TimeOnly
     , TimeOnlyConverter
     , TimeZone
+    , ToDict
     , ToJSON
     , ToString
     , TopLevel
@@ -331,6 +334,7 @@ module QuickType exposing
     , Unchecked
     , Undefined
     , Union
+    , UnmarshalJSON
     , Unowned
     , Unsafe
     , Unsigned
@@ -461,6 +465,7 @@ module QuickType exposing
     , UnionFormatException(..)
     , UnionFriend(..)
     , UnionFrom(..)
+    , UnionFromDict(..)
     , UnionFromJSON(..)
     , UnionFunc(..)
     , UnionFunction(..)
@@ -517,6 +522,7 @@ module QuickType exposing
     , UnionLong(..)
     , UnionMap(..)
     , UnionMapEntry(..)
+    , UnionMarshalJSON(..)
     , UnionMetadataPropertyHandling(..)
     , UnionMutable(..)
     , UnionMutating(..)
@@ -653,6 +659,7 @@ module QuickType exposing
     , UnionTimeOnly(..)
     , UnionTimeOnlyConverter(..)
     , UnionTimeZone(..)
+    , UnionToDict(..)
     , UnionToJSON(..)
     , UnionToString(..)
     , UnionTopLevel(..)
@@ -669,6 +676,7 @@ module QuickType exposing
     , UnionUnchecked(..)
     , UnionUndefined(..)
     , UnionUnionUnion(..)
+    , UnionUnmarshalJSON(..)
     , UnionUnowned(..)
     , UnionUnsafe(..)
     , UnionUnsigned(..)
@@ -821,6 +829,7 @@ type alias QuickType =
     , formatException : Maybe UnionFormatException
     , friend : Maybe UnionFriend
     , from : Maybe UnionFrom
+    , fromDict : Maybe UnionFromDict
     , fromJSON : Maybe UnionFromJSON
     , func : Maybe UnionFunc
     , function : Maybe UnionFunction
@@ -882,6 +891,7 @@ type alias QuickType =
     , long : Maybe UnionLong
     , map : Maybe UnionMap
     , mapEntry : Maybe UnionMapEntry
+    , marshalJSON : Maybe UnionMarshalJSON
     , metadataPropertyHandling : Maybe UnionMetadataPropertyHandling
     , quickTypeModule : Maybe UnionModule
     , mutable : Maybe UnionMutable
@@ -996,6 +1006,7 @@ type alias QuickType =
     , timeOnly : Maybe UnionTimeOnly
     , timeOnlyConverter : Maybe UnionTimeOnlyConverter
     , timeZone : Maybe UnionTimeZone
+    , toDict : Maybe UnionToDict
     , toJSON : Maybe UnionToJSON
     , topLevel : Maybe UnionTopLevel
     , toString : Maybe UnionToString
@@ -1015,6 +1026,7 @@ type alias QuickType =
     , unchecked : Maybe UnionUnchecked
     , undefined : Maybe UnionUndefined
     , union : Maybe UnionUnionUnion
+    , unmarshalJSON : Maybe UnionUnmarshalJSON
     , unowned : Maybe UnionUnowned
     , unsafe : Maybe UnionUnsafe
     , unsigned : Maybe UnionUnsigned
@@ -1904,6 +1916,14 @@ type alias From =
     {
     }
 
+type UnionFromDict
+    = DoubleInUnionFromDict Float
+    | FromDictInUnionFromDict FromDict
+
+type alias FromDict =
+    {
+    }
+
 type UnionFromJSON
     = DoubleInUnionFromJSON Float
     | FromJSONInUnionFromJSON FromJSON
@@ -2352,6 +2372,14 @@ type alias MapEntry =
     {
     }
 
+type UnionMarshalJSON
+    = DoubleInUnionMarshalJSON Float
+    | MarshalJSONInUnionMarshalJSON MarshalJSON
+
+type alias MarshalJSON =
+    {
+    }
+
 type UnionMetadataPropertyHandling
     = DoubleInUnionMetadataPropertyHandling Float
     | MetadataPropertyHandlingInUnionMetadataPropertyHandling MetadataPropertyHandling
@@ -3440,6 +3468,14 @@ type alias TimeZone =
     {
     }
 
+type UnionToDict
+    = DoubleInUnionToDict Float
+    | ToDictInUnionToDict ToDict
+
+type alias ToDict =
+    {
+    }
+
 type UnionToJSON
     = DoubleInUnionToJSON Float
     | ToJSONInUnionToJSON ToJSON
@@ -3568,6 +3604,14 @@ type alias Union =
     {
     }
 
+type UnionUnmarshalJSON
+    = DoubleInUnionUnmarshalJSON Float
+    | UnmarshalJSONInUnionUnmarshalJSON UnmarshalJSON
+
+type alias UnmarshalJSON =
+    {
+    }
+
 type UnionUnowned
     = DoubleInUnionUnowned Float
     | UnownedInUnionUnowned Unowned
@@ -3880,6 +3924,7 @@ quickType =
         |> Jpipe.custom (optionalField "FormatException" (Jdec.map Just unionFormatException) Nothing)
         |> Jpipe.custom (optionalField "friend" (Jdec.map Just unionFriend) Nothing)
         |> Jpipe.custom (optionalField "from" (Jdec.map Just unionFrom) Nothing)
+        |> Jpipe.custom (optionalField "from_dict" (Jdec.map Just unionFromDict) Nothing)
         |> Jpipe.custom (optionalField "from_json" (Jdec.map Just unionFromJSON) Nothing)
         |> Jpipe.custom (optionalField "func" (Jdec.map Just unionFunc) Nothing)
         |> Jpipe.custom (optionalField "function" (Jdec.map Just unionFunction) Nothing)
@@ -3941,6 +3986,7 @@ quickType =
         |> Jpipe.custom (optionalField "long" (Jdec.map Just unionLong) Nothing)
         |> Jpipe.custom (optionalField "map" (Jdec.map Just unionMap) Nothing)
         |> Jpipe.custom (optionalField "MapEntry" (Jdec.map Just unionMapEntry) Nothing)
+        |> Jpipe.custom (optionalField "MarshalJSON" (Jdec.map Just unionMarshalJSON) Nothing)
         |> Jpipe.custom (optionalField "metadata_property_handling" (Jdec.map Just unionMetadataPropertyHandling) Nothing)
         |> Jpipe.custom (optionalField "module" (Jdec.map Just unionModule) Nothing)
         |> Jpipe.custom (optionalField "mutable" (Jdec.map Just unionMutable) Nothing)
@@ -4055,6 +4101,7 @@ quickType =
         |> Jpipe.custom (optionalField "TimeOnly" (Jdec.map Just unionTimeOnly) Nothing)
         |> Jpipe.custom (optionalField "TimeOnlyConverter" (Jdec.map Just unionTimeOnlyConverter) Nothing)
         |> Jpipe.custom (optionalField "TimeZone" (Jdec.map Just unionTimeZone) Nothing)
+        |> Jpipe.custom (optionalField "to_dict" (Jdec.map Just unionToDict) Nothing)
         |> Jpipe.custom (optionalField "to_json" (Jdec.map Just unionToJSON) Nothing)
         |> Jpipe.custom (optionalField "top_level" (Jdec.map Just unionTopLevel) Nothing)
         |> Jpipe.custom (optionalField "toString" (Jdec.map Just unionToString) Nothing)
@@ -4074,6 +4121,7 @@ quickType =
         |> Jpipe.custom (optionalField "unchecked" (Jdec.map Just unionUnchecked) Nothing)
         |> Jpipe.custom (optionalField "undefined" (Jdec.map Just unionUndefined) Nothing)
         |> Jpipe.custom (optionalField "union" (Jdec.map Just unionUnionUnion) Nothing)
+        |> Jpipe.custom (optionalField "UnmarshalJSON" (Jdec.map Just unionUnmarshalJSON) Nothing)
         |> Jpipe.custom (optionalField "unowned" (Jdec.map Just unionUnowned) Nothing)
         |> Jpipe.custom (optionalField "unsafe" (Jdec.map Just unionUnsafe) Nothing)
         |> Jpipe.custom (optionalField "unsigned" (Jdec.map Just unionUnsigned) Nothing)
@@ -4223,6 +4271,7 @@ encodeQuickType x =
         , ("FormatException", makeNullableEncoder encodeUnionFormatException x.formatException)
         , ("friend", makeNullableEncoder encodeUnionFriend x.friend)
         , ("from", makeNullableEncoder encodeUnionFrom x.from)
+        , ("from_dict", makeNullableEncoder encodeUnionFromDict x.fromDict)
         , ("from_json", makeNullableEncoder encodeUnionFromJSON x.fromJSON)
         , ("func", makeNullableEncoder encodeUnionFunc x.func)
         , ("function", makeNullableEncoder encodeUnionFunction x.function)
@@ -4284,6 +4333,7 @@ encodeQuickType x =
         , ("long", makeNullableEncoder encodeUnionLong x.long)
         , ("map", makeNullableEncoder encodeUnionMap x.map)
         , ("MapEntry", makeNullableEncoder encodeUnionMapEntry x.mapEntry)
+        , ("MarshalJSON", makeNullableEncoder encodeUnionMarshalJSON x.marshalJSON)
         , ("metadata_property_handling", makeNullableEncoder encodeUnionMetadataPropertyHandling x.metadataPropertyHandling)
         , ("module", makeNullableEncoder encodeUnionModule x.quickTypeModule)
         , ("mutable", makeNullableEncoder encodeUnionMutable x.mutable)
@@ -4398,6 +4448,7 @@ encodeQuickType x =
         , ("TimeOnly", makeNullableEncoder encodeUnionTimeOnly x.timeOnly)
         , ("TimeOnlyConverter", makeNullableEncoder encodeUnionTimeOnlyConverter x.timeOnlyConverter)
         , ("TimeZone", makeNullableEncoder encodeUnionTimeZone x.timeZone)
+        , ("to_dict", makeNullableEncoder encodeUnionToDict x.toDict)
         , ("to_json", makeNullableEncoder encodeUnionToJSON x.toJSON)
         , ("top_level", makeNullableEncoder encodeUnionTopLevel x.topLevel)
         , ("toString", makeNullableEncoder encodeUnionToString x.toString)
@@ -4417,6 +4468,7 @@ encodeQuickType x =
         , ("unchecked", makeNullableEncoder encodeUnionUnchecked x.unchecked)
         , ("undefined", makeNullableEncoder encodeUnionUndefined x.undefined)
         , ("union", makeNullableEncoder encodeUnionUnionUnion x.union)
+        , ("UnmarshalJSON", makeNullableEncoder encodeUnionUnmarshalJSON x.unmarshalJSON)
         , ("unowned", makeNullableEncoder encodeUnionUnowned x.unowned)
         , ("unsafe", makeNullableEncoder encodeUnionUnsafe x.unsafe)
         , ("unsigned", makeNullableEncoder encodeUnionUnsigned x.unsigned)
@@ -6818,6 +6870,28 @@ encodeFrom x =
         [
         ]
 
+unionFromDict : Jdec.Decoder UnionFromDict
+unionFromDict =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionFromDict Jdec.float
+        , Jdec.map FromDictInUnionFromDict fromDict
+        ]
+
+encodeUnionFromDict : UnionFromDict -> Jenc.Value
+encodeUnionFromDict x = case x of
+    DoubleInUnionFromDict y -> Jenc.float y
+    FromDictInUnionFromDict y -> encodeFromDict y
+
+fromDict : Jdec.Decoder FromDict
+fromDict =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> FromDict)
+
+encodeFromDict : FromDict -> Jenc.Value
+encodeFromDict x =
+    Jenc.object
+        [
+        ]
+
 unionFromJSON : Jdec.Decoder UnionFromJSON
 unionFromJSON =
     Jdec.oneOf
@@ -8050,6 +8124,28 @@ encodeMapEntry x =
         [
         ]
 
+unionMarshalJSON : Jdec.Decoder UnionMarshalJSON
+unionMarshalJSON =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionMarshalJSON Jdec.float
+        , Jdec.map MarshalJSONInUnionMarshalJSON marshalJSON
+        ]
+
+encodeUnionMarshalJSON : UnionMarshalJSON -> Jenc.Value
+encodeUnionMarshalJSON x = case x of
+    DoubleInUnionMarshalJSON y -> Jenc.float y
+    MarshalJSONInUnionMarshalJSON y -> encodeMarshalJSON y
+
+marshalJSON : Jdec.Decoder MarshalJSON
+marshalJSON =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> MarshalJSON)
+
+encodeMarshalJSON : MarshalJSON -> Jenc.Value
+encodeMarshalJSON x =
+    Jenc.object
+        [
+        ]
+
 unionMetadataPropertyHandling : Jdec.Decoder UnionMetadataPropertyHandling
 unionMetadataPropertyHandling =
     Jdec.oneOf
@@ -11042,6 +11138,28 @@ encodeTimeZone x =
         [
         ]
 
+unionToDict : Jdec.Decoder UnionToDict
+unionToDict =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionToDict Jdec.float
+        , Jdec.map ToDictInUnionToDict toDict
+        ]
+
+encodeUnionToDict : UnionToDict -> Jenc.Value
+encodeUnionToDict x = case x of
+    DoubleInUnionToDict y -> Jenc.float y
+    ToDictInUnionToDict y -> encodeToDict y
+
+toDict : Jdec.Decoder ToDict
+toDict =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> ToDict)
+
+encodeToDict : ToDict -> Jenc.Value
+encodeToDict x =
+    Jenc.object
+        [
+        ]
+
 unionToJSON : Jdec.Decoder UnionToJSON
 unionToJSON =
     Jdec.oneOf
@@ -11394,6 +11512,28 @@ encodeUnion x =
         [
         ]
 
+unionUnmarshalJSON : Jdec.Decoder UnionUnmarshalJSON
+unionUnmarshalJSON =
+    Jdec.oneOf
+        [ Jdec.map DoubleInUnionUnmarshalJSON Jdec.float
+        , Jdec.map UnmarshalJSONInUnionUnmarshalJSON unmarshalJSON
+        ]
+
+encodeUnionUnmarshalJSON : UnionUnmarshalJSON -> Jenc.Value
+encodeUnionUnmarshalJSON x = case x of
+    DoubleInUnionUnmarshalJSON y -> Jenc.float y
+    UnmarshalJSONInUnionUnmarshalJSON y -> encodeUnmarshalJSON y
+
+unmarshalJSON : Jdec.Decoder UnmarshalJSON
+unmarshalJSON =
+    Jdec.dict Jdec.value |> Jdec.map (\_ -> UnmarshalJSON)
+
+encodeUnmarshalJSON : UnmarshalJSON -> Jenc.Value
+encodeUnmarshalJSON x =
+    Jenc.object
+        [
+        ]
+
 unionUnowned : Jdec.Decoder UnionUnowned
 unionUnowned =
     Jdec.oneOf
diff --git a/base/schema-elm/test/inputs/schema/unevaluated-properties.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/unevaluated-properties.schema/default/QuickType.elm
index b34a1be..a9d0187 100644
--- a/base/schema-elm/test/inputs/schema/unevaluated-properties.schema/default/QuickType.elm
+++ b/head/schema-elm/test/inputs/schema/unevaluated-properties.schema/default/QuickType.elm
@@ -88,7 +88,7 @@ encodeConfig x =
     Jenc.object
         [ ("closed", makeNullableEncoder encodeClosed x.closed)
         , ("name", makeNullableEncoder Jenc.string x.name)
-        , ("settings", makeNullableEncoder (Jenc.dict identity (Jenc.list encodeItem)) x.settings)
+        , ("settings", makeNullableEncoder (makeDictEncoder identity (Jenc.list encodeItem)) x.settings)
         ]
 
 closed : Jdec.Decoder Closed
@@ -138,6 +138,14 @@ encodeItem x =
 
 --- encoder helpers
 
+makeDictEncoder : (String -> String) -> (a -> Jenc.Value) -> Dict String a -> Jenc.Value
+makeDictEncoder f m r =
+    r
+        |> Dict.toList
+        |> List.map (\( x, y ) -> Jenc.encode 0 (Jenc.string (f x)) ++ ":" ++ Jenc.encode 0 (m y))
+        |> String.join ","
+        |> (\str -> Jdec.decodeString Jdec.value ("{" ++ str ++ "}") |> Result.withDefault Jenc.null)
+
 makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
 makeNullableEncoder f m =
     case m of
diff --git a/base/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
index 782c410..a5164dd 100644
--- a/base/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
index 30facbe..5da9167 100644
--- a/base/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
index 9b41bf2..7998331 100644
--- a/base/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
index de3bb1e..eef97f8 100644
--- a/base/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
index 0ab5f8f..b178219 100644
--- a/base/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
index e050014..a08a6ca 100644
--- a/base/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
index f8747ce..4cb3b4a 100644
--- a/base/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
index 319b5d0..7987a08 100644
--- a/base/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/head/schema-flow/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.js b/head/schema-flow/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.js
new file mode 100644
index 0000000..5874b2e
--- /dev/null
+++ b/head/schema-flow/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.js
@@ -0,0 +1,217 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    +map?: Map;
+};
+
+export type Map = {
+    +foo?: number;
+    +[property: string]: boolean | number | void;
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = Object.create(null);
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return Object.setPrototypeOf(result, Object.prototype);
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && (typeof val === "string" || val instanceof Date)) return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "map", js: "map", typ: u(undefined, r("Map")) },
+    ], false),
+    "Map": o([
+        { json: "foo", js: "foo", typ: u(undefined, 3.14) },
+    ], true),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
index 03492d1..3b225fc 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
index 7267743..1b6ba99 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
index 3883ea0..57036a2 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
index a6c6ee5..6de87d7 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
index bfdefce..729be21 100644
--- a/base/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
index 461857e..6544d2d 100644
--- a/base/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
index fd3804b..7c4a34e 100644
--- a/base/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
index 159b882..5f936fb 100644
--- a/base/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
index 5679fa7..2c0853a 100644
--- a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
index 9529bb0..05ca456 100644
--- a/base/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
index 460c470..dd88f13 100644
--- a/base/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
index 8a80a17..96fb2bb 100644
--- a/base/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -157,7 +157,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
index 953338d..230fa76 100644
--- a/base/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
index 3b57852..4c905fd 100644
--- a/base/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
index da2bc16..d5cbc15 100644
--- a/base/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
index 6d8d098..5a829ad 100644
--- a/base/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
index b984eb2..9f9027a 100644
--- a/base/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
index 6fe5b6c..f891810 100644
--- a/base/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
index 022ded2..4ee22ce 100644
--- a/base/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
index 35ad8a1..109b999 100644
--- a/base/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
index 4142df5..e279ded 100644
--- a/base/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
index 94dd602..67f936a 100644
--- a/base/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
index 0da7b3c..5fc0b1b 100644
--- a/base/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
index 282e724..a3d1c8c 100644
--- a/base/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
index 3e5b1af..5142321 100644
--- a/base/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
index 7c09067..675022a 100644
--- a/base/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
index 028af63..ce7c5c9 100644
--- a/base/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
index c7d038a..7a0af2d 100644
--- a/base/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
index c434c99..4d848c3 100644
--- a/base/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
index ef28a5e..1466db9 100644
--- a/base/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
index 51b83f3..fe20f84 100644
--- a/base/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
index 58885fc..41e39c5 100644
--- a/base/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
index 7ff9370..385add2 100644
--- a/base/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
index 57ef2c0..a894724 100644
--- a/base/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index 055ed86..bb6f9dc 100644
--- a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -136,6 +136,7 @@ export type Enum =
     | "FormatException"
     | "friend"
     | "from"
+    | "from_dict"
     | "from_json"
     | "func"
     | "function"
@@ -195,6 +196,7 @@ export type Enum =
     | "lock"
     | "long"
     | "map"
+    | "MarshalJSON"
     | "MapEntry"
     | "metadata_property_handling"
     | "module"
@@ -314,6 +316,7 @@ export type Enum =
     | "to_json"
     | "top_level"
     | "toString"
+    | "to_dict"
     | "transient"
     | "True"
     | "true"
@@ -330,6 +333,7 @@ export type Enum =
     | "unchecked"
     | "undefined"
     | "union"
+    | "UnmarshalJSON"
     | "UseSerializers"
     | "unowned"
     | "unsafe"
@@ -449,7 +453,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -460,7 +464,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -665,6 +669,7 @@ const typeMap: any = {
         "FormatException",
         "friend",
         "from",
+        "from_dict",
         "from_json",
         "func",
         "function",
@@ -724,6 +729,7 @@ const typeMap: any = {
         "lock",
         "long",
         "map",
+        "MarshalJSON",
         "MapEntry",
         "metadata_property_handling",
         "module",
@@ -843,6 +849,7 @@ const typeMap: any = {
         "to_json",
         "top_level",
         "toString",
+        "to_dict",
         "transient",
         "True",
         "true",
@@ -859,6 +866,7 @@ const typeMap: any = {
         "unchecked",
         "undefined",
         "union",
+        "UnmarshalJSON",
         "UseSerializers",
         "unowned",
         "unsafe",
diff --git a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index c364e96..99bbc83 100644
--- a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -132,6 +132,7 @@ export type TopLevel = {
     FormatException?:            UnionFormatException;
     friend?:                     UnionFriend;
     from?:                       UnionFrom;
+    from_dict?:                  UnionFromDict;
     from_json?:                  UnionFromJSON;
     func?:                       UnionFunc;
     function?:                   UnionFunction;
@@ -193,6 +194,7 @@ export type TopLevel = {
     long?:                       UnionLong;
     map?:                        UnionMap;
     MapEntry?:                   UnionMapEntry;
+    MarshalJSON?:                UnionMarshalJSON;
     metadata_property_handling?: UnionMetadataPropertyHandling;
     module?:                     UnionModule;
     mutable?:                    UnionMutable;
@@ -307,6 +309,7 @@ export type TopLevel = {
     TimeOnly?:                   UnionTimeOnly;
     TimeOnlyConverter?:          UnionTimeOnlyConverter;
     TimeZone?:                   UnionTimeZone;
+    to_dict?:                    UnionToDict;
     to_json?:                    UnionToJSON;
     top_level?:                  UnionTopLevel;
     toString?:                   UnionToString;
@@ -326,6 +329,7 @@ export type TopLevel = {
     unchecked?:                  UnionUnchecked;
     undefined?:                  UnionUndefined;
     union?:                      UnionUnionUnion;
+    UnmarshalJSON?:              UnionUnmarshalJSON;
     unowned?:                    UnionUnowned;
     unsafe?:                     UnionUnsafe;
     unsigned?:                   UnionUnsigned;
@@ -542,6 +546,11 @@ export type UnionMapEntry = MapEntry | number;
 export type MapEntry = {
 };
 
+export type UnionMarshalJSON = MarshalJSON | number;
+
+export type MarshalJSON = {
+};
+
 export type UnionNO = No | number;
 
 export type No = {
@@ -677,6 +686,11 @@ export type UnionUUID = UUID | number;
 export type UUID = {
 };
 
+export type UnionUnmarshalJSON = UnmarshalJSON | number;
+
+export type UnmarshalJSON = {
+};
+
 export type UnionUseSerializers = UseSerializers | number;
 
 export type UseSerializers = {
@@ -1202,6 +1216,11 @@ export type UnionFrom = From | number;
 export type From = {
 };
 
+export type UnionFromDict = FromDict | number;
+
+export type FromDict = {
+};
+
 export type UnionFromJSON = FromJSON | number;
 
 export type FromJSON = {
@@ -1872,6 +1891,11 @@ export type UnionToString = ToString | number;
 export type ToString = {
 };
 
+export type UnionToDict = ToDict | number;
+
+export type ToDict = {
+};
+
 export type UnionToJSON = ToJSON | number;
 
 export type ToJSON = {
@@ -2136,7 +2160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -2147,7 +2171,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -2350,6 +2374,7 @@ const typeMap: any = {
         { json: "FormatException", js: "FormatException", typ: u(undefined, u(r("FormatException"), 3.14)) },
         { json: "friend", js: "friend", typ: u(undefined, u(r("Friend"), 3.14)) },
         { json: "from", js: "from", typ: u(undefined, u(r("From"), 3.14)) },
+        { json: "from_dict", js: "from_dict", typ: u(undefined, u(r("FromDict"), 3.14)) },
         { json: "from_json", js: "from_json", typ: u(undefined, u(r("FromJSON"), 3.14)) },
         { json: "func", js: "func", typ: u(undefined, u(r("Func"), 3.14)) },
         { json: "function", js: "function", typ: u(undefined, u(r("Function"), 3.14)) },
@@ -2411,6 +2436,7 @@ const typeMap: any = {
         { json: "long", js: "long", typ: u(undefined, u(r("Long"), 3.14)) },
         { json: "map", js: "map", typ: u(undefined, u(r("Map"), 3.14)) },
         { json: "MapEntry", js: "MapEntry", typ: u(undefined, u(r("MapEntry"), 3.14)) },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: u(undefined, u(r("MarshalJSON"), 3.14)) },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: u(undefined, u(r("MetadataPropertyHandling"), 3.14)) },
         { json: "module", js: "module", typ: u(undefined, u(r("Module"), 3.14)) },
         { json: "mutable", js: "mutable", typ: u(undefined, u(r("Mutable"), 3.14)) },
@@ -2525,6 +2551,7 @@ const typeMap: any = {
         { json: "TimeOnly", js: "TimeOnly", typ: u(undefined, u(r("TimeOnly"), 3.14)) },
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: u(undefined, u(r("TimeOnlyConverter"), 3.14)) },
         { json: "TimeZone", js: "TimeZone", typ: u(undefined, u(r("TimeZone"), 3.14)) },
+        { json: "to_dict", js: "to_dict", typ: u(undefined, u(r("ToDict"), 3.14)) },
         { json: "to_json", js: "to_json", typ: u(undefined, u(r("ToJSON"), 3.14)) },
         { json: "top_level", js: "top_level", typ: u(undefined, u(r("TopLevelClass"), 3.14)) },
         { json: "toString", js: "toString", typ: u(undefined, u(r("ToString"), 3.14)) },
@@ -2544,6 +2571,7 @@ const typeMap: any = {
         { json: "unchecked", js: "unchecked", typ: u(undefined, u(r("Unchecked"), 3.14)) },
         { json: "undefined", js: "undefined", typ: u(undefined, u(r("Undefined"), 3.14)) },
         { json: "union", js: "union", typ: u(undefined, u(r("Union"), 3.14)) },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: u(undefined, u(r("UnmarshalJSON"), 3.14)) },
         { json: "unowned", js: "unowned", typ: u(undefined, u(r("Unowned"), 3.14)) },
         { json: "unsafe", js: "unsafe", typ: u(undefined, u(r("Unsafe"), 3.14)) },
         { json: "unsigned", js: "unsigned", typ: u(undefined, u(r("Unsigned"), 3.14)) },
@@ -2644,6 +2672,8 @@ const typeMap: any = {
     ], false),
     "MapEntry": o([
     ], false),
+    "MarshalJSON": o([
+    ], false),
     "No": o([
     ], false),
     "NSError": o([
@@ -2698,6 +2728,8 @@ const typeMap: any = {
     ], false),
     "UUID": o([
     ], false),
+    "UnmarshalJSON": o([
+    ], false),
     "UseSerializers": o([
     ], false),
     "Utf8JSONReader": o([
@@ -2908,6 +2940,8 @@ const typeMap: any = {
     ], false),
     "From": o([
     ], false),
+    "FromDict": o([
+    ], false),
     "FromJSON": o([
     ], false),
     "Func": o([
@@ -3176,6 +3210,8 @@ const typeMap: any = {
     ], false),
     "ToString": o([
     ], false),
+    "ToDict": o([
+    ], false),
     "ToJSON": o([
     ], false),
     "TopLevelClass": o([
diff --git a/base/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
index 87eb58e..a9f72b4 100644
--- a/base/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
index 17c0e10..b6fd5dc 100644
--- a/base/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
index 669266c..d76e536 100644
--- a/base/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
index 60be51d..f9bfe28 100644
--- a/base/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
index d58225c..544f02e 100644
--- a/base/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
index bd4537b..f6ce594 100644
--- a/base/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
index 61a8238..dcac16a 100644
--- a/base/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
index cbf3645..cd37458 100644
--- a/base/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
index 11caa97..9944441 100644
--- a/base/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
index 63ee252..7c3fec8 100644
--- a/base/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
index b682aea..267dd99 100644
--- a/base/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
index 695aabc..ed1bd94 100644
--- a/base/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
index e3ef54d..69b48fe 100644
--- a/base/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
index c6e94b4..334c735 100644
--- a/base/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
index 3afc5fb..8c3fb18 100644
--- a/base/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
index 5c5a63e..c5b4f92 100644
--- a/base/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
index 5708ba1..75acb19 100644
--- a/base/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js
index 9e8c173..c4e3d71 100644
--- a/base/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
index 7259f33..ba6097d 100644
--- a/base/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
index 8139ed9..9fcf003 100644
--- a/base/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
index de153a7..73e6a33 100644
--- a/base/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
index b1766ee..566c3d1 100644
--- a/base/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
index fd3804b..7c4a34e 100644
--- a/base/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
index 17c0e10..b6fd5dc 100644
--- a/base/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
index bfa4e9f..b950512 100644
--- a/base/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
@@ -210,7 +210,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
index d35b9e7..5753eef 100644
--- a/base/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
index 99c86ad..26a7fbe 100644
--- a/base/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
index d35b9e7..5753eef 100644
--- a/base/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
index 9868a9b..52051ec 100644
--- a/base/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
index 2f38303..914ccc6 100644
--- a/base/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
index 17c0e10..b6fd5dc 100644
--- a/base/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
index f385a6f..ef246b5 100644
--- a/base/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
index 6db6cca..37f8c58 100644
--- a/base/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
index e182a8b..1cdf5bf 100644
--- a/base/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
index c8d59da..aba0687 100644
--- a/base/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
index bd2bada..e8add90 100644
--- a/base/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
index 0a3be23..0ef5021 100644
--- a/base/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
index 8c9f7fb..43d4ea8 100644
--- a/base/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
index ab0a898..7a5e670 100644
--- a/base/schema-flow/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
index 0e237ee..6fc2761 100644
--- a/base/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
index 2b31d51..d51a622 100644
--- a/base/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
index af3f6dc..12ba498 100644
--- a/base/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
index b30ae68..00c6cf9 100644
--- a/base/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
index e870aef..55f0d57 100644
--- a/base/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
@@ -6199,7 +6199,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -6210,7 +6210,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
index 9b48eb2..2b936c1 100644
--- a/base/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
+++ b/head/schema-golang/test/inputs/schema/keyword-enum.schema/default/quicktype.go
@@ -146,6 +146,7 @@ const (
 	FormatException            EnumEnum = "FormatException"
 	Friend                     EnumEnum = "friend"
 	From                       EnumEnum = "from"
+	FromDict                   EnumEnum = "from_dict"
 	FromJSON                   EnumEnum = "from_json"
 	Func                       EnumEnum = "func"
 	Function                   EnumEnum = "function"
@@ -205,6 +206,7 @@ const (
 	Lock                       EnumEnum = "lock"
 	Long                       EnumEnum = "long"
 	Map                        EnumEnum = "map"
+	MarshalJSON                EnumEnum = "MarshalJSON"
 	MapEntry                   EnumEnum = "MapEntry"
 	MetadataPropertyHandling   EnumEnum = "metadata_property_handling"
 	Module                     EnumEnum = "module"
@@ -324,6 +326,7 @@ const (
 	ToJSON                     EnumEnum = "to_json"
 	EnumTopLevel               EnumEnum = "top_level"
 	ToString                   EnumEnum = "toString"
+	ToDict                     EnumEnum = "to_dict"
 	Transient                  EnumEnum = "transient"
 	True                       EnumEnum = "True"
 	EnumTrue                   EnumEnum = "true"
@@ -340,6 +343,7 @@ const (
 	Unchecked                  EnumEnum = "unchecked"
 	Undefined                  EnumEnum = "undefined"
 	Union                      EnumEnum = "union"
+	UnmarshalJSON              EnumEnum = "UnmarshalJSON"
 	UseSerializers             EnumEnum = "UseSerializers"
 	Unowned                    EnumEnum = "unowned"
 	Unsafe                     EnumEnum = "unsafe"
@@ -373,7 +377,7 @@ func (x *EnumEnum) UnmarshalJSON(data []byte) error {
 	var value string
 	if err := json.Unmarshal(data, &value); err != nil { return err }
 	switch EnumEnum(value) {
-	case Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, ASM, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBOOL, EnumBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromJSON, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, ID, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, ISODateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, JSON, JSONConverter, JSONSerializer, JSONToken, JSONWriter, JSONAny, JSONCodingKey, JSONDecoder, JSONEncoder, JSONException, JSONGenerator, JSONNode, JSONNull, JSONParser, JSONReader, JSONTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NSObject, NoSuchMethod, Not, NotEq, NSError, NSString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJSON, EnumTopLevel, ToString, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JSONReader, Utf8JSONWriter, UUID, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy: *x = EnumEnum(value); return nil
+	case Empty, Bool, Complex, Imaginery, Abstract, Alignas, Alignof, And, AndEq, Any, EnumAny, Array, As, ASM, Assert, Associatedtype, Associativity, Async, Atomic, AtomicCancel, AtomicCommit, AtomicNoexcept, Auto, Await, Base, Bitand, Bitor, EnumBOOL, EnumBool, Boolean, Break, Bycopy, Byref, Byte, Calendar, Case, Catch, Chan, Char, Char16T, Char32T, Checked, Class, EnumClass, Clone, CoAwait, CoReturn, CoYield, Codable, CodingKey, CodingKeys, Compl, Concept, Console, Const, ConstCast, Constexpr, Constructor, Continue, Convenience, Convert, Converter, CultureInfo, Date, DateParseHandling, DateFormatter, DateOnly, DateOnlyConverter, DateTime, DateTimeStyles, Debugger, Decimal, Declare, Decltype, DecodeString, Decoder, DecodingError, Def, Default, Defer, Deinit, Del, Delegate, Delete, Dict, Dictionary, DidSet, Do, Double, Dynamic, DynamicCast, Elif, Else, EncodeQuickType, Encoder, Enum, EnumValues, Equatable, EqualityContract, Event, Except, Exception, Explicit, Export, Exposing, Extends, Extension, Extern, Fallthrough, False, EnumFalse, Fileprivate, Final, Finally, Fixed, Float, For, Foreach, FormatException, Friend, From, FromDict, FromJSON, Func, Function, Get, Global, Go, Goto, Guard, Hashable, HashCode, Hasher, HasOwnProperty, ID, If, Imp, Implements, Implicit, Import, In, Indirect, Infix, Init, Inline, Inout, Instanceof, Int, Interface, Internal, ISODateTimeOffsetConverter, Iterable, Is, Jdec, Jenc, Jpipe, JSON, JSONConverter, JSONSerializer, JSONToken, JSONWriter, JSONAny, JSONCodingKey, JSONDecoder, JSONEncoder, JSONException, JSONGenerator, JSONNode, JSONNull, JSONParser, JSONReader, JSONTokenType, Lambda, Lazy, Left, Let, List, Locale, Lock, Long, Map, MarshalJSON, MapEntry, MetadataPropertyHandling, Module, Mutable, Mutating, Namespace, Native, New, Newtonsoft, Nil, No, Noexcept, Nonatomic, None, EnumNone, Nonlocal, Nonmutating, NSObject, NoSuchMethod, Not, NotEq, NSError, NSString, Null, EnumNull, Nullptr, Number, Object, ObjectMapper, Of, Oneway, Open, Operator, Optional, Or, OrEq, Out, Override, Package, Params, Pass, Port, Postfix, Precedence, Prefix, Print, Printf, PrintMembers, Private, Protected, Protocol, EnumProtocol, Public, Quicktype, Raise, Range, Readonly, Ref, RegExp, Register, ReinterpretCast, Repeat, Require, Required, Requires, Restrict, Retain, Rethrows, Return, Right, RuntimeType, S, Sbyte, Sealed, Sel, Select, Self, Serializable, EnumSelf, Sendable, Serialize, SerialName, KSerializer, PrimitiveKind, SerialDescriptor, SerializerProvider, Set, Short, Signed, SimpleModule, Sizeof, Stackalloc, Standards, Static, StaticAssert, StaticCast, StdDeserializer, StdSerializer, Strictfp, String, Struct, Subscript, Super, Switch, Symbol, Synchronized, System, Template, Then, This, ThreadLocal, Throw, Throws, TimeOnly, TimeOnlyConverter, TimeZone, ToJSON, EnumTopLevel, ToString, ToDict, Transient, True, EnumTrue, Try, Type, EnumType, Typealias, Typedef, Typeid, Typename, Typeof, Uint, Ulong, Unchecked, Undefined, Union, UnmarshalJSON, UseSerializers, Unowned, Unsafe, Unsigned, Ushort, Using, Utf8JSONReader, Utf8JSONWriter, UUID, Var, Virtual, Void, Volatile, WcharT, Weak, Where, While, WillSet, With, Xor, XorEq, Yes, Yield, Dummy: *x = EnumEnum(value); return nil
 	}
 	return invalidEnumEnum(value)
 }
diff --git a/base/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
index 2f495a0..2b1e85b 100644
--- a/base/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
+++ b/head/schema-golang/test/inputs/schema/keyword-unions.schema/default/quicktype.go
@@ -144,6 +144,7 @@ type TopLevel struct {
 	FormatException            *UnionFormatException            `json:"FormatException"`
 	Friend                     *UnionFriend                     `json:"friend"`
 	From                       *UnionFrom                       `json:"from"`
+	FromDict                   *UnionFromDict                   `json:"from_dict"`
 	FromJSON                   *UnionFromJSON                   `json:"from_json"`
 	Func                       *UnionFunc                       `json:"func"`
 	Function                   *UnionFunction                   `json:"function"`
@@ -205,6 +206,7 @@ type TopLevel struct {
 	Long                       *UnionLong                       `json:"long"`
 	Map                        *UnionMap                        `json:"map"`
 	MapEntry                   *UnionMapEntry                   `json:"MapEntry"`
+	MarshalJSON                *UnionMarshalJSON                `json:"MarshalJSON"`
 	MetadataPropertyHandling   *UnionMetadataPropertyHandling   `json:"metadata_property_handling"`
 	Module                     *UnionModule                     `json:"module"`
 	Mutable                    *UnionMutable                    `json:"mutable"`
@@ -319,6 +321,7 @@ type TopLevel struct {
 	TimeOnly                   *UnionTimeOnly                   `json:"TimeOnly"`
 	TimeOnlyConverter          *UnionTimeOnlyConverter          `json:"TimeOnlyConverter"`
 	TimeZone                   *UnionTimeZone                   `json:"TimeZone"`
+	ToDict                     *UnionToDict                     `json:"to_dict"`
 	ToJSON                     *UnionToJSON                     `json:"to_json"`
 	TopLevel                   *UnionTopLevel                   `json:"top_level"`
 	ToString                   *UnionToString                   `json:"toString"`
@@ -338,6 +341,7 @@ type TopLevel struct {
 	Unchecked                  *UnionUnchecked                  `json:"unchecked"`
 	Undefined                  *UnionUndefined                  `json:"undefined"`
 	Union                      *UnionUnionUnion                 `json:"union"`
+	UnmarshalJSON              *UnionUnmarshalJSON              `json:"UnmarshalJSON"`
 	Unowned                    *UnionUnowned                    `json:"unowned"`
 	Unsafe                     *UnionUnsafe                     `json:"unsafe"`
 	Unsigned                   *UnionUnsigned                   `json:"unsigned"`
@@ -708,6 +712,9 @@ type Friend struct {
 type From struct {
 }
 
+type FromDict struct {
+}
+
 type FromJSON struct {
 }
 
@@ -894,6 +901,9 @@ type Map struct {
 type MapEntry struct {
 }
 
+type MarshalJSON struct {
+}
+
 type MetadataPropertyHandling struct {
 }
 
@@ -1227,6 +1237,9 @@ type TimeOnlyConverter struct {
 type TimeZone struct {
 }
 
+type ToDict struct {
+}
+
 type ToJSON struct {
 }
 
@@ -1311,6 +1324,9 @@ type Undefined struct {
 type Union struct {
 }
 
+type UnmarshalJSON struct {
+}
+
 type Unowned struct {
 }
 
@@ -3907,6 +3923,28 @@ func (x *UnionFrom) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.From != nil, x.From, false, nil, false, nil, false)
 }
 
+type UnionFromDict struct {
+	Double   *float64
+	FromDict *FromDict
+}
+
+func (x *UnionFromDict) UnmarshalJSON(data []byte) error {
+	x.FromDict = nil
+	var c FromDict
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.FromDict = &c
+	}
+	return nil
+}
+
+func (x *UnionFromDict) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.FromDict != nil, x.FromDict, false, nil, false, nil, false)
+}
+
 type UnionFromJSON struct {
 	Double   *float64
 	FromJSON *FromJSON
@@ -5271,6 +5309,28 @@ func (x *UnionMapEntry) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.MapEntry != nil, x.MapEntry, false, nil, false, nil, false)
 }
 
+type UnionMarshalJSON struct {
+	Double            *float64
+	PurpleMarshalJSON *MarshalJSON
+}
+
+func (x *UnionMarshalJSON) UnmarshalJSON(data []byte) error {
+	x.PurpleMarshalJSON = nil
+	var c MarshalJSON
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.PurpleMarshalJSON = &c
+	}
+	return nil
+}
+
+func (x *UnionMarshalJSON) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.PurpleMarshalJSON != nil, x.PurpleMarshalJSON, false, nil, false, nil, false)
+}
+
 type UnionMetadataPropertyHandling struct {
 	Double                   *float64
 	MetadataPropertyHandling *MetadataPropertyHandling
@@ -7713,6 +7773,28 @@ func (x *UnionTimeZone) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.TimeZone != nil, x.TimeZone, false, nil, false, nil, false)
 }
 
+type UnionToDict struct {
+	Double *float64
+	ToDict *ToDict
+}
+
+func (x *UnionToDict) UnmarshalJSON(data []byte) error {
+	x.ToDict = nil
+	var c ToDict
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.ToDict = &c
+	}
+	return nil
+}
+
+func (x *UnionToDict) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.ToDict != nil, x.ToDict, false, nil, false, nil, false)
+}
+
 type UnionToJSON struct {
 	Double *float64
 	ToJSON *ToJSON
@@ -8329,6 +8411,28 @@ func (x *UnionUnionUnion) MarshalJSON() ([]byte, error) {
 	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.Union != nil, x.Union, false, nil, false, nil, false)
 }
 
+type UnionUnmarshalJSON struct {
+	Double              *float64
+	PurpleUnmarshalJSON *UnmarshalJSON
+}
+
+func (x *UnionUnmarshalJSON) UnmarshalJSON(data []byte) error {
+	x.PurpleUnmarshalJSON = nil
+	var c UnmarshalJSON
+	object, err := unmarshalUnion(data, nil, &x.Double, nil, nil, false, nil, true, &c, false, nil, false, nil, false)
+	if err != nil {
+		return err
+	}
+	if object {
+		x.PurpleUnmarshalJSON = &c
+	}
+	return nil
+}
+
+func (x *UnionUnmarshalJSON) MarshalJSON() ([]byte, error) {
+	return marshalUnion(nil, x.Double, nil, nil, false, nil, x.PurpleUnmarshalJSON != nil, x.PurpleUnmarshalJSON, false, nil, false, nil, false)
+}
+
 type UnionUnowned struct {
 	Double  *float64
 	Unowned *Unowned
diff --git a/base/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
index 29de7b2..0b02b5b 100644
--- a/base/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
+++ b/head/schema-haskell/test/inputs/schema/keyword-enum.schema/default/QuickType.hs
@@ -139,6 +139,7 @@ data EnumEnum
     | FormatExceptionEnumEnum
     | FriendEnumEnum
     | FromEnumEnum
+    | FromDictEnumEnum
     | FromJSONEnumEnum
     | FuncEnumEnum
     | FunctionEnumEnum
@@ -198,6 +199,7 @@ data EnumEnum
     | LockEnumEnum
     | LongEnumEnum
     | MapEnumEnum
+    | MarshalJSONEnumEnum
     | MapEntryEnumEnum
     | MetadataPropertyHandlingEnumEnum
     | ModuleEnumEnum
@@ -317,6 +319,7 @@ data EnumEnum
     | ToJSONEnumEnum
     | TopLevelEnumEnum
     | ToStringEnumEnum
+    | ToDictEnumEnum
     | TransientEnumEnum
     | TrueEnumEnum
     | PurpleTrueEnumEnum
@@ -333,6 +336,7 @@ data EnumEnum
     | UncheckedEnumEnum
     | UndefinedEnumEnum
     | UnionEnumEnum
+    | UnmarshalJSONEnumEnum
     | UseSerializersEnumEnum
     | UnownedEnumEnum
     | UnsafeEnumEnum
@@ -494,6 +498,7 @@ instance ToJSON EnumEnum where
     toJSON FormatExceptionEnumEnum = "FormatException"
     toJSON FriendEnumEnum = "friend"
     toJSON FromEnumEnum = "from"
+    toJSON FromDictEnumEnum = "from_dict"
     toJSON FromJSONEnumEnum = "from_json"
     toJSON FuncEnumEnum = "func"
     toJSON FunctionEnumEnum = "function"
@@ -553,6 +558,7 @@ instance ToJSON EnumEnum where
     toJSON LockEnumEnum = "lock"
     toJSON LongEnumEnum = "long"
     toJSON MapEnumEnum = "map"
+    toJSON MarshalJSONEnumEnum = "MarshalJSON"
     toJSON MapEntryEnumEnum = "MapEntry"
     toJSON MetadataPropertyHandlingEnumEnum = "metadata_property_handling"
     toJSON ModuleEnumEnum = "module"
@@ -672,6 +678,7 @@ instance ToJSON EnumEnum where
     toJSON ToJSONEnumEnum = "to_json"
     toJSON TopLevelEnumEnum = "top_level"
     toJSON ToStringEnumEnum = "toString"
+    toJSON ToDictEnumEnum = "to_dict"
     toJSON TransientEnumEnum = "transient"
     toJSON TrueEnumEnum = "True"
     toJSON PurpleTrueEnumEnum = "true"
@@ -688,6 +695,7 @@ instance ToJSON EnumEnum where
     toJSON UncheckedEnumEnum = "unchecked"
     toJSON UndefinedEnumEnum = "undefined"
     toJSON UnionEnumEnum = "union"
+    toJSON UnmarshalJSONEnumEnum = "UnmarshalJSON"
     toJSON UseSerializersEnumEnum = "UseSerializers"
     toJSON UnownedEnumEnum = "unowned"
     toJSON UnsafeEnumEnum = "unsafe"
@@ -837,6 +845,7 @@ instance FromJSON EnumEnum where
             parseText "FormatException" = return FormatExceptionEnumEnum
             parseText "friend" = return FriendEnumEnum
             parseText "from" = return FromEnumEnum
+            parseText "from_dict" = return FromDictEnumEnum
             parseText "from_json" = return FromJSONEnumEnum
             parseText "func" = return FuncEnumEnum
             parseText "function" = return FunctionEnumEnum
@@ -896,6 +905,7 @@ instance FromJSON EnumEnum where
             parseText "lock" = return LockEnumEnum
             parseText "long" = return LongEnumEnum
             parseText "map" = return MapEnumEnum
+            parseText "MarshalJSON" = return MarshalJSONEnumEnum
             parseText "MapEntry" = return MapEntryEnumEnum
             parseText "metadata_property_handling" = return MetadataPropertyHandlingEnumEnum
             parseText "module" = return ModuleEnumEnum
@@ -1015,6 +1025,7 @@ instance FromJSON EnumEnum where
             parseText "to_json" = return ToJSONEnumEnum
             parseText "top_level" = return TopLevelEnumEnum
             parseText "toString" = return ToStringEnumEnum
+            parseText "to_dict" = return ToDictEnumEnum
             parseText "transient" = return TransientEnumEnum
             parseText "True" = return TrueEnumEnum
             parseText "true" = return PurpleTrueEnumEnum
@@ -1031,6 +1042,7 @@ instance FromJSON EnumEnum where
             parseText "unchecked" = return UncheckedEnumEnum
             parseText "undefined" = return UndefinedEnumEnum
             parseText "union" = return UnionEnumEnum
+            parseText "UnmarshalJSON" = return UnmarshalJSONEnumEnum
             parseText "UseSerializers" = return UseSerializersEnumEnum
             parseText "unowned" = return UnownedEnumEnum
             parseText "unsafe" = return UnsafeEnumEnum
diff --git a/base/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
index ff6f03e..d32703c 100644
--- a/base/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
+++ b/head/schema-haskell/test/inputs/schema/keyword-unions.schema/default/QuickType.hs
@@ -112,6 +112,7 @@ module QuickType
     , FormatException (..)
     , Friend (..)
     , From (..)
+    , FromDict (..)
     , FromJSONClass (..)
     , Func (..)
     , Function (..)
@@ -168,6 +169,7 @@ module QuickType
     , Long (..)
     , MapClass (..)
     , MapEntry (..)
+    , MarshalJSON (..)
     , MetadataPropertyHandling (..)
     , Mutable (..)
     , Mutating (..)
@@ -303,6 +305,7 @@ module QuickType
     , TimeOnly (..)
     , TimeOnlyConverter (..)
     , TimeZone (..)
+    , ToDict (..)
     , ToJSONClass (..)
     , ToString (..)
     , TopLevel (..)
@@ -319,6 +322,7 @@ module QuickType
     , Unchecked (..)
     , Undefined (..)
     , Union (..)
+    , UnmarshalJSON (..)
     , Unowned (..)
     , Unsafe (..)
     , Unsigned (..)
@@ -450,6 +454,7 @@ module QuickType
     , UnionFormatException (..)
     , UnionFriend (..)
     , UnionFrom (..)
+    , UnionFromDict (..)
     , UnionFromJSON (..)
     , UnionFunc (..)
     , UnionFunction (..)
@@ -506,6 +511,7 @@ module QuickType
     , UnionLong (..)
     , UnionMap (..)
     , UnionMapEntry (..)
+    , UnionMarshalJSON (..)
     , UnionMetadataPropertyHandling (..)
     , UnionMutable (..)
     , UnionMutating (..)
@@ -641,6 +647,7 @@ module QuickType
     , UnionTimeOnly (..)
     , UnionTimeOnlyConverter (..)
     , UnionTimeZone (..)
+    , UnionToDict (..)
     , UnionToJSON (..)
     , UnionToString (..)
     , UnionTopLevel (..)
@@ -657,6 +664,7 @@ module QuickType
     , UnionUnchecked (..)
     , UnionUndefined (..)
     , UnionUnionUnion (..)
+    , UnionUnmarshalJSON (..)
     , UnionUnowned (..)
     , UnionUnsafe (..)
     , UnionUnsigned (..)
@@ -811,6 +819,7 @@ data QuickType = QuickType
     , formatExceptionQuickType :: Maybe UnionFormatException
     , friendQuickType :: Maybe UnionFriend
     , fromQuickType :: Maybe UnionFrom
+    , fromDictQuickType :: Maybe UnionFromDict
     , fromJSONQuickType :: Maybe UnionFromJSON
     , funcQuickType :: Maybe UnionFunc
     , functionQuickType :: Maybe UnionFunction
@@ -872,6 +881,7 @@ data QuickType = QuickType
     , longQuickType :: Maybe UnionLong
     , mapQuickType :: Maybe UnionMap
     , mapEntryQuickType :: Maybe UnionMapEntry
+    , marshalJSONQuickType :: Maybe UnionMarshalJSON
     , metadataPropertyHandlingQuickType :: Maybe UnionMetadataPropertyHandling
     , quickTypeModuleQuickType :: Maybe UnionModule
     , mutableQuickType :: Maybe UnionMutable
@@ -986,6 +996,7 @@ data QuickType = QuickType
     , timeOnlyQuickType :: Maybe UnionTimeOnly
     , timeOnlyConverterQuickType :: Maybe UnionTimeOnlyConverter
     , timeZoneQuickType :: Maybe UnionTimeZone
+    , toDictQuickType :: Maybe UnionToDict
     , toJSONQuickType :: Maybe UnionToJSON
     , topLevelQuickType :: Maybe UnionTopLevel
     , toStringQuickType :: Maybe UnionToString
@@ -1005,6 +1016,7 @@ data QuickType = QuickType
     , uncheckedQuickType :: Maybe UnionUnchecked
     , undefinedQuickType :: Maybe UnionUndefined
     , unionQuickType :: Maybe UnionUnionUnion
+    , unmarshalJSONQuickType :: Maybe UnionUnmarshalJSON
     , unownedQuickType :: Maybe UnionUnowned
     , unsafeQuickType :: Maybe UnionUnsafe
     , unsignedQuickType :: Maybe UnionUnsigned
@@ -2011,6 +2023,15 @@ data From = From
     {
     } deriving (Show)
 
+data UnionFromDict
+    = DoubleInUnionFromDict Double
+    | FromDictInUnionFromDict FromDict
+    deriving (Show)
+
+data FromDict = FromDict
+    {
+    } deriving (Show)
+
 data UnionFromJSON
     = DoubleInUnionFromJSON Double
     | FromJSONClassInUnionFromJSON FromJSONClass
@@ -2515,6 +2536,15 @@ data MapEntry = MapEntry
     {
     } deriving (Show)
 
+data UnionMarshalJSON
+    = DoubleInUnionMarshalJSON Double
+    | MarshalJSONInUnionMarshalJSON MarshalJSON
+    deriving (Show)
+
+data MarshalJSON = MarshalJSON
+    {
+    } deriving (Show)
+
 data UnionMetadataPropertyHandling
     = DoubleInUnionMetadataPropertyHandling Double
     | MetadataPropertyHandlingInUnionMetadataPropertyHandling MetadataPropertyHandling
@@ -3730,6 +3760,15 @@ data TimeZone = TimeZone
     {
     } deriving (Show)
 
+data UnionToDict
+    = DoubleInUnionToDict Double
+    | ToDictInUnionToDict ToDict
+    deriving (Show)
+
+data ToDict = ToDict
+    {
+    } deriving (Show)
+
 data UnionToJSON
     = DoubleInUnionToJSON Double
     | ToJSONClassInUnionToJSON ToJSONClass
@@ -3874,6 +3913,15 @@ data Union = Union
     {
     } deriving (Show)
 
+data UnionUnmarshalJSON
+    = DoubleInUnionUnmarshalJSON Double
+    | UnmarshalJSONInUnionUnmarshalJSON UnmarshalJSON
+    deriving (Show)
+
+data UnmarshalJSON = UnmarshalJSON
+    {
+    } deriving (Show)
+
 data UnionUnowned
     = DoubleInUnionUnowned Double
     | UnownedInUnionUnowned Unowned
@@ -4076,7 +4124,7 @@ decodeTopLevel :: ByteString -> Maybe QuickType
 decodeTopLevel = decode
 
 instance ToJSON QuickType where
-    toJSON (QuickType emptyQuickType quickTypeBoolQuickType complexQuickType imagineryQuickType abstractQuickType alignasQuickType alignofQuickType andQuickType andEqQuickType quickTypeAnyQuickType anyQuickType arrayQuickType quickTypeAsQuickType asmQuickType assertQuickType associatedtypeQuickType associativityQuickType asyncQuickType atomicQuickType atomicCancelQuickType atomicCommitQuickType atomicNoexceptQuickType autoQuickType awaitQuickType baseQuickType bitandQuickType bitorQuickType boolQuickType purpleBoolQuickType booleanQuickType breakQuickType bycopyQuickType byrefQuickType byteQuickType calendarQuickType quickTypeCaseQuickType catchQuickType chanQuickType charQuickType char16TQuickType char32TQuickType checkedQuickType purpleClassQuickType quickTypeClassQuickType cloneQuickType coAwaitQuickType coReturnQuickType coYieldQuickType codableQuickType codingKeyQuickType codingKeysQuickType complQuickType conceptQuickType consoleQuickType constQuickType constCastQuickType constexprQuickType constructorQuickType continueQuickType convenienceQuickType convertQuickType converterQuickType cultureInfoQuickType dateQuickType dateParseHandlingQuickType dateFormatterQuickType dateOnlyQuickType dateOnlyConverterQuickType dateTimeQuickType dateTimeStylesQuickType debuggerQuickType decimalQuickType declareQuickType decltypeQuickType decodeStringQuickType decoderQuickType decodingErrorQuickType defQuickType quickTypeDefaultQuickType deferQuickType deinitQuickType delQuickType delegateQuickType deleteQuickType dictQuickType dictionaryQuickType didSetQuickType quickTypeDoQuickType doubleQuickType dummyQuickType dynamicQuickType dynamicCastQuickType elifQuickType quickTypeElseQuickType encodeQuickTypeQuickType encoderQuickType enumQuickType enumValuesQuickType equalityContractQuickType equatableQuickType eventQuickType exceptQuickType exceptionQuickType explicitQuickType exportQuickType exposingQuickType extendsQuickType extensionQuickType externQuickType fallthroughQuickType quickTypeFalseQuickType falseQuickType fileprivateQuickType finalQuickType finallyQuickType fixedQuickType floatQuickType forQuickType foreachQuickType formatExceptionQuickType friendQuickType fromQuickType fromJSONQuickType funcQuickType functionQuickType getQuickType globalQuickType goQuickType gotoQuickType guardQuickType hashableQuickType hashCodeQuickType hasherQuickType hasOwnPropertyQuickType quickTypeIDQuickType quickTypeIfQuickType impQuickType implementsQuickType implicitQuickType quickTypeImportQuickType quickTypeInQuickType indirectQuickType quickTypeInfixQuickType initQuickType inlineQuickType inoutQuickType instanceofQuickType intQuickType interfaceQuickType internalQuickType isQuickType isoDateTimeOffsetConverterQuickType iterableQuickType jdecQuickType jencQuickType jpipeQuickType jsonQuickType jsonConverterQuickType jsonSerializerQuickType jsonTokenQuickType jsonWriterQuickType jsonAnyQuickType jsonCodingKeyQuickType jsonDecoderQuickType jsonEncoderQuickType jsonExceptionQuickType jsonGeneratorQuickType jsonNodeQuickType jsonNullQuickType jsonParserQuickType jsonReaderQuickType jsonTokenTypeQuickType kSerializerQuickType lambdaQuickType lazyQuickType leftQuickType quickTypeLetQuickType listQuickType localeQuickType lockQuickType longQuickType mapQuickType mapEntryQuickType metadataPropertyHandlingQuickType quickTypeModuleQuickType mutableQuickType mutatingQuickType namespaceQuickType nativeQuickType newQuickType newtonsoftQuickType nilQuickType noQuickType noexceptQuickType nonatomicQuickType quickTypeNoneQuickType noneQuickType nonlocalQuickType nonmutatingQuickType noSuchMethodQuickType notQuickType notEqQuickType nsErrorQuickType nsObjectQuickType nsStringQuickType nullQuickType quickTypeNullQuickType nullptrQuickType numberQuickType objectQuickType objectMapperQuickType quickTypeOfQuickType onewayQuickType openQuickType operatorQuickType optionalQuickType orQuickType orEqQuickType outQuickType overrideQuickType packageQuickType paramsQuickType passQuickType portQuickType postfixQuickType precedenceQuickType prefixQuickType primitiveKindQuickType printQuickType printfQuickType printMembersQuickType privateQuickType protectedQuickType protocolQuickType quickTypeProtocolQuickType publicQuickType quicktypeQuickType raiseQuickType rangeQuickType readonlyQuickType refQuickType regExpQuickType registerQuickType reinterpretCastQuickType repeatQuickType requireQuickType requiredQuickType requiresQuickType restrictQuickType retainQuickType rethrowsQuickType returnQuickType rightQuickType runtimeTypeQuickType sQuickType sbyteQuickType sealedQuickType selQuickType selectQuickType selfQuickType quickTypeSelfQuickType sendableQuickType serialDescriptorQuickType serializableQuickType serializeQuickType serializerProviderQuickType serialNameQuickType setQuickType shortQuickType signedQuickType simpleModuleQuickType sizeofQuickType stackallocQuickType standardsQuickType staticQuickType staticAssertQuickType staticCastQuickType stdDeserializerQuickType stdSerializerQuickType strictfpQuickType stringQuickType structQuickType subscriptQuickType superQuickType switchQuickType symbolQuickType synchronizedQuickType systemQuickType templateQuickType quickTypeThenQuickType thisQuickType threadLocalQuickType throwQuickType throwsQuickType timeOnlyQuickType timeOnlyConverterQuickType timeZoneQuickType toJSONQuickType topLevelQuickType toStringQuickType transientQuickType trueQuickType quickTypeTrueQuickType tryQuickType quickTypeTypeQuickType purpleTypeQuickType typealiasQuickType typedefQuickType typeidQuickType typenameQuickType typeofQuickType uintQuickType ulongQuickType uncheckedQuickType undefinedQuickType unionQuickType unownedQuickType unsafeQuickType unsignedQuickType useSerializersQuickType ushortQuickType usingQuickType utf8JSONReaderQuickType utf8JSONWriterQuickType uuidQuickType varQuickType virtualQuickType voidQuickType volatileQuickType wcharTQuickType weakQuickType quickTypeWhereQuickType whileQuickType willSetQuickType withQuickType xorQuickType xorEqQuickType yesQuickType yieldQuickType) =
+    toJSON (QuickType emptyQuickType quickTypeBoolQuickType complexQuickType imagineryQuickType abstractQuickType alignasQuickType alignofQuickType andQuickType andEqQuickType quickTypeAnyQuickType anyQuickType arrayQuickType quickTypeAsQuickType asmQuickType assertQuickType associatedtypeQuickType associativityQuickType asyncQuickType atomicQuickType atomicCancelQuickType atomicCommitQuickType atomicNoexceptQuickType autoQuickType awaitQuickType baseQuickType bitandQuickType bitorQuickType boolQuickType purpleBoolQuickType booleanQuickType breakQuickType bycopyQuickType byrefQuickType byteQuickType calendarQuickType quickTypeCaseQuickType catchQuickType chanQuickType charQuickType char16TQuickType char32TQuickType checkedQuickType purpleClassQuickType quickTypeClassQuickType cloneQuickType coAwaitQuickType coReturnQuickType coYieldQuickType codableQuickType codingKeyQuickType codingKeysQuickType complQuickType conceptQuickType consoleQuickType constQuickType constCastQuickType constexprQuickType constructorQuickType continueQuickType convenienceQuickType convertQuickType converterQuickType cultureInfoQuickType dateQuickType dateParseHandlingQuickType dateFormatterQuickType dateOnlyQuickType dateOnlyConverterQuickType dateTimeQuickType dateTimeStylesQuickType debuggerQuickType decimalQuickType declareQuickType decltypeQuickType decodeStringQuickType decoderQuickType decodingErrorQuickType defQuickType quickTypeDefaultQuickType deferQuickType deinitQuickType delQuickType delegateQuickType deleteQuickType dictQuickType dictionaryQuickType didSetQuickType quickTypeDoQuickType doubleQuickType dummyQuickType dynamicQuickType dynamicCastQuickType elifQuickType quickTypeElseQuickType encodeQuickTypeQuickType encoderQuickType enumQuickType enumValuesQuickType equalityContractQuickType equatableQuickType eventQuickType exceptQuickType exceptionQuickType explicitQuickType exportQuickType exposingQuickType extendsQuickType extensionQuickType externQuickType fallthroughQuickType quickTypeFalseQuickType falseQuickType fileprivateQuickType finalQuickType finallyQuickType fixedQuickType floatQuickType forQuickType foreachQuickType formatExceptionQuickType friendQuickType fromQuickType fromDictQuickType fromJSONQuickType funcQuickType functionQuickType getQuickType globalQuickType goQuickType gotoQuickType guardQuickType hashableQuickType hashCodeQuickType hasherQuickType hasOwnPropertyQuickType quickTypeIDQuickType quickTypeIfQuickType impQuickType implementsQuickType implicitQuickType quickTypeImportQuickType quickTypeInQuickType indirectQuickType quickTypeInfixQuickType initQuickType inlineQuickType inoutQuickType instanceofQuickType intQuickType interfaceQuickType internalQuickType isQuickType isoDateTimeOffsetConverterQuickType iterableQuickType jdecQuickType jencQuickType jpipeQuickType jsonQuickType jsonConverterQuickType jsonSerializerQuickType jsonTokenQuickType jsonWriterQuickType jsonAnyQuickType jsonCodingKeyQuickType jsonDecoderQuickType jsonEncoderQuickType jsonExceptionQuickType jsonGeneratorQuickType jsonNodeQuickType jsonNullQuickType jsonParserQuickType jsonReaderQuickType jsonTokenTypeQuickType kSerializerQuickType lambdaQuickType lazyQuickType leftQuickType quickTypeLetQuickType listQuickType localeQuickType lockQuickType longQuickType mapQuickType mapEntryQuickType marshalJSONQuickType metadataPropertyHandlingQuickType quickTypeModuleQuickType mutableQuickType mutatingQuickType namespaceQuickType nativeQuickType newQuickType newtonsoftQuickType nilQuickType noQuickType noexceptQuickType nonatomicQuickType quickTypeNoneQuickType noneQuickType nonlocalQuickType nonmutatingQuickType noSuchMethodQuickType notQuickType notEqQuickType nsErrorQuickType nsObjectQuickType nsStringQuickType nullQuickType quickTypeNullQuickType nullptrQuickType numberQuickType objectQuickType objectMapperQuickType quickTypeOfQuickType onewayQuickType openQuickType operatorQuickType optionalQuickType orQuickType orEqQuickType outQuickType overrideQuickType packageQuickType paramsQuickType passQuickType portQuickType postfixQuickType precedenceQuickType prefixQuickType primitiveKindQuickType printQuickType printfQuickType printMembersQuickType privateQuickType protectedQuickType protocolQuickType quickTypeProtocolQuickType publicQuickType quicktypeQuickType raiseQuickType rangeQuickType readonlyQuickType refQuickType regExpQuickType registerQuickType reinterpretCastQuickType repeatQuickType requireQuickType requiredQuickType requiresQuickType restrictQuickType retainQuickType rethrowsQuickType returnQuickType rightQuickType runtimeTypeQuickType sQuickType sbyteQuickType sealedQuickType selQuickType selectQuickType selfQuickType quickTypeSelfQuickType sendableQuickType serialDescriptorQuickType serializableQuickType serializeQuickType serializerProviderQuickType serialNameQuickType setQuickType shortQuickType signedQuickType simpleModuleQuickType sizeofQuickType stackallocQuickType standardsQuickType staticQuickType staticAssertQuickType staticCastQuickType stdDeserializerQuickType stdSerializerQuickType strictfpQuickType stringQuickType structQuickType subscriptQuickType superQuickType switchQuickType symbolQuickType synchronizedQuickType systemQuickType templateQuickType quickTypeThenQuickType thisQuickType threadLocalQuickType throwQuickType throwsQuickType timeOnlyQuickType timeOnlyConverterQuickType timeZoneQuickType toDictQuickType toJSONQuickType topLevelQuickType toStringQuickType transientQuickType trueQuickType quickTypeTrueQuickType tryQuickType quickTypeTypeQuickType purpleTypeQuickType typealiasQuickType typedefQuickType typeidQuickType typenameQuickType typeofQuickType uintQuickType ulongQuickType uncheckedQuickType undefinedQuickType unionQuickType unmarshalJSONQuickType unownedQuickType unsafeQuickType unsignedQuickType useSerializersQuickType ushortQuickType usingQuickType utf8JSONReaderQuickType utf8JSONWriterQuickType uuidQuickType varQuickType virtualQuickType voidQuickType volatileQuickType wcharTQuickType weakQuickType quickTypeWhereQuickType whileQuickType willSetQuickType withQuickType xorQuickType xorEqQuickType yesQuickType yieldQuickType) =
         object $ foldMap (maybe [] pure)
         [ ("_" .=) <$> emptyQuickType
         , ("_Bool" .=) <$> quickTypeBoolQuickType
@@ -4200,6 +4248,7 @@ instance ToJSON QuickType where
         , ("FormatException" .=) <$> formatExceptionQuickType
         , ("friend" .=) <$> friendQuickType
         , ("from" .=) <$> fromQuickType
+        , ("from_dict" .=) <$> fromDictQuickType
         , ("from_json" .=) <$> fromJSONQuickType
         , ("func" .=) <$> funcQuickType
         , ("function" .=) <$> functionQuickType
@@ -4261,6 +4310,7 @@ instance ToJSON QuickType where
         , ("long" .=) <$> longQuickType
         , ("map" .=) <$> mapQuickType
         , ("MapEntry" .=) <$> mapEntryQuickType
+        , ("MarshalJSON" .=) <$> marshalJSONQuickType
         , ("metadata_property_handling" .=) <$> metadataPropertyHandlingQuickType
         , ("module" .=) <$> quickTypeModuleQuickType
         , ("mutable" .=) <$> mutableQuickType
@@ -4375,6 +4425,7 @@ instance ToJSON QuickType where
         , ("TimeOnly" .=) <$> timeOnlyQuickType
         , ("TimeOnlyConverter" .=) <$> timeOnlyConverterQuickType
         , ("TimeZone" .=) <$> timeZoneQuickType
+        , ("to_dict" .=) <$> toDictQuickType
         , ("to_json" .=) <$> toJSONQuickType
         , ("top_level" .=) <$> topLevelQuickType
         , ("toString" .=) <$> toStringQuickType
@@ -4394,6 +4445,7 @@ instance ToJSON QuickType where
         , ("unchecked" .=) <$> uncheckedQuickType
         , ("undefined" .=) <$> undefinedQuickType
         , ("union" .=) <$> unionQuickType
+        , ("UnmarshalJSON" .=) <$> unmarshalJSONQuickType
         , ("unowned" .=) <$> unownedQuickType
         , ("unsafe" .=) <$> unsafeQuickType
         , ("unsigned" .=) <$> unsignedQuickType
@@ -4543,6 +4595,7 @@ instance FromJSON QuickType where
         <*> v .:! "FormatException"
         <*> v .:! "friend"
         <*> v .:! "from"
+        <*> v .:! "from_dict"
         <*> v .:! "from_json"
         <*> v .:! "func"
         <*> v .:! "function"
@@ -4604,6 +4657,7 @@ instance FromJSON QuickType where
         <*> v .:! "long"
         <*> v .:! "map"
         <*> v .:! "MapEntry"
+        <*> v .:! "MarshalJSON"
         <*> v .:! "metadata_property_handling"
         <*> v .:! "module"
         <*> v .:! "mutable"
@@ -4718,6 +4772,7 @@ instance FromJSON QuickType where
         <*> v .:! "TimeOnly"
         <*> v .:! "TimeOnlyConverter"
         <*> v .:! "TimeZone"
+        <*> v .:! "to_dict"
         <*> v .:! "to_json"
         <*> v .:! "top_level"
         <*> v .:! "toString"
@@ -4737,6 +4792,7 @@ instance FromJSON QuickType where
         <*> v .:! "unchecked"
         <*> v .:! "undefined"
         <*> v .:! "union"
+        <*> v .:! "UnmarshalJSON"
         <*> v .:! "unowned"
         <*> v .:! "unsafe"
         <*> v .:! "unsigned"
@@ -6287,6 +6343,20 @@ instance ToJSON From where
 instance FromJSON From where
     parseJSON (Object _) = return From
 
+instance ToJSON UnionFromDict where
+    toJSON (DoubleInUnionFromDict x) = toJSON x
+    toJSON (FromDictInUnionFromDict x) = toJSON x
+
+instance FromJSON UnionFromDict where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionFromDict . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap FromDictInUnionFromDict . parseJSON) xs
+
+instance ToJSON FromDict where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON FromDict where
+    parseJSON (Object _) = return FromDict
+
 instance ToJSON UnionFromJSON where
     toJSON (DoubleInUnionFromJSON x) = toJSON x
     toJSON (FromJSONClassInUnionFromJSON x) = toJSON x
@@ -7071,6 +7141,20 @@ instance ToJSON MapEntry where
 instance FromJSON MapEntry where
     parseJSON (Object _) = return MapEntry
 
+instance ToJSON UnionMarshalJSON where
+    toJSON (DoubleInUnionMarshalJSON x) = toJSON x
+    toJSON (MarshalJSONInUnionMarshalJSON x) = toJSON x
+
+instance FromJSON UnionMarshalJSON where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionMarshalJSON . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap MarshalJSONInUnionMarshalJSON . parseJSON) xs
+
+instance ToJSON MarshalJSON where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON MarshalJSON where
+    parseJSON (Object _) = return MarshalJSON
+
 instance ToJSON UnionMetadataPropertyHandling where
     toJSON (DoubleInUnionMetadataPropertyHandling x) = toJSON x
     toJSON (MetadataPropertyHandlingInUnionMetadataPropertyHandling x) = toJSON x
@@ -8961,6 +9045,20 @@ instance ToJSON TimeZone where
 instance FromJSON TimeZone where
     parseJSON (Object _) = return TimeZone
 
+instance ToJSON UnionToDict where
+    toJSON (DoubleInUnionToDict x) = toJSON x
+    toJSON (ToDictInUnionToDict x) = toJSON x
+
+instance FromJSON UnionToDict where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionToDict . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap ToDictInUnionToDict . parseJSON) xs
+
+instance ToJSON ToDict where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON ToDict where
+    parseJSON (Object _) = return ToDict
+
 instance ToJSON UnionToJSON where
     toJSON (DoubleInUnionToJSON x) = toJSON x
     toJSON (ToJSONClassInUnionToJSON x) = toJSON x
@@ -9185,6 +9283,20 @@ instance ToJSON Union where
 instance FromJSON Union where
     parseJSON (Object _) = return Union
 
+instance ToJSON UnionUnmarshalJSON where
+    toJSON (DoubleInUnionUnmarshalJSON x) = toJSON x
+    toJSON (UnmarshalJSONInUnionUnmarshalJSON x) = toJSON x
+
+instance FromJSON UnionUnmarshalJSON where
+    parseJSON xs@(Number _) = (fmap DoubleInUnionUnmarshalJSON . parseJSON) xs
+    parseJSON xs@(Object _) = (fmap UnmarshalJSONInUnionUnmarshalJSON . parseJSON) xs
+
+instance ToJSON UnmarshalJSON where
+    toJSON = \_ -> emptyObject
+
+instance FromJSON UnmarshalJSON where
+    parseJSON (Object _) = return UnmarshalJSON
+
 instance ToJSON UnionUnowned where
     toJSON (DoubleInUnionUnowned x) = toJSON x
     toJSON (UnownedInUnionUnowned x) = toJSON x
diff --git a/base/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index ea6259c..e2f2ba1 100644
--- a/base/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -130,6 +130,7 @@ public enum Enum {
             case FORMAT_EXCEPTION: return "FormatException";
             case FRIEND: return "friend";
             case FROM: return "from";
+            case FROM_DICT: return "from_dict";
             case FROM_JSON: return "from_json";
             case FUNC: return "func";
             case FUNCTION: return "function";
@@ -189,6 +190,7 @@ public enum Enum {
             case LOCK: return "lock";
             case LONG: return "long";
             case MAP: return "map";
+            case MARSHAL_JSON: return "MarshalJSON";
             case MAP_ENTRY: return "MapEntry";
             case METADATA_PROPERTY_HANDLING: return "metadata_property_handling";
             case MODULE: return "module";
@@ -308,6 +310,7 @@ public enum Enum {
             case TO_JSON: return "to_json";
             case TOP_LEVEL: return "top_level";
             case TO_STRING: return "toString";
+            case TO_DICT: return "to_dict";
             case TRANSIENT: return "transient";
             case TRUE: return "True";
             case ENUM_TRUE: return "true";
@@ -324,6 +327,7 @@ public enum Enum {
             case UNCHECKED: return "unchecked";
             case UNDEFINED: return "undefined";
             case UNION: return "union";
+            case UNMARSHAL_JSON: return "UnmarshalJSON";
             case USE_SERIALIZERS: return "UseSerializers";
             case UNOWNED: return "unowned";
             case UNSAFE: return "unsafe";
@@ -475,6 +479,7 @@ public enum Enum {
         if (value.equals("FormatException")) return FORMAT_EXCEPTION;
         if (value.equals("friend")) return FRIEND;
         if (value.equals("from")) return FROM;
+        if (value.equals("from_dict")) return FROM_DICT;
         if (value.equals("from_json")) return FROM_JSON;
         if (value.equals("func")) return FUNC;
         if (value.equals("function")) return FUNCTION;
@@ -534,6 +539,7 @@ public enum Enum {
         if (value.equals("lock")) return LOCK;
         if (value.equals("long")) return LONG;
         if (value.equals("map")) return MAP;
+        if (value.equals("MarshalJSON")) return MARSHAL_JSON;
         if (value.equals("MapEntry")) return MAP_ENTRY;
         if (value.equals("metadata_property_handling")) return METADATA_PROPERTY_HANDLING;
         if (value.equals("module")) return MODULE;
@@ -653,6 +659,7 @@ public enum Enum {
         if (value.equals("to_json")) return TO_JSON;
         if (value.equals("top_level")) return TOP_LEVEL;
         if (value.equals("toString")) return TO_STRING;
+        if (value.equals("to_dict")) return TO_DICT;
         if (value.equals("transient")) return TRANSIENT;
         if (value.equals("True")) return TRUE;
         if (value.equals("true")) return ENUM_TRUE;
@@ -669,6 +676,7 @@ public enum Enum {
         if (value.equals("unchecked")) return UNCHECKED;
         if (value.equals("undefined")) return UNDEFINED;
         if (value.equals("union")) return UNION;
+        if (value.equals("UnmarshalJSON")) return UNMARSHAL_JSON;
         if (value.equals("UseSerializers")) return USE_SERIALIZERS;
         if (value.equals("unowned")) return UNOWNED;
         if (value.equals("unsafe")) return UNSAFE;
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..7d33f5c
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class FromDict {
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..d012bac
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class MarshalJSON {
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..5de20d3
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class ToDict {
+}
diff --git a/base/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index 9df2c78..d741eed 100644
--- a/base/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -125,6 +125,7 @@ public class TopLevel {
     private UnionFormatException formatException;
     private UnionFriend friend;
     private UnionFrom from;
+    private UnionFromDict fromDict;
     private UnionFromJSON fromJSON;
     private UnionFunc func;
     private UnionFunction function;
@@ -186,6 +187,7 @@ public class TopLevel {
     private UnionLong topLevelLong;
     private UnionMap map;
     private UnionMapEntry mapEntry;
+    private UnionMarshalJSON marshalJSON;
     private UnionMetadataPropertyHandling metadataPropertyHandling;
     private UnionModule module;
     private UnionMutable mutable;
@@ -300,6 +302,7 @@ public class TopLevel {
     private UnionTimeOnly timeOnly;
     private UnionTimeOnlyConverter timeOnlyConverter;
     private UnionTimeZone timeZone;
+    private UnionToDict toDict;
     private UnionToJSON toJSON;
     private UnionTopLevel topLevel;
     private UnionToString toString;
@@ -319,6 +322,7 @@ public class TopLevel {
     private UnionUnchecked unchecked;
     private UnionUndefined undefined;
     private UnionUnionUnion union;
+    private UnionUnmarshalJSON unmarshalJSON;
     private UnionUnowned unowned;
     private UnionUnsafe unsafe;
     private UnionUnsigned unsigned;
@@ -953,6 +957,11 @@ public class TopLevel {
     @JsonProperty("from")
     public void setFrom(UnionFrom value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public UnionFromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(UnionFromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public UnionFromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -1258,6 +1267,11 @@ public class TopLevel {
     @JsonProperty("MapEntry")
     public void setMapEntry(UnionMapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public UnionMarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(UnionMarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public UnionMetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -1828,6 +1842,11 @@ public class TopLevel {
     @JsonProperty("TimeZone")
     public void setTimeZone(UnionTimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public UnionToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(UnionToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public UnionToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -1923,6 +1942,11 @@ public class TopLevel {
     @JsonProperty("union")
     public void setUnion(UnionUnionUnion value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnionUnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnionUnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public UnionUnowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
new file mode 100644
index 0000000..1030cd2
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionFromDict.Deserializer.class)
+@JsonSerialize(using = UnionFromDict.Serializer.class)
+public class UnionFromDict {
+    public Double doubleValue;
+    public FromDict fromDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionFromDict> {
+        @Override
+        public UnionFromDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionFromDict value = new UnionFromDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.fromDictValue = jsonParser.readValueAs(FromDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionFromDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionFromDict> {
+        @Override
+        public void serialize(UnionFromDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.fromDictValue != null) {
+                jsonGenerator.writeObject(obj.fromDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
new file mode 100644
index 0000000..acfbb99
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionMarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionMarshalJSON.Serializer.class)
+public class UnionMarshalJSON {
+    public Double doubleValue;
+    public MarshalJSON marshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionMarshalJSON> {
+        @Override
+        public UnionMarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionMarshalJSON value = new UnionMarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.marshalJSONValue = jsonParser.readValueAs(MarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionMarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionMarshalJSON> {
+        @Override
+        public void serialize(UnionMarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.marshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.marshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
new file mode 100644
index 0000000..31f2c43
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionToDict.Deserializer.class)
+@JsonSerialize(using = UnionToDict.Serializer.class)
+public class UnionToDict {
+    public Double doubleValue;
+    public ToDict toDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionToDict> {
+        @Override
+        public UnionToDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionToDict value = new UnionToDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.toDictValue = jsonParser.readValueAs(ToDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionToDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionToDict> {
+        @Override
+        public void serialize(UnionToDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.toDictValue != null) {
+                jsonGenerator.writeObject(obj.toDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
new file mode 100644
index 0000000..538b13f
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionUnmarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionUnmarshalJSON.Serializer.class)
+public class UnionUnmarshalJSON {
+    public Double doubleValue;
+    public UnmarshalJSON unmarshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionUnmarshalJSON> {
+        @Override
+        public UnionUnmarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionUnmarshalJSON value = new UnionUnmarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.unmarshalJSONValue = jsonParser.readValueAs(UnmarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionUnmarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionUnmarshalJSON> {
+        @Override
+        public void serialize(UnionUnmarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.unmarshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.unmarshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..a848793
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class UnmarshalJSON {
+}
diff --git a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index ea6259c..e2f2ba1 100644
--- a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -130,6 +130,7 @@ public enum Enum {
             case FORMAT_EXCEPTION: return "FormatException";
             case FRIEND: return "friend";
             case FROM: return "from";
+            case FROM_DICT: return "from_dict";
             case FROM_JSON: return "from_json";
             case FUNC: return "func";
             case FUNCTION: return "function";
@@ -189,6 +190,7 @@ public enum Enum {
             case LOCK: return "lock";
             case LONG: return "long";
             case MAP: return "map";
+            case MARSHAL_JSON: return "MarshalJSON";
             case MAP_ENTRY: return "MapEntry";
             case METADATA_PROPERTY_HANDLING: return "metadata_property_handling";
             case MODULE: return "module";
@@ -308,6 +310,7 @@ public enum Enum {
             case TO_JSON: return "to_json";
             case TOP_LEVEL: return "top_level";
             case TO_STRING: return "toString";
+            case TO_DICT: return "to_dict";
             case TRANSIENT: return "transient";
             case TRUE: return "True";
             case ENUM_TRUE: return "true";
@@ -324,6 +327,7 @@ public enum Enum {
             case UNCHECKED: return "unchecked";
             case UNDEFINED: return "undefined";
             case UNION: return "union";
+            case UNMARSHAL_JSON: return "UnmarshalJSON";
             case USE_SERIALIZERS: return "UseSerializers";
             case UNOWNED: return "unowned";
             case UNSAFE: return "unsafe";
@@ -475,6 +479,7 @@ public enum Enum {
         if (value.equals("FormatException")) return FORMAT_EXCEPTION;
         if (value.equals("friend")) return FRIEND;
         if (value.equals("from")) return FROM;
+        if (value.equals("from_dict")) return FROM_DICT;
         if (value.equals("from_json")) return FROM_JSON;
         if (value.equals("func")) return FUNC;
         if (value.equals("function")) return FUNCTION;
@@ -534,6 +539,7 @@ public enum Enum {
         if (value.equals("lock")) return LOCK;
         if (value.equals("long")) return LONG;
         if (value.equals("map")) return MAP;
+        if (value.equals("MarshalJSON")) return MARSHAL_JSON;
         if (value.equals("MapEntry")) return MAP_ENTRY;
         if (value.equals("metadata_property_handling")) return METADATA_PROPERTY_HANDLING;
         if (value.equals("module")) return MODULE;
@@ -653,6 +659,7 @@ public enum Enum {
         if (value.equals("to_json")) return TO_JSON;
         if (value.equals("top_level")) return TOP_LEVEL;
         if (value.equals("toString")) return TO_STRING;
+        if (value.equals("to_dict")) return TO_DICT;
         if (value.equals("transient")) return TRANSIENT;
         if (value.equals("True")) return TRUE;
         if (value.equals("true")) return ENUM_TRUE;
@@ -669,6 +676,7 @@ public enum Enum {
         if (value.equals("unchecked")) return UNCHECKED;
         if (value.equals("undefined")) return UNDEFINED;
         if (value.equals("union")) return UNION;
+        if (value.equals("UnmarshalJSON")) return UNMARSHAL_JSON;
         if (value.equals("UseSerializers")) return USE_SERIALIZERS;
         if (value.equals("unowned")) return UNOWNED;
         if (value.equals("unsafe")) return UNSAFE;
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..7d33f5c
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class FromDict {
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..d012bac
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class MarshalJSON {
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..5de20d3
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class ToDict {
+}
diff --git a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index 9df2c78..d741eed 100644
--- a/base/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -125,6 +125,7 @@ public class TopLevel {
     private UnionFormatException formatException;
     private UnionFriend friend;
     private UnionFrom from;
+    private UnionFromDict fromDict;
     private UnionFromJSON fromJSON;
     private UnionFunc func;
     private UnionFunction function;
@@ -186,6 +187,7 @@ public class TopLevel {
     private UnionLong topLevelLong;
     private UnionMap map;
     private UnionMapEntry mapEntry;
+    private UnionMarshalJSON marshalJSON;
     private UnionMetadataPropertyHandling metadataPropertyHandling;
     private UnionModule module;
     private UnionMutable mutable;
@@ -300,6 +302,7 @@ public class TopLevel {
     private UnionTimeOnly timeOnly;
     private UnionTimeOnlyConverter timeOnlyConverter;
     private UnionTimeZone timeZone;
+    private UnionToDict toDict;
     private UnionToJSON toJSON;
     private UnionTopLevel topLevel;
     private UnionToString toString;
@@ -319,6 +322,7 @@ public class TopLevel {
     private UnionUnchecked unchecked;
     private UnionUndefined undefined;
     private UnionUnionUnion union;
+    private UnionUnmarshalJSON unmarshalJSON;
     private UnionUnowned unowned;
     private UnionUnsafe unsafe;
     private UnionUnsigned unsigned;
@@ -953,6 +957,11 @@ public class TopLevel {
     @JsonProperty("from")
     public void setFrom(UnionFrom value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public UnionFromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(UnionFromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public UnionFromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -1258,6 +1267,11 @@ public class TopLevel {
     @JsonProperty("MapEntry")
     public void setMapEntry(UnionMapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public UnionMarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(UnionMarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public UnionMetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -1828,6 +1842,11 @@ public class TopLevel {
     @JsonProperty("TimeZone")
     public void setTimeZone(UnionTimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public UnionToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(UnionToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public UnionToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -1923,6 +1942,11 @@ public class TopLevel {
     @JsonProperty("union")
     public void setUnion(UnionUnionUnion value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnionUnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnionUnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public UnionUnowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
new file mode 100644
index 0000000..1030cd2
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionFromDict.Deserializer.class)
+@JsonSerialize(using = UnionFromDict.Serializer.class)
+public class UnionFromDict {
+    public Double doubleValue;
+    public FromDict fromDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionFromDict> {
+        @Override
+        public UnionFromDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionFromDict value = new UnionFromDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.fromDictValue = jsonParser.readValueAs(FromDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionFromDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionFromDict> {
+        @Override
+        public void serialize(UnionFromDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.fromDictValue != null) {
+                jsonGenerator.writeObject(obj.fromDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
new file mode 100644
index 0000000..acfbb99
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionMarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionMarshalJSON.Serializer.class)
+public class UnionMarshalJSON {
+    public Double doubleValue;
+    public MarshalJSON marshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionMarshalJSON> {
+        @Override
+        public UnionMarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionMarshalJSON value = new UnionMarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.marshalJSONValue = jsonParser.readValueAs(MarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionMarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionMarshalJSON> {
+        @Override
+        public void serialize(UnionMarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.marshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.marshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
new file mode 100644
index 0000000..31f2c43
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionToDict.Deserializer.class)
+@JsonSerialize(using = UnionToDict.Serializer.class)
+public class UnionToDict {
+    public Double doubleValue;
+    public ToDict toDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionToDict> {
+        @Override
+        public UnionToDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionToDict value = new UnionToDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.toDictValue = jsonParser.readValueAs(ToDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionToDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionToDict> {
+        @Override
+        public void serialize(UnionToDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.toDictValue != null) {
+                jsonGenerator.writeObject(obj.toDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
new file mode 100644
index 0000000..538b13f
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionUnmarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionUnmarshalJSON.Serializer.class)
+public class UnionUnmarshalJSON {
+    public Double doubleValue;
+    public UnmarshalJSON unmarshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionUnmarshalJSON> {
+        @Override
+        public UnionUnmarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionUnmarshalJSON value = new UnionUnmarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.unmarshalJSONValue = jsonParser.readValueAs(UnmarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionUnmarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionUnmarshalJSON> {
+        @Override
+        public void serialize(UnionUnmarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.unmarshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.unmarshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..a848793
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class UnmarshalJSON {
+}
diff --git a/base/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java b/head/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
index ea6259c..e2f2ba1 100644
--- a/base/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-enum.schema/default/src/main/java/io/quicktype/Enum.java
@@ -4,7 +4,7 @@ import java.io.IOException;
 import com.fasterxml.jackson.annotation.*;
 
 public enum Enum {
-    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
+    EMPTY, BOOL, COMPLEX, IMAGINERY, ABSTRACT, ALIGNAS, ALIGNOF, AND, AND_EQ, ANY, ENUM_ANY, ARRAY, AS, ASM, ASSERT, ASSOCIATEDTYPE, ASSOCIATIVITY, ASYNC, ATOMIC, ATOMIC_CANCEL, ATOMIC_COMMIT, ATOMIC_NOEXCEPT, AUTO, AWAIT, BASE, BITAND, BITOR, ENUM_BOOL, PURPLE_BOOL, BOOLEAN, BREAK, BYCOPY, BYREF, BYTE, CALENDAR, CASE, CATCH, CHAN, CHAR, CHAR16_T, CHAR32_T, CHECKED, CLASS, ENUM_CLASS, CLONE, CO_AWAIT, CO_RETURN, CO_YIELD, CODABLE, CODING_KEY, CODING_KEYS, COMPL, CONCEPT, CONSOLE, CONST, CONST_CAST, CONSTEXPR, CONSTRUCTOR, CONTINUE, CONVENIENCE, CONVERT, CONVERTER, CULTURE_INFO, DATE, DATE_PARSE_HANDLING, DATE_FORMATTER, DATE_ONLY, DATE_ONLY_CONVERTER, DATE_TIME, DATE_TIME_STYLES, DEBUGGER, DECIMAL, DECLARE, DECLTYPE, DECODE_STRING, DECODER, DECODING_ERROR, DEF, DEFAULT, DEFER, DEINIT, DEL, DELEGATE, DELETE, DICT, DICTIONARY, DID_SET, DO, DOUBLE, DYNAMIC, DYNAMIC_CAST, ELIF, ELSE, ENCODE_QUICK_TYPE, ENCODER, ENUM, ENUM_VALUES, EQUATABLE, EQUALITY_CONTRACT, EVENT, EXCEPT, EXCEPTION, EXPLICIT, EXPORT, EXPOSING, EXTENDS, EXTENSION, EXTERN, FALLTHROUGH, FALSE, ENUM_FALSE, FILEPRIVATE, FINAL, FINALLY, FIXED, FLOAT, FOR, FOREACH, FORMAT_EXCEPTION, FRIEND, FROM, FROM_DICT, FROM_JSON, FUNC, FUNCTION, GET, GLOBAL, GO, GOTO, GUARD, HASHABLE, HASH_CODE, HASHER, HAS_OWN_PROPERTY, ID, IF, IMP, IMPLEMENTS, IMPLICIT, IMPORT, IN, INDIRECT, INFIX, INIT, INLINE, INOUT, INSTANCEOF, INT, INTERFACE, INTERNAL, ISO_DATE_TIME_OFFSET_CONVERTER, ITERABLE, IS, JDEC, JENC, JPIPE, JSON, JSON_CONVERTER, JSON_SERIALIZER, JSON_TOKEN, JSON_WRITER, JSON_ANY, JSON_CODING_KEY, JSON_DECODER, JSON_ENCODER, JSON_EXCEPTION, JSON_GENERATOR, JSON_NODE, JSON_NULL, JSON_PARSER, JSON_READER, JSON_TOKEN_TYPE, LAMBDA, LAZY, LEFT, LET, LIST, LOCALE, LOCK, LONG, MAP, MARSHAL_JSON, MAP_ENTRY, METADATA_PROPERTY_HANDLING, MODULE, MUTABLE, MUTATING, NAMESPACE, NATIVE, NEW, NEWTONSOFT, NIL, NO, NOEXCEPT, NONATOMIC, NONE, ENUM_NONE, NONLOCAL, NONMUTATING, NS_OBJECT, NO_SUCH_METHOD, NOT, NOT_EQ, NS_ERROR, NS_STRING, NULL, ENUM_NULL, NULLPTR, NUMBER, OBJECT, OBJECT_MAPPER, OF, ONEWAY, OPEN, OPERATOR, OPTIONAL, OR, OR_EQ, OUT, OVERRIDE, PACKAGE, PARAMS, PASS, PORT, POSTFIX, PRECEDENCE, PREFIX, PRINT, PRINTF, PRINT_MEMBERS, PRIVATE, PROTECTED, PROTOCOL, ENUM_PROTOCOL, PUBLIC, QUICKTYPE, RAISE, RANGE, READONLY, REF, REG_EXP, REGISTER, REINTERPRET_CAST, REPEAT, REQUIRE, REQUIRED, REQUIRES, RESTRICT, RETAIN, RETHROWS, RETURN, RIGHT, RUNTIME_TYPE, S, SBYTE, SEALED, SEL, SELECT, SELF, SERIALIZABLE, ENUM_SELF, SENDABLE, SERIALIZE, SERIAL_NAME, K_SERIALIZER, PRIMITIVE_KIND, SERIAL_DESCRIPTOR, SERIALIZER_PROVIDER, SET, SHORT, SIGNED, SIMPLE_MODULE, SIZEOF, STACKALLOC, STANDARDS, STATIC, STATIC_ASSERT, STATIC_CAST, STD_DESERIALIZER, STD_SERIALIZER, STRICTFP, STRING, STRUCT, SUBSCRIPT, SUPER, SWITCH, SYMBOL, SYNCHRONIZED, SYSTEM, TEMPLATE, THEN, THIS, THREAD_LOCAL, THROW, THROWS, TIME_ONLY, TIME_ONLY_CONVERTER, TIME_ZONE, TO_JSON, TOP_LEVEL, TO_STRING, TO_DICT, TRANSIENT, TRUE, ENUM_TRUE, TRY, TYPE, ENUM_TYPE, TYPEALIAS, TYPEDEF, TYPEID, TYPENAME, TYPEOF, UINT, ULONG, UNCHECKED, UNDEFINED, UNION, UNMARSHAL_JSON, USE_SERIALIZERS, UNOWNED, UNSAFE, UNSIGNED, USHORT, USING, UTF8_JSON_READER, UTF8_JSON_WRITER, UUID, VAR, VIRTUAL, VOID, VOLATILE, WCHAR_T, WEAK, WHERE, WHILE, WILL_SET, WITH, XOR, XOR_EQ, YES, YIELD, DUMMY;
 
     @JsonValue
     public String toValue() {
@@ -130,6 +130,7 @@ public enum Enum {
             case FORMAT_EXCEPTION: return "FormatException";
             case FRIEND: return "friend";
             case FROM: return "from";
+            case FROM_DICT: return "from_dict";
             case FROM_JSON: return "from_json";
             case FUNC: return "func";
             case FUNCTION: return "function";
@@ -189,6 +190,7 @@ public enum Enum {
             case LOCK: return "lock";
             case LONG: return "long";
             case MAP: return "map";
+            case MARSHAL_JSON: return "MarshalJSON";
             case MAP_ENTRY: return "MapEntry";
             case METADATA_PROPERTY_HANDLING: return "metadata_property_handling";
             case MODULE: return "module";
@@ -308,6 +310,7 @@ public enum Enum {
             case TO_JSON: return "to_json";
             case TOP_LEVEL: return "top_level";
             case TO_STRING: return "toString";
+            case TO_DICT: return "to_dict";
             case TRANSIENT: return "transient";
             case TRUE: return "True";
             case ENUM_TRUE: return "true";
@@ -324,6 +327,7 @@ public enum Enum {
             case UNCHECKED: return "unchecked";
             case UNDEFINED: return "undefined";
             case UNION: return "union";
+            case UNMARSHAL_JSON: return "UnmarshalJSON";
             case USE_SERIALIZERS: return "UseSerializers";
             case UNOWNED: return "unowned";
             case UNSAFE: return "unsafe";
@@ -475,6 +479,7 @@ public enum Enum {
         if (value.equals("FormatException")) return FORMAT_EXCEPTION;
         if (value.equals("friend")) return FRIEND;
         if (value.equals("from")) return FROM;
+        if (value.equals("from_dict")) return FROM_DICT;
         if (value.equals("from_json")) return FROM_JSON;
         if (value.equals("func")) return FUNC;
         if (value.equals("function")) return FUNCTION;
@@ -534,6 +539,7 @@ public enum Enum {
         if (value.equals("lock")) return LOCK;
         if (value.equals("long")) return LONG;
         if (value.equals("map")) return MAP;
+        if (value.equals("MarshalJSON")) return MARSHAL_JSON;
         if (value.equals("MapEntry")) return MAP_ENTRY;
         if (value.equals("metadata_property_handling")) return METADATA_PROPERTY_HANDLING;
         if (value.equals("module")) return MODULE;
@@ -653,6 +659,7 @@ public enum Enum {
         if (value.equals("to_json")) return TO_JSON;
         if (value.equals("top_level")) return TOP_LEVEL;
         if (value.equals("toString")) return TO_STRING;
+        if (value.equals("to_dict")) return TO_DICT;
         if (value.equals("transient")) return TRANSIENT;
         if (value.equals("True")) return TRUE;
         if (value.equals("true")) return ENUM_TRUE;
@@ -669,6 +676,7 @@ public enum Enum {
         if (value.equals("unchecked")) return UNCHECKED;
         if (value.equals("undefined")) return UNDEFINED;
         if (value.equals("union")) return UNION;
+        if (value.equals("UnmarshalJSON")) return UNMARSHAL_JSON;
         if (value.equals("UseSerializers")) return USE_SERIALIZERS;
         if (value.equals("unowned")) return UNOWNED;
         if (value.equals("unsafe")) return UNSAFE;
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
new file mode 100644
index 0000000..7d33f5c
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/FromDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class FromDict {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
new file mode 100644
index 0000000..d012bac
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/MarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class MarshalJSON {
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
new file mode 100644
index 0000000..5de20d3
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/ToDict.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class ToDict {
+}
diff --git a/base/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
index 9df2c78..d741eed 100644
--- a/base/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -125,6 +125,7 @@ public class TopLevel {
     private UnionFormatException formatException;
     private UnionFriend friend;
     private UnionFrom from;
+    private UnionFromDict fromDict;
     private UnionFromJSON fromJSON;
     private UnionFunc func;
     private UnionFunction function;
@@ -186,6 +187,7 @@ public class TopLevel {
     private UnionLong topLevelLong;
     private UnionMap map;
     private UnionMapEntry mapEntry;
+    private UnionMarshalJSON marshalJSON;
     private UnionMetadataPropertyHandling metadataPropertyHandling;
     private UnionModule module;
     private UnionMutable mutable;
@@ -300,6 +302,7 @@ public class TopLevel {
     private UnionTimeOnly timeOnly;
     private UnionTimeOnlyConverter timeOnlyConverter;
     private UnionTimeZone timeZone;
+    private UnionToDict toDict;
     private UnionToJSON toJSON;
     private UnionTopLevel topLevel;
     private UnionToString toString;
@@ -319,6 +322,7 @@ public class TopLevel {
     private UnionUnchecked unchecked;
     private UnionUndefined undefined;
     private UnionUnionUnion union;
+    private UnionUnmarshalJSON unmarshalJSON;
     private UnionUnowned unowned;
     private UnionUnsafe unsafe;
     private UnionUnsigned unsigned;
@@ -953,6 +957,11 @@ public class TopLevel {
     @JsonProperty("from")
     public void setFrom(UnionFrom value) { this.from = value; }
 
+    @JsonProperty("from_dict")
+    public UnionFromDict getFromDict() { return fromDict; }
+    @JsonProperty("from_dict")
+    public void setFromDict(UnionFromDict value) { this.fromDict = value; }
+
     @JsonProperty("from_json")
     public UnionFromJSON getFromJSON() { return fromJSON; }
     @JsonProperty("from_json")
@@ -1258,6 +1267,11 @@ public class TopLevel {
     @JsonProperty("MapEntry")
     public void setMapEntry(UnionMapEntry value) { this.mapEntry = value; }
 
+    @JsonProperty("MarshalJSON")
+    public UnionMarshalJSON getMarshalJSON() { return marshalJSON; }
+    @JsonProperty("MarshalJSON")
+    public void setMarshalJSON(UnionMarshalJSON value) { this.marshalJSON = value; }
+
     @JsonProperty("metadata_property_handling")
     public UnionMetadataPropertyHandling getMetadataPropertyHandling() { return metadataPropertyHandling; }
     @JsonProperty("metadata_property_handling")
@@ -1828,6 +1842,11 @@ public class TopLevel {
     @JsonProperty("TimeZone")
     public void setTimeZone(UnionTimeZone value) { this.timeZone = value; }
 
+    @JsonProperty("to_dict")
+    public UnionToDict getToDict() { return toDict; }
+    @JsonProperty("to_dict")
+    public void setToDict(UnionToDict value) { this.toDict = value; }
+
     @JsonProperty("to_json")
     public UnionToJSON getToJSON() { return toJSON; }
     @JsonProperty("to_json")
@@ -1923,6 +1942,11 @@ public class TopLevel {
     @JsonProperty("union")
     public void setUnion(UnionUnionUnion value) { this.union = value; }
 
+    @JsonProperty("UnmarshalJSON")
+    public UnionUnmarshalJSON getUnmarshalJSON() { return unmarshalJSON; }
+    @JsonProperty("UnmarshalJSON")
+    public void setUnmarshalJSON(UnionUnmarshalJSON value) { this.unmarshalJSON = value; }
+
     @JsonProperty("unowned")
     public UnionUnowned getUnowned() { return unowned; }
     @JsonProperty("unowned")
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
new file mode 100644
index 0000000..1030cd2
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionFromDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionFromDict.Deserializer.class)
+@JsonSerialize(using = UnionFromDict.Serializer.class)
+public class UnionFromDict {
+    public Double doubleValue;
+    public FromDict fromDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionFromDict> {
+        @Override
+        public UnionFromDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionFromDict value = new UnionFromDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.fromDictValue = jsonParser.readValueAs(FromDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionFromDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionFromDict> {
+        @Override
+        public void serialize(UnionFromDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.fromDictValue != null) {
+                jsonGenerator.writeObject(obj.fromDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
new file mode 100644
index 0000000..acfbb99
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionMarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionMarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionMarshalJSON.Serializer.class)
+public class UnionMarshalJSON {
+    public Double doubleValue;
+    public MarshalJSON marshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionMarshalJSON> {
+        @Override
+        public UnionMarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionMarshalJSON value = new UnionMarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.marshalJSONValue = jsonParser.readValueAs(MarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionMarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionMarshalJSON> {
+        @Override
+        public void serialize(UnionMarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.marshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.marshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
new file mode 100644
index 0000000..31f2c43
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionToDict.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionToDict.Deserializer.class)
+@JsonSerialize(using = UnionToDict.Serializer.class)
+public class UnionToDict {
+    public Double doubleValue;
+    public ToDict toDictValue;
+
+    static class Deserializer extends JsonDeserializer<UnionToDict> {
+        @Override
+        public UnionToDict deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionToDict value = new UnionToDict();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.toDictValue = jsonParser.readValueAs(ToDict.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionToDict");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionToDict> {
+        @Override
+        public void serialize(UnionToDict obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.toDictValue != null) {
+                jsonGenerator.writeObject(obj.toDictValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
new file mode 100644
index 0000000..538b13f
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnionUnmarshalJSON.java
@@ -0,0 +1,50 @@
+package io.quicktype;
+
+import java.io.IOException;
+import java.io.IOException;
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.annotation.*;
+import com.fasterxml.jackson.core.type.*;
+
+@JsonDeserialize(using = UnionUnmarshalJSON.Deserializer.class)
+@JsonSerialize(using = UnionUnmarshalJSON.Serializer.class)
+public class UnionUnmarshalJSON {
+    public Double doubleValue;
+    public UnmarshalJSON unmarshalJSONValue;
+
+    static class Deserializer extends JsonDeserializer<UnionUnmarshalJSON> {
+        @Override
+        public UnionUnmarshalJSON deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            UnionUnmarshalJSON value = new UnionUnmarshalJSON();
+            switch (jsonParser.currentToken()) {
+                case VALUE_NULL:
+                    break;
+                case VALUE_NUMBER_INT:
+                case VALUE_NUMBER_FLOAT:
+                    value.doubleValue = jsonParser.readValueAs(Double.class);
+                    break;
+                case START_OBJECT:
+                    value.unmarshalJSONValue = jsonParser.readValueAs(UnmarshalJSON.class);
+                    break;
+                default: throw new IOException("Cannot deserialize UnionUnmarshalJSON");
+            }
+            return value;
+        }
+    }
+
+    static class Serializer extends JsonSerializer<UnionUnmarshalJSON> {
+        @Override
+        public void serialize(UnionUnmarshalJSON obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            if (obj.doubleValue != null) {
+                jsonGenerator.writeObject(obj.doubleValue);
+                return;
+            }
+            if (obj.unmarshalJSONValue != null) {
+                jsonGenerator.writeObject(obj.unmarshalJSONValue);
+                return;
+            }
+            jsonGenerator.writeNull();
+        }
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
new file mode 100644
index 0000000..a848793
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/keyword-unions.schema/default/src/main/java/io/quicktype/UnmarshalJSON.java
@@ -0,0 +1,7 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.NONE)
+public class UnmarshalJSON {
+}
diff --git a/base/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
index eb93e60..154797c 100644
--- a/base/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
index 01d1011..21b8574 100644
--- a/base/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
index 93439e6..a7e673a 100644
--- a/base/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
index d5a8ec8..0d81450 100644
--- a/base/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
index 596d20f..76f7547 100644
--- a/base/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
index 4b3914b..c0e550b 100644
--- a/base/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
index 0c7c22f..91bb633 100644
--- a/base/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
index 13e6554..72e87d1 100644
--- a/base/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
index df87d90..2dac6aa 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
index df87d90..2dac6aa 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
index d5f1013..c674b26 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
index fc9edb9..ba69430 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
index 633025b..783418a 100644
--- a/base/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
index 38db74a..9343932 100644
--- a/base/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
index 8f33714..1481ace 100644
--- a/base/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
index 02a84a3..4d28176 100644
--- a/base/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
index e3c81ff..285a16b 100644
--- a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
index fed7bb6..9c7d374 100644
--- a/base/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
index a60a61d..5519be4 100644
--- a/base/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
index 9beaaae..339ad39 100644
--- a/base/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
index bd3ee9a..d1970f4 100644
--- a/base/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
index 57bbea2..1e8b660 100644
--- a/base/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
index a0aed2b..da47547 100644
--- a/base/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
index 492c8d8..6efdca8 100644
--- a/base/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
index c7ec8cd..4de4ca1 100644
--- a/base/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
index 2242ba6..6806070 100644
--- a/base/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
index 2f0bc8f..50507ac 100644
--- a/base/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
index e5d80d9..f69fbc0 100644
--- a/base/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
index 074fee8..57ead81 100644
--- a/base/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
index 8ceabb8..12344b7 100644
--- a/base/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
index c70a4f7..7daea57 100644
--- a/base/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
index b293c44..038af9b 100644
--- a/base/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
index afc3a12..4dc53ea 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
index 7b6d864..ecb67b6 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
index 77234bf..fcb27b0 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
index 0be94db..039832e 100644
--- a/base/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
index dbc9c1a..9a0922c 100644
--- a/base/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
index 0464053..499421f 100644
--- a/base/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
index b132e1a..e04899d 100644
--- a/base/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
index 42c8812..d2b9fa9 100644
--- a/base/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
index a7c7c5e..07e6097 100644
--- a/base/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
index 9515706..42e24b8 100644
--- a/base/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index 0ca689e..c2e5eaf 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -317,6 +317,7 @@ const typeMap = {
         "FormatException",
         "friend",
         "from",
+        "from_dict",
         "from_json",
         "func",
         "function",
@@ -376,6 +377,7 @@ const typeMap = {
         "lock",
         "long",
         "map",
+        "MarshalJSON",
         "MapEntry",
         "metadata_property_handling",
         "module",
@@ -495,6 +497,7 @@ const typeMap = {
         "to_json",
         "top_level",
         "toString",
+        "to_dict",
         "transient",
         "True",
         "true",
@@ -511,6 +514,7 @@ const typeMap = {
         "unchecked",
         "undefined",
         "union",
+        "UnmarshalJSON",
         "UseSerializers",
         "unowned",
         "unsafe",
diff --git a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index 70a8b52..b84c487 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -315,6 +315,7 @@ const typeMap = {
         { json: "FormatException", js: "FormatException", typ: u(undefined, u(r("FormatException"), 3.14)) },
         { json: "friend", js: "friend", typ: u(undefined, u(r("Friend"), 3.14)) },
         { json: "from", js: "from", typ: u(undefined, u(r("From"), 3.14)) },
+        { json: "from_dict", js: "from_dict", typ: u(undefined, u(r("FromDict"), 3.14)) },
         { json: "from_json", js: "from_json", typ: u(undefined, u(r("FromJSON"), 3.14)) },
         { json: "func", js: "func", typ: u(undefined, u(r("Func"), 3.14)) },
         { json: "function", js: "function", typ: u(undefined, u(r("Function"), 3.14)) },
@@ -376,6 +377,7 @@ const typeMap = {
         { json: "long", js: "long", typ: u(undefined, u(r("Long"), 3.14)) },
         { json: "map", js: "map", typ: u(undefined, u(r("Map"), 3.14)) },
         { json: "MapEntry", js: "MapEntry", typ: u(undefined, u(r("MapEntry"), 3.14)) },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: u(undefined, u(r("MarshalJSON"), 3.14)) },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: u(undefined, u(r("MetadataPropertyHandling"), 3.14)) },
         { json: "module", js: "module", typ: u(undefined, u(r("Module"), 3.14)) },
         { json: "mutable", js: "mutable", typ: u(undefined, u(r("Mutable"), 3.14)) },
@@ -490,6 +492,7 @@ const typeMap = {
         { json: "TimeOnly", js: "TimeOnly", typ: u(undefined, u(r("TimeOnly"), 3.14)) },
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: u(undefined, u(r("TimeOnlyConverter"), 3.14)) },
         { json: "TimeZone", js: "TimeZone", typ: u(undefined, u(r("TimeZone"), 3.14)) },
+        { json: "to_dict", js: "to_dict", typ: u(undefined, u(r("ToDict"), 3.14)) },
         { json: "to_json", js: "to_json", typ: u(undefined, u(r("ToJSON"), 3.14)) },
         { json: "top_level", js: "top_level", typ: u(undefined, u(r("TopLevelClass"), 3.14)) },
         { json: "toString", js: "toString", typ: u(undefined, u(r("ToString"), 3.14)) },
@@ -509,6 +512,7 @@ const typeMap = {
         { json: "unchecked", js: "unchecked", typ: u(undefined, u(r("Unchecked"), 3.14)) },
         { json: "undefined", js: "undefined", typ: u(undefined, u(r("Undefined"), 3.14)) },
         { json: "union", js: "union", typ: u(undefined, u(r("Union"), 3.14)) },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: u(undefined, u(r("UnmarshalJSON"), 3.14)) },
         { json: "unowned", js: "unowned", typ: u(undefined, u(r("Unowned"), 3.14)) },
         { json: "unsafe", js: "unsafe", typ: u(undefined, u(r("Unsafe"), 3.14)) },
         { json: "unsigned", js: "unsigned", typ: u(undefined, u(r("Unsigned"), 3.14)) },
@@ -609,6 +613,8 @@ const typeMap = {
     ], false),
     "MapEntry": o([
     ], false),
+    "MarshalJSON": o([
+    ], false),
     "No": o([
     ], false),
     "NSError": o([
@@ -663,6 +669,8 @@ const typeMap = {
     ], false),
     "UUID": o([
     ], false),
+    "UnmarshalJSON": o([
+    ], false),
     "UseSerializers": o([
     ], false),
     "Utf8JSONReader": o([
@@ -873,6 +881,8 @@ const typeMap = {
     ], false),
     "From": o([
     ], false),
+    "FromDict": o([
+    ], false),
     "FromJSON": o([
     ], false),
     "Func": o([
@@ -1141,6 +1151,8 @@ const typeMap = {
     ], false),
     "ToString": o([
     ], false),
+    "ToDict": o([
+    ], false),
     "ToJSON": o([
     ], false),
     "TopLevelClass": o([
diff --git a/base/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
index 728625c..57811e6 100644
--- a/base/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
index 2374532..ef2cb33 100644
--- a/base/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
index b484c0d..6b88673 100644
--- a/base/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
index d29d8cb..4fc5ece 100644
--- a/base/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
index ef1dd4c..6c9528f 100644
--- a/base/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
index 7fbee31..aef1a14 100644
--- a/base/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
index c378dc9..30fe404 100644
--- a/base/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
index ac03b2a..6ab00e7 100644
--- a/base/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
index 5fcdf07..ca65e69 100644
--- a/base/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
index b3dee50..c733173 100644
--- a/base/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
index ad02812..d582759 100644
--- a/base/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
index 4b78556..3f9d981 100644
--- a/base/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
index cb9365b..305247f 100644
--- a/base/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
index d9d25b7..a92010b 100644
--- a/base/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
index dfcbd91..3011e2c 100644
--- a/base/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
index 464092f..4f4a047 100644
--- a/base/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
index b06093c..a44a01e 100644
--- a/base/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js
index 60e3446..b1f3239 100644
--- a/base/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
index 4b96753..748c15d 100644
--- a/base/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
index 87d210f..6aab75f 100644
--- a/base/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
index b2316bd..4c99b15 100644
--- a/base/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
index 17a3209..f892c8e 100644
--- a/base/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
index 8f33714..1481ace 100644
--- a/base/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
index 2374532..ef2cb33 100644
--- a/base/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
index 6759356..5296c11 100644
--- a/base/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
index 28f27ca..ca9a108 100644
--- a/base/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
index 4f4880b..51d7faa 100644
--- a/base/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
index 28f27ca..ca9a108 100644
--- a/base/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
index c5a3d56..bd6165f 100644
--- a/base/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
index 90aacfd..9424391 100644
--- a/base/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
index 2374532..ef2cb33 100644
--- a/base/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
index fc674aa..4f47d43 100644
--- a/base/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
index c52556d..315f9f3 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
index a86a1a2..65890d1 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
index b35df94..960e9f5 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
index 28cb102..c749fac 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
index 0d95545..d7f14f7 100644
--- a/base/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
index 2608ea9..fff310d 100644
--- a/base/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
index d82c497..b249542 100644
--- a/base/schema-javascript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
index 02359d9..78c36f9 100644
--- a/base/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
index a10786e..72fc813 100644
--- a/base/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
index 7b9e08f..5492a65 100644
--- a/base/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
index 4694515..fcf3299 100644
--- a/base/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
index 61dcf18..76f28a7 100644
--- a/base/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
@@ -101,7 +101,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result = {};
+        const result = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -112,7 +112,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
index 867a843..a8d385a 100644
--- a/base/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
+++ b/head/schema-javascript-prop-types/test/inputs/schema/keyword-enum.schema/default/toplevel.js
@@ -13,7 +13,7 @@
 import PropTypes from "prop-types";
 
 let _TopLevel;
-const _Enum = PropTypes.oneOf(['_', '_Bool', '_Complex', '_Imaginery', 'abstract', 'alignas', 'alignof', 'and', 'and_eq', 'any', 'Any', 'array', 'as', 'asm', 'assert', 'associatedtype', 'associativity', 'async', 'atomic', 'atomic_cancel', 'atomic_commit', 'atomic_noexcept', 'auto', 'await', 'base', 'bitand', 'bitor', 'BOOL', 'bool', 'boolean', 'break', 'bycopy', 'byref', 'byte', 'Calendar', 'case', 'catch', 'chan', 'char', 'char16_t', 'char32_t', 'checked', 'class', 'Class', 'clone', 'co_await', 'co_return', 'co_yield', 'Codable', 'CodingKey', 'CodingKeys', 'compl', 'concept', 'console', 'const', 'const_cast', 'constexpr', 'constructor', 'continue', 'convenience', 'convert', 'converter', 'CultureInfo', 'date', 'date_parse_handling', 'DateFormatter', 'DateOnly', 'DateOnlyConverter', 'DateTime', 'DateTimeStyles', 'debugger', 'decimal', 'declare', 'decltype', 'decode_string', 'Decoder', 'DecodingError', 'def', 'default', 'defer', 'deinit', 'del', 'delegate', 'delete', 'dict', 'dictionary', 'didSet', 'do', 'double', 'dynamic', 'dynamic_cast', 'elif', 'else', 'encode_quick_type', 'Encoder', 'enum', 'EnumValues', 'Equatable', 'equalityContract', 'event', 'except', 'exception', 'explicit', 'export', 'exposing', 'extends', 'extension', 'extern', 'fallthrough', 'false', 'False', 'fileprivate', 'final', 'finally', 'fixed', 'float', 'for', 'foreach', 'FormatException', 'friend', 'from', 'from_json', 'func', 'function', 'get', 'global', 'go', 'goto', 'guard', 'Hashable', 'hashCode', 'Hasher', 'hasOwnProperty', 'id', 'if', 'IMP', 'implements', 'implicit', 'import', 'in', 'indirect', 'infix', 'init', 'inline', 'inout', 'instanceof', 'int', 'interface', 'internal', 'IsoDateTimeOffsetConverter', 'iterable', 'is', 'jdec', 'jenc', 'jpipe', 'json', 'json_converter', 'json_serializer', 'json_token', 'json_writer', 'JSONAny', 'JSONCodingKey', 'JSONDecoder', 'JSONEncoder', 'JsonException', 'JsonGenerator', 'JsonNode', 'JSONNull', 'JsonParser', 'JsonReader', 'JsonTokenType', 'lambda', 'lazy', 'left', 'let', 'list', 'Locale', 'lock', 'long', 'map', 'MapEntry', 'metadata_property_handling', 'module', 'mutable', 'mutating', 'namespace', 'native', 'new', 'newtonsoft', 'nil', 'NO', 'noexcept', 'nonatomic', 'none', 'None', 'nonlocal', 'nonmutating', 'NSObject', 'noSuchMethod', 'not', 'not_eq', 'NSError', 'NSString', 'NULL', 'null', 'nullptr', 'number', 'object', 'ObjectMapper', 'of', 'oneway', 'open', 'operator', 'optional', 'or', 'or_eq', 'out', 'override', 'package', 'params', 'pass', 'port', 'postfix', 'precedence', 'prefix', 'print', 'printf', 'printMembers', 'private', 'protected', 'Protocol', 'protocol', 'public', 'quicktype', 'raise', 'range', 'readonly', 'ref', 'RegExp', 'register', 'reinterpret_cast', 'repeat', 'require', 'required', 'requires', 'restrict', 'retain', 'rethrows', 'return', 'right', 'runtimeType', 's', 'sbyte', 'sealed', 'SEL', 'select', 'Self', 'Serializable', 'self', 'Sendable', 'serialize', 'SerialName', 'KSerializer', 'PrimitiveKind', 'SerialDescriptor', 'SerializerProvider', 'set', 'short', 'signed', 'SimpleModule', 'sizeof', 'stackalloc', 'Standards', 'static', 'static_assert', 'static_cast', 'StdDeserializer', 'StdSerializer', 'strictfp', 'string', 'struct', 'subscript', 'super', 'switch', 'symbol', 'synchronized', 'system', 'template', 'then', 'this', 'thread_local', 'throw', 'throws', 'TimeOnly', 'TimeOnlyConverter', 'TimeZone', 'to_json', 'top_level', 'toString', 'transient', 'True', 'true', 'try', 'Type', 'type', 'typealias', 'typedef', 'typeid', 'typename', 'typeof', 'uint', 'ulong', 'unchecked', 'undefined', 'union', 'UseSerializers', 'unowned', 'unsafe', 'unsigned', 'ushort', 'using', 'Utf8JsonReader', 'Utf8JsonWriter', 'UUID', 'var', 'virtual', 'void', 'volatile', 'wchar_t', 'weak', 'where', 'while', 'willSet', 'with', 'xor', 'xor_eq', 'YES', 'yield', 'dummy']);
+const _Enum = PropTypes.oneOf(['_', '_Bool', '_Complex', '_Imaginery', 'abstract', 'alignas', 'alignof', 'and', 'and_eq', 'any', 'Any', 'array', 'as', 'asm', 'assert', 'associatedtype', 'associativity', 'async', 'atomic', 'atomic_cancel', 'atomic_commit', 'atomic_noexcept', 'auto', 'await', 'base', 'bitand', 'bitor', 'BOOL', 'bool', 'boolean', 'break', 'bycopy', 'byref', 'byte', 'Calendar', 'case', 'catch', 'chan', 'char', 'char16_t', 'char32_t', 'checked', 'class', 'Class', 'clone', 'co_await', 'co_return', 'co_yield', 'Codable', 'CodingKey', 'CodingKeys', 'compl', 'concept', 'console', 'const', 'const_cast', 'constexpr', 'constructor', 'continue', 'convenience', 'convert', 'converter', 'CultureInfo', 'date', 'date_parse_handling', 'DateFormatter', 'DateOnly', 'DateOnlyConverter', 'DateTime', 'DateTimeStyles', 'debugger', 'decimal', 'declare', 'decltype', 'decode_string', 'Decoder', 'DecodingError', 'def', 'default', 'defer', 'deinit', 'del', 'delegate', 'delete', 'dict', 'dictionary', 'didSet', 'do', 'double', 'dynamic', 'dynamic_cast', 'elif', 'else', 'encode_quick_type', 'Encoder', 'enum', 'EnumValues', 'Equatable', 'equalityContract', 'event', 'except', 'exception', 'explicit', 'export', 'exposing', 'extends', 'extension', 'extern', 'fallthrough', 'false', 'False', 'fileprivate', 'final', 'finally', 'fixed', 'float', 'for', 'foreach', 'FormatException', 'friend', 'from', 'from_dict', 'from_json', 'func', 'function', 'get', 'global', 'go', 'goto', 'guard', 'Hashable', 'hashCode', 'Hasher', 'hasOwnProperty', 'id', 'if', 'IMP', 'implements', 'implicit', 'import', 'in', 'indirect', 'infix', 'init', 'inline', 'inout', 'instanceof', 'int', 'interface', 'internal', 'IsoDateTimeOffsetConverter', 'iterable', 'is', 'jdec', 'jenc', 'jpipe', 'json', 'json_converter', 'json_serializer', 'json_token', 'json_writer', 'JSONAny', 'JSONCodingKey', 'JSONDecoder', 'JSONEncoder', 'JsonException', 'JsonGenerator', 'JsonNode', 'JSONNull', 'JsonParser', 'JsonReader', 'JsonTokenType', 'lambda', 'lazy', 'left', 'let', 'list', 'Locale', 'lock', 'long', 'map', 'MarshalJSON', 'MapEntry', 'metadata_property_handling', 'module', 'mutable', 'mutating', 'namespace', 'native', 'new', 'newtonsoft', 'nil', 'NO', 'noexcept', 'nonatomic', 'none', 'None', 'nonlocal', 'nonmutating', 'NSObject', 'noSuchMethod', 'not', 'not_eq', 'NSError', 'NSString', 'NULL', 'null', 'nullptr', 'number', 'object', 'ObjectMapper', 'of', 'oneway', 'open', 'operator', 'optional', 'or', 'or_eq', 'out', 'override', 'package', 'params', 'pass', 'port', 'postfix', 'precedence', 'prefix', 'print', 'printf', 'printMembers', 'private', 'protected', 'Protocol', 'protocol', 'public', 'quicktype', 'raise', 'range', 'readonly', 'ref', 'RegExp', 'register', 'reinterpret_cast', 'repeat', 'require', 'required', 'requires', 'restrict', 'retain', 'rethrows', 'return', 'right', 'runtimeType', 's', 'sbyte', 'sealed', 'SEL', 'select', 'Self', 'Serializable', 'self', 'Sendable', 'serialize', 'SerialName', 'KSerializer', 'PrimitiveKind', 'SerialDescriptor', 'SerializerProvider', 'set', 'short', 'signed', 'SimpleModule', 'sizeof', 'stackalloc', 'Standards', 'static', 'static_assert', 'static_cast', 'StdDeserializer', 'StdSerializer', 'strictfp', 'string', 'struct', 'subscript', 'super', 'switch', 'symbol', 'synchronized', 'system', 'template', 'then', 'this', 'thread_local', 'throw', 'throws', 'TimeOnly', 'TimeOnlyConverter', 'TimeZone', 'to_json', 'top_level', 'toString', 'to_dict', 'transient', 'True', 'true', 'try', 'Type', 'type', 'typealias', 'typedef', 'typeid', 'typename', 'typeof', 'uint', 'ulong', 'unchecked', 'undefined', 'union', 'UnmarshalJSON', 'UseSerializers', 'unowned', 'unsafe', 'unsigned', 'ushort', 'using', 'Utf8JsonReader', 'Utf8JsonWriter', 'UUID', 'var', 'virtual', 'void', 'volatile', 'wchar_t', 'weak', 'where', 'while', 'willSet', 'with', 'xor', 'xor_eq', 'YES', 'yield', 'dummy']);
 _TopLevel = PropTypes.shape({
     "enum": PropTypes.oneOfType([_Enum, PropTypes.oneOf([null])]),
 });
diff --git a/base/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
index 3bc9c0f..0c08203 100644
--- a/base/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
+++ b/head/schema-javascript-prop-types/test/inputs/schema/keyword-unions.schema/default/toplevel.js
@@ -51,6 +51,7 @@ let _JSONTokenType;
 let _KSerializer;
 let _Locale;
 let _MapEntry;
+let _MarshalJSON;
 let _No;
 let _NSError;
 let _NSObject;
@@ -78,6 +79,7 @@ let _TimeZone;
 let _True;
 let _Type;
 let _UUID;
+let _UnmarshalJSON;
 let _UseSerializers;
 let _Utf8JSONReader;
 let _Utf8JSONWriter;
@@ -183,6 +185,7 @@ let _For;
 let _Foreach;
 let _Friend;
 let _From;
+let _FromDict;
 let _FromJSON;
 let _Func;
 let _Function;
@@ -317,6 +320,7 @@ let _ThreadLocal;
 let _Throw;
 let _Throws;
 let _ToString;
+let _ToDict;
 let _ToJSON;
 let _TopLevelClass;
 let _Transient;
@@ -427,6 +431,8 @@ _Locale = PropTypes.shape({
 });
 _MapEntry = PropTypes.shape({
 });
+_MarshalJSON = PropTypes.shape({
+});
 _No = PropTypes.shape({
 });
 _NSError = PropTypes.shape({
@@ -481,6 +487,8 @@ _Type = PropTypes.shape({
 });
 _UUID = PropTypes.shape({
 });
+_UnmarshalJSON = PropTypes.shape({
+});
 _UseSerializers = PropTypes.shape({
 });
 _Utf8JSONReader = PropTypes.shape({
@@ -691,6 +699,8 @@ _Friend = PropTypes.shape({
 });
 _From = PropTypes.shape({
 });
+_FromDict = PropTypes.shape({
+});
 _FromJSON = PropTypes.shape({
 });
 _Func = PropTypes.shape({
@@ -959,6 +969,8 @@ _Throws = PropTypes.shape({
 });
 _ToString = PropTypes.shape({
 });
+_ToDict = PropTypes.shape({
+});
 _ToJSON = PropTypes.shape({
 });
 _TopLevelClass = PropTypes.shape({
@@ -1150,6 +1162,7 @@ _TopLevel = PropTypes.shape({
     "FormatException": PropTypes.oneOfType([_FormatException, PropTypes.number, PropTypes.oneOf([null])]),
     "friend": PropTypes.oneOfType([_Friend, PropTypes.number, PropTypes.oneOf([null])]),
     "from": PropTypes.oneOfType([_From, PropTypes.number, PropTypes.oneOf([null])]),
+    "from_dict": PropTypes.oneOfType([_FromDict, PropTypes.number, PropTypes.oneOf([null])]),
     "from_json": PropTypes.oneOfType([_FromJSON, PropTypes.number, PropTypes.oneOf([null])]),
     "func": PropTypes.oneOfType([_Func, PropTypes.number, PropTypes.oneOf([null])]),
     "function": PropTypes.oneOfType([_Function, PropTypes.number, PropTypes.oneOf([null])]),
@@ -1211,6 +1224,7 @@ _TopLevel = PropTypes.shape({
     "long": PropTypes.oneOfType([_Long, PropTypes.number, PropTypes.oneOf([null])]),
     "map": PropTypes.oneOfType([_Map, PropTypes.number, PropTypes.oneOf([null])]),
     "MapEntry": PropTypes.oneOfType([_MapEntry, PropTypes.number, PropTypes.oneOf([null])]),
+    "MarshalJSON": PropTypes.oneOfType([_MarshalJSON, PropTypes.number, PropTypes.oneOf([null])]),
     "metadata_property_handling": PropTypes.oneOfType([_MetadataPropertyHandling, PropTypes.number, PropTypes.oneOf([null])]),
     "module": PropTypes.oneOfType([_Module, PropTypes.number, PropTypes.oneOf([null])]),
     "mutable": PropTypes.oneOfType([_Mutable, PropTypes.number, PropTypes.oneOf([null])]),
@@ -1325,6 +1339,7 @@ _TopLevel = PropTypes.shape({
     "TimeOnly": PropTypes.oneOfType([_TimeOnly, PropTypes.number, PropTypes.oneOf([null])]),
     "TimeOnlyConverter": PropTypes.oneOfType([_TimeOnlyConverter, PropTypes.number, PropTypes.oneOf([null])]),
     "TimeZone": PropTypes.oneOfType([_TimeZone, PropTypes.number, PropTypes.oneOf([null])]),
+    "to_dict": PropTypes.oneOfType([_ToDict, PropTypes.number, PropTypes.oneOf([null])]),
     "to_json": PropTypes.oneOfType([_ToJSON, PropTypes.number, PropTypes.oneOf([null])]),
     "top_level": PropTypes.oneOfType([_TopLevelClass, PropTypes.number, PropTypes.oneOf([null])]),
     "toString": (props, name, ...args) => Object.prototype.hasOwnProperty.call(props, name) ? PropTypes.oneOfType([_ToString, PropTypes.number, PropTypes.oneOf([null])])(props, name, ...args) : null,
@@ -1344,6 +1359,7 @@ _TopLevel = PropTypes.shape({
     "unchecked": PropTypes.oneOfType([_Unchecked, PropTypes.number, PropTypes.oneOf([null])]),
     "undefined": PropTypes.oneOfType([_Undefined, PropTypes.number, PropTypes.oneOf([null])]),
     "union": PropTypes.oneOfType([_Union, PropTypes.number, PropTypes.oneOf([null])]),
+    "UnmarshalJSON": PropTypes.oneOfType([_UnmarshalJSON, PropTypes.number, PropTypes.oneOf([null])]),
     "unowned": PropTypes.oneOfType([_Unowned, PropTypes.number, PropTypes.oneOf([null])]),
     "unsafe": PropTypes.oneOfType([_Unsafe, PropTypes.number, PropTypes.oneOf([null])]),
     "unsigned": PropTypes.oneOfType([_Unsigned, PropTypes.number, PropTypes.oneOf([null])]),
diff --git a/base/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index 13c5209..2c3507d 100644
--- a/base/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlin/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -149,6 +149,7 @@ enum class EnumEnum(val value: String) {
     FormatException("FormatException"),
     Friend("friend"),
     From("from"),
+    FromDict("from_dict"),
     FromJSON("from_json"),
     Func("func"),
     Function("function"),
@@ -208,6 +209,7 @@ enum class EnumEnum(val value: String) {
     Lock("lock"),
     EnumLong("long"),
     EnumMap("map"),
+    MarshalJSON("MarshalJSON"),
     MapEntry("MapEntry"),
     MetadataPropertyHandling("metadata_property_handling"),
     Module("module"),
@@ -327,6 +329,7 @@ enum class EnumEnum(val value: String) {
     ToJSON("to_json"),
     TopLevel("top_level"),
     ToString("toString"),
+    ToDict("to_dict"),
     Transient("transient"),
     True("True"),
     EnumTrue("true"),
@@ -343,6 +346,7 @@ enum class EnumEnum(val value: String) {
     Unchecked("unchecked"),
     Undefined("undefined"),
     Union("union"),
+    UnmarshalJSON("UnmarshalJSON"),
     UseSerializers("UseSerializers"),
     Unowned("unowned"),
     Unsafe("unsafe"),
@@ -491,6 +495,7 @@ enum class EnumEnum(val value: String) {
             "FormatException"            -> FormatException
             "friend"                     -> Friend
             "from"                       -> From
+            "from_dict"                  -> FromDict
             "from_json"                  -> FromJSON
             "func"                       -> Func
             "function"                   -> Function
@@ -550,6 +555,7 @@ enum class EnumEnum(val value: String) {
             "lock"                       -> Lock
             "long"                       -> EnumLong
             "map"                        -> EnumMap
+            "MarshalJSON"                -> MarshalJSON
             "MapEntry"                   -> MapEntry
             "metadata_property_handling" -> MetadataPropertyHandling
             "module"                     -> Module
@@ -669,6 +675,7 @@ enum class EnumEnum(val value: String) {
             "to_json"                    -> ToJSON
             "top_level"                  -> TopLevel
             "toString"                   -> ToString
+            "to_dict"                    -> ToDict
             "transient"                  -> Transient
             "True"                       -> True
             "true"                       -> EnumTrue
@@ -685,6 +692,7 @@ enum class EnumEnum(val value: String) {
             "unchecked"                  -> Unchecked
             "undefined"                  -> Undefined
             "union"                      -> Union
+            "UnmarshalJSON"              -> UnmarshalJSON
             "UseSerializers"             -> UseSerializers
             "unowned"                    -> Unowned
             "unsafe"                     -> Unsafe
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index 00e0de1..f9c7fed 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -162,6 +162,7 @@ enum class EnumEnum(val value: String) {
     FormatException("FormatException"),
     Friend("friend"),
     From("from"),
+    FromDict("from_dict"),
     FromJSON("from_json"),
     Func("func"),
     Function("function"),
@@ -221,6 +222,7 @@ enum class EnumEnum(val value: String) {
     Lock("lock"),
     EnumLong("long"),
     EnumMap("map"),
+    MarshalJSON("MarshalJSON"),
     MapEntry("MapEntry"),
     MetadataPropertyHandling("metadata_property_handling"),
     Module("module"),
@@ -340,6 +342,7 @@ enum class EnumEnum(val value: String) {
     ToJSON("to_json"),
     TopLevel("top_level"),
     ToString("toString"),
+    ToDict("to_dict"),
     Transient("transient"),
     True("True"),
     EnumTrue("true"),
@@ -356,6 +359,7 @@ enum class EnumEnum(val value: String) {
     Unchecked("unchecked"),
     Undefined("undefined"),
     Union("union"),
+    UnmarshalJSON("UnmarshalJSON"),
     UseSerializers("UseSerializers"),
     Unowned("unowned"),
     Unsafe("unsafe"),
@@ -504,6 +508,7 @@ enum class EnumEnum(val value: String) {
             "FormatException"            -> FormatException
             "friend"                     -> Friend
             "from"                       -> From
+            "from_dict"                  -> FromDict
             "from_json"                  -> FromJSON
             "func"                       -> Func
             "function"                   -> Function
@@ -563,6 +568,7 @@ enum class EnumEnum(val value: String) {
             "lock"                       -> Lock
             "long"                       -> EnumLong
             "map"                        -> EnumMap
+            "MarshalJSON"                -> MarshalJSON
             "MapEntry"                   -> MapEntry
             "metadata_property_handling" -> MetadataPropertyHandling
             "module"                     -> Module
@@ -682,6 +688,7 @@ enum class EnumEnum(val value: String) {
             "to_json"                    -> ToJSON
             "top_level"                  -> TopLevel
             "toString"                   -> ToString
+            "to_dict"                    -> ToDict
             "transient"                  -> Transient
             "True"                       -> True
             "true"                       -> EnumTrue
@@ -698,6 +705,7 @@ enum class EnumEnum(val value: String) {
             "unchecked"                  -> Unchecked
             "undefined"                  -> Undefined
             "union"                      -> Union
+            "UnmarshalJSON"              -> UnmarshalJSON
             "UseSerializers"             -> UseSerializers
             "unowned"                    -> Unowned
             "unsafe"                     -> Unsafe
diff --git a/base/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt b/head/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
index 01acef3..7d73580 100644
--- a/base/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlinx/test/inputs/schema/keyword-enum.schema/default/TopLevel.kt
@@ -138,6 +138,7 @@ enum class EnumEnum(val value: String) {
     @SerialName("FormatException") FormatException("FormatException"),
     @SerialName("friend") Friend("friend"),
     @SerialName("from") From("from"),
+    @SerialName("from_dict") FromDict("from_dict"),
     @SerialName("from_json") FromJSON("from_json"),
     @SerialName("func") Func("func"),
     @SerialName("function") Function("function"),
@@ -197,6 +198,7 @@ enum class EnumEnum(val value: String) {
     @SerialName("lock") Lock("lock"),
     @SerialName("long") EnumLong("long"),
     @SerialName("map") EnumMap("map"),
+    @SerialName("MarshalJSON") MarshalJSON("MarshalJSON"),
     @SerialName("MapEntry") MapEntry("MapEntry"),
     @SerialName("metadata_property_handling") MetadataPropertyHandling("metadata_property_handling"),
     @SerialName("module") Module("module"),
@@ -316,6 +318,7 @@ enum class EnumEnum(val value: String) {
     @SerialName("to_json") ToJSON("to_json"),
     @SerialName("top_level") TopLevel("top_level"),
     @SerialName("toString") ToString("toString"),
+    @SerialName("to_dict") ToDict("to_dict"),
     @SerialName("transient") Transient("transient"),
     @SerialName("True") True("True"),
     @SerialName("true") EnumTrue("true"),
@@ -332,6 +335,7 @@ enum class EnumEnum(val value: String) {
     @SerialName("unchecked") Unchecked("unchecked"),
     @SerialName("undefined") Undefined("undefined"),
     @SerialName("union") Union("union"),
+    @SerialName("UnmarshalJSON") UnmarshalJSON("UnmarshalJSON"),
     @SerialName("UseSerializers") EnumUseSerializers("UseSerializers"),
     @SerialName("unowned") Unowned("unowned"),
     @SerialName("unsafe") Unsafe("unsafe"),
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
index a54a0b4..bf9a6b7 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
+++ b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.h
@@ -136,6 +136,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)formatException;
 + (QTEnum *)friend;
 + (QTEnum *)from;
++ (QTEnum *)fromDict;
 + (QTEnum *)fromJSON;
 + (QTEnum *)func;
 + (QTEnum *)function;
@@ -195,6 +196,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)lock;
 + (QTEnum *)enumLong;
 + (QTEnum *)map;
++ (QTEnum *)marshalJSON;
 + (QTEnum *)mapEntry;
 + (QTEnum *)metadataPropertyHandling;
 + (QTEnum *)module;
@@ -314,6 +316,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)toJSON;
 + (QTEnum *)topLevel;
 + (QTEnum *)toString;
++ (QTEnum *)toDict;
 + (QTEnum *)transient;
 + (QTEnum *)enumTrue;
 + (QTEnum *)true1;
@@ -330,6 +333,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)unchecked;
 + (QTEnum *)undefined;
 + (QTEnum *)enumUnion;
++ (QTEnum *)unmarshalJSON;
 + (QTEnum *)useSerializers;
 + (QTEnum *)unowned;
 + (QTEnum *)unsafe;
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
index dbb558e..0c4438b 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
+++ b/head/schema-objective-c/test/inputs/schema/keyword-enum.schema/default/QTTopLevel.m
@@ -139,6 +139,7 @@ NS_ASSUME_NONNULL_BEGIN
         @"FormatException": [[QTEnum alloc] initWithValue:@"FormatException"],
         @"friend": [[QTEnum alloc] initWithValue:@"friend"],
         @"from": [[QTEnum alloc] initWithValue:@"from"],
+        @"from_dict": [[QTEnum alloc] initWithValue:@"from_dict"],
         @"from_json": [[QTEnum alloc] initWithValue:@"from_json"],
         @"func": [[QTEnum alloc] initWithValue:@"func"],
         @"function": [[QTEnum alloc] initWithValue:@"function"],
@@ -198,6 +199,7 @@ NS_ASSUME_NONNULL_BEGIN
         @"lock": [[QTEnum alloc] initWithValue:@"lock"],
         @"long": [[QTEnum alloc] initWithValue:@"long"],
         @"map": [[QTEnum alloc] initWithValue:@"map"],
+        @"MarshalJSON": [[QTEnum alloc] initWithValue:@"MarshalJSON"],
         @"MapEntry": [[QTEnum alloc] initWithValue:@"MapEntry"],
         @"metadata_property_handling": [[QTEnum alloc] initWithValue:@"metadata_property_handling"],
         @"module": [[QTEnum alloc] initWithValue:@"module"],
@@ -317,6 +319,7 @@ NS_ASSUME_NONNULL_BEGIN
         @"to_json": [[QTEnum alloc] initWithValue:@"to_json"],
         @"top_level": [[QTEnum alloc] initWithValue:@"top_level"],
         @"toString": [[QTEnum alloc] initWithValue:@"toString"],
+        @"to_dict": [[QTEnum alloc] initWithValue:@"to_dict"],
         @"transient": [[QTEnum alloc] initWithValue:@"transient"],
         @"True": [[QTEnum alloc] initWithValue:@"True"],
         @"true": [[QTEnum alloc] initWithValue:@"true"],
@@ -333,6 +336,7 @@ NS_ASSUME_NONNULL_BEGIN
         @"unchecked": [[QTEnum alloc] initWithValue:@"unchecked"],
         @"undefined": [[QTEnum alloc] initWithValue:@"undefined"],
         @"union": [[QTEnum alloc] initWithValue:@"union"],
+        @"UnmarshalJSON": [[QTEnum alloc] initWithValue:@"UnmarshalJSON"],
         @"UseSerializers": [[QTEnum alloc] initWithValue:@"UseSerializers"],
         @"unowned": [[QTEnum alloc] initWithValue:@"unowned"],
         @"unsafe": [[QTEnum alloc] initWithValue:@"unsafe"],
@@ -481,6 +485,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)formatException { return QTEnum.values[@"FormatException"]; }
 + (QTEnum *)friend { return QTEnum.values[@"friend"]; }
 + (QTEnum *)from { return QTEnum.values[@"from"]; }
++ (QTEnum *)fromDict { return QTEnum.values[@"from_dict"]; }
 + (QTEnum *)fromJSON { return QTEnum.values[@"from_json"]; }
 + (QTEnum *)func { return QTEnum.values[@"func"]; }
 + (QTEnum *)function { return QTEnum.values[@"function"]; }
@@ -540,6 +545,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)lock { return QTEnum.values[@"lock"]; }
 + (QTEnum *)enumLong { return QTEnum.values[@"long"]; }
 + (QTEnum *)map { return QTEnum.values[@"map"]; }
++ (QTEnum *)marshalJSON { return QTEnum.values[@"MarshalJSON"]; }
 + (QTEnum *)mapEntry { return QTEnum.values[@"MapEntry"]; }
 + (QTEnum *)metadataPropertyHandling { return QTEnum.values[@"metadata_property_handling"]; }
 + (QTEnum *)module { return QTEnum.values[@"module"]; }
@@ -659,6 +665,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)toJSON { return QTEnum.values[@"to_json"]; }
 + (QTEnum *)topLevel { return QTEnum.values[@"top_level"]; }
 + (QTEnum *)toString { return QTEnum.values[@"toString"]; }
++ (QTEnum *)toDict { return QTEnum.values[@"to_dict"]; }
 + (QTEnum *)transient { return QTEnum.values[@"transient"]; }
 + (QTEnum *)enumTrue { return QTEnum.values[@"True"]; }
 + (QTEnum *)true1 { return QTEnum.values[@"true"]; }
@@ -675,6 +682,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (QTEnum *)unchecked { return QTEnum.values[@"unchecked"]; }
 + (QTEnum *)undefined { return QTEnum.values[@"undefined"]; }
 + (QTEnum *)enumUnion { return QTEnum.values[@"union"]; }
++ (QTEnum *)unmarshalJSON { return QTEnum.values[@"UnmarshalJSON"]; }
 + (QTEnum *)useSerializers { return QTEnum.values[@"UseSerializers"]; }
 + (QTEnum *)unowned { return QTEnum.values[@"unowned"]; }
 + (QTEnum *)unsafe { return QTEnum.values[@"unsafe"]; }
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
index 4e8287c..6e4aa2b 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
+++ b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.h
@@ -103,6 +103,7 @@
 @class QTFormatException;
 @class QTFriend;
 @class QTFrom;
+@class QTFromDict;
 @class QTFromJSON;
 @class QTFunc;
 @class QTFunction;
@@ -158,6 +159,7 @@
 @class QTLock;
 @class QTMap;
 @class QTMapEntry;
+@class QTMarshalJSON;
 @class QTMetadataPropertyHandling;
 @class QTModule;
 @class QTMutable;
@@ -312,6 +314,7 @@
 @class QTTimeOnly;
 @class QTTimeOnlyConverter;
 @class QTTimeZone;
+@class QTToDict;
 @class QTToJSON;
 @class QTToString;
 @class QTTopLevelClass;
@@ -325,6 +328,7 @@
 @class QTUlong;
 @class QTUnchecked;
 @class QTUndefined;
+@class QTUnmarshalJSON;
 @class QTUnowned;
 @class QTUnsafe;
 @class QTUseSerializers;
@@ -479,6 +483,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id formatException;
 @property (nonatomic, nullable, copy)   id friend;
 @property (nonatomic, nullable, copy)   id from;
+@property (nonatomic, nullable, copy)   id fromDict;
 @property (nonatomic, nullable, copy)   id fromJSON;
 @property (nonatomic, nullable, copy)   id func;
 @property (nonatomic, nullable, copy)   id function;
@@ -540,6 +545,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id qtTopLevelLong;
 @property (nonatomic, nullable, copy)   id map;
 @property (nonatomic, nullable, copy)   id mapEntry;
+@property (nonatomic, nullable, copy)   id marshalJSON;
 @property (nonatomic, nullable, copy)   id metadataPropertyHandling;
 @property (nonatomic, nullable, copy)   id module;
 @property (nonatomic, nullable, copy)   id mutable;
@@ -654,6 +660,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id timeOnly;
 @property (nonatomic, nullable, copy)   id timeOnlyConverter;
 @property (nonatomic, nullable, copy)   id timeZone;
+@property (nonatomic, nullable, copy)   id toDict;
 @property (nonatomic, nullable, copy)   id toJSON;
 @property (nonatomic, nullable, copy)   id topLevel;
 @property (nonatomic, nullable, copy)   id toString;
@@ -673,6 +680,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, nullable, copy)   id unchecked;
 @property (nonatomic, nullable, copy)   id undefined;
 @property (nonatomic, nullable, copy)   id qtTopLevelUnion;
+@property (nonatomic, nullable, copy)   id unmarshalJSON;
 @property (nonatomic, nullable, copy)   id unowned;
 @property (nonatomic, nullable, copy)   id unsafe;
 @property (nonatomic, nullable, copy)   id qtTopLevelUnsigned;
@@ -994,6 +1002,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTFrom : NSObject
 @end
 
+@interface QTFromDict : NSObject
+@end
+
 @interface QTFromJSON : NSObject
 @end
 
@@ -1159,6 +1170,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTMapEntry : NSObject
 @end
 
+@interface QTMarshalJSON : NSObject
+@end
+
 @interface QTMetadataPropertyHandling : NSObject
 @end
 
@@ -1621,6 +1635,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTTimeZone : NSObject
 @end
 
+@interface QTToDict : NSObject
+@end
+
 @interface QTToJSON : NSObject
 @end
 
@@ -1660,6 +1677,9 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @interface QTUndefined : NSObject
 @end
 
+@interface QTUnmarshalJSON : NSObject
+@end
+
 @interface QTUnowned : NSObject
 @end
 
diff --git a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
index 2186833..7aac858 100644
--- a/base/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
+++ b/head/schema-objective-c/test/inputs/schema/keyword-unions.schema/default/QTTopLevel.m
@@ -498,6 +498,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTFromDict (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTFromJSON (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -773,6 +778,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTMarshalJSON (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTMetadataPropertyHandling (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1543,6 +1553,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTToDict (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTToJSON (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1608,6 +1623,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTUnmarshalJSON (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTUnowned (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -1866,6 +1886,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"FormatException": @"formatException",
         @"friend": @"friend",
         @"from": @"from",
+        @"from_dict": @"fromDict",
         @"from_json": @"fromJSON",
         @"func": @"func",
         @"function": @"function",
@@ -1927,6 +1948,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"long": @"qtTopLevelLong",
         @"map": @"map",
         @"MapEntry": @"mapEntry",
+        @"MarshalJSON": @"marshalJSON",
         @"metadata_property_handling": @"metadataPropertyHandling",
         @"module": @"module",
         @"mutable": @"mutable",
@@ -2041,6 +2063,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"TimeOnly": @"timeOnly",
         @"TimeOnlyConverter": @"timeOnlyConverter",
         @"TimeZone": @"timeZone",
+        @"to_dict": @"toDict",
         @"to_json": @"toJSON",
         @"top_level": @"topLevel",
         @"toString": @"toString",
@@ -2060,6 +2083,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"unchecked": @"unchecked",
         @"undefined": @"undefined",
         @"union": @"qtTopLevelUnion",
+        @"UnmarshalJSON": @"unmarshalJSON",
         @"unowned": @"unowned",
         @"unsafe": @"unsafe",
         @"unsigned": @"qtTopLevelUnsigned",
@@ -5930,6 +5954,45 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTFromDict
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTFromDict alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTFromDict.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTFromDict.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTFromDict.properties.allValues];
+}
+@end
+
 @implementation QTFromJSON
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -8075,6 +8138,45 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTMarshalJSON
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTMarshalJSON alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTMarshalJSON.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTMarshalJSON.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTMarshalJSON.properties.allValues];
+}
+@end
+
 @implementation QTMetadataPropertyHandling
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -14081,6 +14183,45 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTToDict
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTToDict alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTToDict.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTToDict.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTToDict.properties.allValues];
+}
+@end
+
 @implementation QTToJSON
 + (NSDictionary<NSString *, NSString *> *)properties
 {
@@ -14588,6 +14729,45 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTUnmarshalJSON
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTUnmarshalJSON alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTUnmarshalJSON.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTUnmarshalJSON.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTUnmarshalJSON.properties.allValues];
+}
+@end
+
 @implementation QTUnowned
 + (NSDictionary<NSString *, NSString *> *)properties
 {
diff --git a/base/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
index fd294c1..aa648a7 100644
--- a/base/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/keyword-enum.schema/default/TopLevel.php
@@ -234,6 +234,7 @@ class EnumEnum {
     public static EnumEnum $FORMAT_EXCEPTION;
     public static EnumEnum $FRIEND;
     public static EnumEnum $FROM;
+    public static EnumEnum $FROM_DICT;
     public static EnumEnum $FROM_JSON;
     public static EnumEnum $FUNC;
     public static EnumEnum $FUNCTION;
@@ -293,6 +294,7 @@ class EnumEnum {
     public static EnumEnum $LOCK;
     public static EnumEnum $LONG;
     public static EnumEnum $MAP;
+    public static EnumEnum $MARSHAL_JSON;
     public static EnumEnum $MAP_ENTRY;
     public static EnumEnum $METADATA_PROPERTY_HANDLING;
     public static EnumEnum $MODULE;
@@ -412,6 +414,7 @@ class EnumEnum {
     public static EnumEnum $TO_JSON;
     public static EnumEnum $TOP_LEVEL;
     public static EnumEnum $TO_STRING;
+    public static EnumEnum $TO_DICT;
     public static EnumEnum $TRANSIENT;
     public static EnumEnum $TRUE;
     public static EnumEnum $ENUM_TRUE;
@@ -428,6 +431,7 @@ class EnumEnum {
     public static EnumEnum $UNCHECKED;
     public static EnumEnum $UNDEFINED;
     public static EnumEnum $UNION;
+    public static EnumEnum $UNMARSHAL_JSON;
     public static EnumEnum $USE_SERIALIZERS;
     public static EnumEnum $UNOWNED;
     public static EnumEnum $UNSAFE;
@@ -574,6 +578,7 @@ class EnumEnum {
         EnumEnum::$FORMAT_EXCEPTION = new EnumEnum('FormatException');
         EnumEnum::$FRIEND = new EnumEnum('friend');
         EnumEnum::$FROM = new EnumEnum('from');
+        EnumEnum::$FROM_DICT = new EnumEnum('from_dict');
         EnumEnum::$FROM_JSON = new EnumEnum('from_json');
         EnumEnum::$FUNC = new EnumEnum('func');
         EnumEnum::$FUNCTION = new EnumEnum('function');
@@ -633,6 +638,7 @@ class EnumEnum {
         EnumEnum::$LOCK = new EnumEnum('lock');
         EnumEnum::$LONG = new EnumEnum('long');
         EnumEnum::$MAP = new EnumEnum('map');
+        EnumEnum::$MARSHAL_JSON = new EnumEnum('MarshalJSON');
         EnumEnum::$MAP_ENTRY = new EnumEnum('MapEntry');
         EnumEnum::$METADATA_PROPERTY_HANDLING = new EnumEnum('metadata_property_handling');
         EnumEnum::$MODULE = new EnumEnum('module');
@@ -752,6 +758,7 @@ class EnumEnum {
         EnumEnum::$TO_JSON = new EnumEnum('to_json');
         EnumEnum::$TOP_LEVEL = new EnumEnum('top_level');
         EnumEnum::$TO_STRING = new EnumEnum('toString');
+        EnumEnum::$TO_DICT = new EnumEnum('to_dict');
         EnumEnum::$TRANSIENT = new EnumEnum('transient');
         EnumEnum::$TRUE = new EnumEnum('True');
         EnumEnum::$ENUM_TRUE = new EnumEnum('true');
@@ -768,6 +775,7 @@ class EnumEnum {
         EnumEnum::$UNCHECKED = new EnumEnum('unchecked');
         EnumEnum::$UNDEFINED = new EnumEnum('undefined');
         EnumEnum::$UNION = new EnumEnum('union');
+        EnumEnum::$UNMARSHAL_JSON = new EnumEnum('UnmarshalJSON');
         EnumEnum::$USE_SERIALIZERS = new EnumEnum('UseSerializers');
         EnumEnum::$UNOWNED = new EnumEnum('unowned');
         EnumEnum::$UNSAFE = new EnumEnum('unsafe');
@@ -926,6 +934,7 @@ class EnumEnum {
             case EnumEnum::$FORMAT_EXCEPTION->enum: return 'FormatException';
             case EnumEnum::$FRIEND->enum: return 'friend';
             case EnumEnum::$FROM->enum: return 'from';
+            case EnumEnum::$FROM_DICT->enum: return 'from_dict';
             case EnumEnum::$FROM_JSON->enum: return 'from_json';
             case EnumEnum::$FUNC->enum: return 'func';
             case EnumEnum::$FUNCTION->enum: return 'function';
@@ -985,6 +994,7 @@ class EnumEnum {
             case EnumEnum::$LOCK->enum: return 'lock';
             case EnumEnum::$LONG->enum: return 'long';
             case EnumEnum::$MAP->enum: return 'map';
+            case EnumEnum::$MARSHAL_JSON->enum: return 'MarshalJSON';
             case EnumEnum::$MAP_ENTRY->enum: return 'MapEntry';
             case EnumEnum::$METADATA_PROPERTY_HANDLING->enum: return 'metadata_property_handling';
             case EnumEnum::$MODULE->enum: return 'module';
@@ -1104,6 +1114,7 @@ class EnumEnum {
             case EnumEnum::$TO_JSON->enum: return 'to_json';
             case EnumEnum::$TOP_LEVEL->enum: return 'top_level';
             case EnumEnum::$TO_STRING->enum: return 'toString';
+            case EnumEnum::$TO_DICT->enum: return 'to_dict';
             case EnumEnum::$TRANSIENT->enum: return 'transient';
             case EnumEnum::$TRUE->enum: return 'True';
             case EnumEnum::$ENUM_TRUE->enum: return 'true';
@@ -1120,6 +1131,7 @@ class EnumEnum {
             case EnumEnum::$UNCHECKED->enum: return 'unchecked';
             case EnumEnum::$UNDEFINED->enum: return 'undefined';
             case EnumEnum::$UNION->enum: return 'union';
+            case EnumEnum::$UNMARSHAL_JSON->enum: return 'UnmarshalJSON';
             case EnumEnum::$USE_SERIALIZERS->enum: return 'UseSerializers';
             case EnumEnum::$UNOWNED->enum: return 'unowned';
             case EnumEnum::$UNSAFE->enum: return 'unsafe';
@@ -1276,6 +1288,7 @@ class EnumEnum {
             case 'FormatException': return EnumEnum::$FORMAT_EXCEPTION;
             case 'friend': return EnumEnum::$FRIEND;
             case 'from': return EnumEnum::$FROM;
+            case 'from_dict': return EnumEnum::$FROM_DICT;
             case 'from_json': return EnumEnum::$FROM_JSON;
             case 'func': return EnumEnum::$FUNC;
             case 'function': return EnumEnum::$FUNCTION;
@@ -1335,6 +1348,7 @@ class EnumEnum {
             case 'lock': return EnumEnum::$LOCK;
             case 'long': return EnumEnum::$LONG;
             case 'map': return EnumEnum::$MAP;
+            case 'MarshalJSON': return EnumEnum::$MARSHAL_JSON;
             case 'MapEntry': return EnumEnum::$MAP_ENTRY;
             case 'metadata_property_handling': return EnumEnum::$METADATA_PROPERTY_HANDLING;
             case 'module': return EnumEnum::$MODULE;
@@ -1454,6 +1468,7 @@ class EnumEnum {
             case 'to_json': return EnumEnum::$TO_JSON;
             case 'top_level': return EnumEnum::$TOP_LEVEL;
             case 'toString': return EnumEnum::$TO_STRING;
+            case 'to_dict': return EnumEnum::$TO_DICT;
             case 'transient': return EnumEnum::$TRANSIENT;
             case 'True': return EnumEnum::$TRUE;
             case 'true': return EnumEnum::$ENUM_TRUE;
@@ -1470,6 +1485,7 @@ class EnumEnum {
             case 'unchecked': return EnumEnum::$UNCHECKED;
             case 'undefined': return EnumEnum::$UNDEFINED;
             case 'union': return EnumEnum::$UNION;
+            case 'UnmarshalJSON': return EnumEnum::$UNMARSHAL_JSON;
             case 'UseSerializers': return EnumEnum::$USE_SERIALIZERS;
             case 'unowned': return EnumEnum::$UNOWNED;
             case 'unsafe': return EnumEnum::$UNSAFE;
diff --git a/base/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
index e1c6aa8..779056b 100644
--- a/base/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/keyword-unions.schema/default/TopLevel.php
@@ -126,6 +126,7 @@ class TopLevel {
     private FormatException|float|null $formatException; // json:FormatException Optional
     private Friend|float|null $friend; // json:friend Optional
     private From|float|null $from; // json:from Optional
+    private FromDict|float|null $fromDict; // json:from_dict Optional
     private FromJSON|float|null $fromJSON; // json:from_json Optional
     private Func|float|null $func; // json:func Optional
     private FunctionClass|float|null $function; // json:function Optional
@@ -187,6 +188,7 @@ class TopLevel {
     private Long|float|null $long; // json:long Optional
     private Map|float|null $map; // json:map Optional
     private MapEntry|float|null $mapEntry; // json:MapEntry Optional
+    private MarshalJSON|float|null $marshalJSON; // json:MarshalJSON Optional
     private MetadataPropertyHandling|float|null $metadataPropertyHandling; // json:metadata_property_handling Optional
     private Module|float|null $module; // json:module Optional
     private Mutable|float|null $mutable; // json:mutable Optional
@@ -301,6 +303,7 @@ class TopLevel {
     private TimeOnly|float|null $timeOnly; // json:TimeOnly Optional
     private TimeOnlyConverter|float|null $timeOnlyConverter; // json:TimeOnlyConverter Optional
     private TimeZone|float|null $timeZone; // json:TimeZone Optional
+    private ToDict|float|null $toDict; // json:to_dict Optional
     private ToJSON|float|null $toJSON; // json:to_json Optional
     private TopLevelClass|float|null $topLevel; // json:top_level Optional
     private ToString|float|null $toString; // json:toString Optional
@@ -320,6 +323,7 @@ class TopLevel {
     private Unchecked|float|null $unchecked; // json:unchecked Optional
     private Undefined|float|null $undefined; // json:undefined Optional
     private UnionClass|float|null $union; // json:union Optional
+    private UnmarshalJSON|float|null $unmarshalJSON; // json:UnmarshalJSON Optional
     private Unowned|float|null $unowned; // json:unowned Optional
     private Unsafe|float|null $unsafe; // json:unsafe Optional
     private Unsigned|float|null $unsigned; // json:unsigned Optional
@@ -467,6 +471,7 @@ class TopLevel {
      * @param FormatException|float|null $formatException
      * @param Friend|float|null $friend
      * @param From|float|null $from
+     * @param FromDict|float|null $fromDict
      * @param FromJSON|float|null $fromJSON
      * @param Func|float|null $func
      * @param FunctionClass|float|null $function
@@ -528,6 +533,7 @@ class TopLevel {
      * @param Long|float|null $long
      * @param Map|float|null $map
      * @param MapEntry|float|null $mapEntry
+     * @param MarshalJSON|float|null $marshalJSON
      * @param MetadataPropertyHandling|float|null $metadataPropertyHandling
      * @param Module|float|null $module
      * @param Mutable|float|null $mutable
@@ -642,6 +648,7 @@ class TopLevel {
      * @param TimeOnly|float|null $timeOnly
      * @param TimeOnlyConverter|float|null $timeOnlyConverter
      * @param TimeZone|float|null $timeZone
+     * @param ToDict|float|null $toDict
      * @param ToJSON|float|null $toJSON
      * @param TopLevelClass|float|null $topLevel
      * @param ToString|float|null $toString
@@ -661,6 +668,7 @@ class TopLevel {
      * @param Unchecked|float|null $unchecked
      * @param Undefined|float|null $undefined
      * @param UnionClass|float|null $union
+     * @param UnmarshalJSON|float|null $unmarshalJSON
      * @param Unowned|float|null $unowned
      * @param Unsafe|float|null $unsafe
      * @param Unsigned|float|null $unsigned
@@ -685,7 +693,7 @@ class TopLevel {
      * @param Yes|float|null $yes
      * @param YieldClass|float|null $yield
      */
-    public function __construct(Union|float|null $empty, UnionBoolBool|float|null $topLevelBool, Complex|float|null $complex, Imaginery|float|null $imaginery, AbstractClass|float|null $abstract, Alignas|float|null $alignas, Alignof|float|null $alignof, AndClass|float|null $and, AndEq|float|null $andEq, AnyClass|float|null $topLevelAny, Any|float|null $any, ArrayClass|float|null $array, AsClass|float|null $as, ASM|float|null $asm, Assert|float|null $assert, Associatedtype|float|null $associatedtype, Associativity|float|null $associativity, Async|float|null $async, Atomic|float|null $atomic, AtomicCancel|float|null $atomicCancel, AtomicCommit|float|null $atomicCommit, AtomicNoexcept|float|null $atomicNoexcept, Auto|float|null $auto, Await|float|null $await, Base|float|null $base, Bitand|float|null $bitand, Bitor|float|null $bitor, BOOLClass|float|null $bool, UnionBoolBoolClass|float|null $purpleBool, Boolean|float|null $boolean, BreakClass|float|null $break, Bycopy|float|null $bycopy, Byref|float|null $byref, Byte|float|null $byte, Calendar|float|null $calendar, CaseClass|float|null $case, CatchClass|float|null $catch, Chan|float|null $chan, Char|float|null $char, Char16T|float|null $char16T, Char32T|float|null $char32T, Checked|float|null $checked, UnionClassClass|float|null $topLevelClass, ClassClass|float|null $class, CloneClass|float|null $clone, CoAwait|float|null $coAwait, CoReturn|float|null $coReturn, CoYield|float|null $coYield, Codable|float|null $codable, CodingKey|float|null $codingKey, CodingKeys|float|null $codingKeys, Compl|float|null $compl, Concept|float|null $concept, Console|float|null $console, ConstClass|float|null $const, ConstCast|float|null $constCast, Constexpr|float|null $constexpr, Constructor|float|null $constructor, ContinueClass|float|null $continue, Convenience|float|null $convenience, Convert|float|null $convert, ConverterClass|float|null $converter, CultureInfo|float|null $cultureInfo, Date|float|null $date, DateParseHandling|float|null $dateParseHandling, DateFormatter|float|null $dateFormatter, DateOnly|float|null $dateOnly, DateOnlyConverter|float|null $dateOnlyConverter, DateTimeClass|float|null $dateTime, DateTimeStyles|float|null $dateTimeStyles, Debugger|float|null $debugger, Decimal|float|null $decimal, DeclareClass|float|null $declare, Decltype|float|null $decltype, DecodeString|float|null $decodeString, Decoder|float|null $decoder, DecodingError|float|null $decodingError, Def|float|null $def, DefaultClass|float|null $default, Defer|float|null $defer, Deinit|float|null $deinit, Del|float|null $del, Delegate|float|null $delegate, Delete|float|null $delete, Dict|float|null $dict, Dictionary|float|null $dictionary, DidSet|float|null $didSet, DoClass|float|null $do, Double|float|null $double, ?float $dummy, Dynamic|float|null $dynamic, DynamicCast|float|null $dynamicCast, Elif|float|null $elif, ElseClass|float|null $else, EncodeQuickType|float|null $encodeQuickType, Encoder|float|null $encoder, EnumClass|float|null $enum, EnumValues|float|null $enumValues, EqualityContract|float|null $equalityContract, Equatable|float|null $equatable, Event|float|null $event, Except|float|null $except, ExceptionClass|float|null $exception, Explicit|float|null $explicit, Export|float|null $export, Exposing|float|null $exposing, ExtendsClass|float|null $extends, Extension|float|null $extension, Extern|float|null $extern, Fallthrough|float|null $fallthrough, UnionFalseFalse|float|null $topLevelFalse, FalseClass|float|null $false, Fileprivate|float|null $fileprivate, FinalClass|float|null $final, FinallyClass|float|null $finally, Fixed|float|null $fixed, FloatClass|float|null $float, ForClass|float|null $for, ForeachClass|float|null $foreach, FormatException|float|null $formatException, Friend|float|null $friend, From|float|null $from, FromJSON|float|null $fromJSON, Func|float|null $func, FunctionClass|float|null $function, Get|float|null $get, GlobalClass|float|null $global, Go|float|null $go, GotoClass|float|null $goto, Guard|float|null $guard, Hashable|float|null $hashable, HashCode|float|null $hashCode, Hasher|float|null $hasher, HasOwnProperty|float|null $hasOwnProperty, ID|float|null $id, IfClass|float|null $if, Imp|float|null $imp, ImplementsClass|float|null $implements, Implicit|float|null $implicit, Import|float|null $import, In|float|null $in, Indirect|float|null $indirect, Infix|float|null $infix, Init|float|null $init, Inline|float|null $inline, Inout|float|null $inout, InstanceofClass|float|null $instanceof, IntClass|float|null $int, InterfaceClass|float|null $interface, Internal|float|null $internal, Is|float|null $is, ISODateTimeOffsetConverter|float|null $isoDateTimeOffsetConverter, IterableClass|float|null $iterable, Jdec|float|null $jdec, Jenc|float|null $jenc, Jpipe|float|null $jpipe, JSON|float|null $json, JSONConverter|float|null $jsonConverter, JSONSerializer|float|null $jsonSerializer, JSONToken|float|null $jsonToken, JSONWriter|float|null $jsonWriter, JSONAny|float|null $jsonAny, JSONCodingKey|float|null $jsonCodingKey, JSONDecoder|float|null $jsonDecoder, JSONEncoder|float|null $jsonEncoder, JSONExceptionClass|float|null $jsonException, JSONGenerator|float|null $jsonGenerator, JSONNode|float|null $jsonNode, JSONNull|float|null $jsonNull, JSONParser|float|null $jsonParser, JSONReader|float|null $jsonReader, JSONTokenType|float|null $jsonTokenType, KSerializer|float|null $kSerializer, Lambda|float|null $lambda, Lazy|float|null $lazy, Left|float|null $left, Let|float|null $let, ListClass|float|null $list, LocaleClass|float|null $locale, Lock|float|null $lock, Long|float|null $long, Map|float|null $map, MapEntry|float|null $mapEntry, MetadataPropertyHandling|float|null $metadataPropertyHandling, Module|float|null $module, Mutable|float|null $mutable, Mutating|float|null $mutating, NamespaceClass|float|null $namespace, Native|float|null $native, NewClass|float|null $new, Newtonsoft|float|null $newtonsoft, Nil|float|null $nil, No|float|null $no, Noexcept|float|null $noexcept, Nonatomic|float|null $nonatomic, NoneClass|float|null $topLevelNone, None|float|null $none, Nonlocal|float|null $nonlocal, Nonmutating|float|null $nonmutating, NoSuchMethod|float|null $noSuchMethod, Not|float|null $not, NotEq|float|null $notEq, NSError|float|null $nsError, NSObject|float|null $nsObject, NSString|float|null $nsString, NULLClass|float|null $null, UnionNullNull|float|null $topLevelNull, Nullptr|float|null $nullptr, Number|float|null $number, ObjectClass|float|null $object, ObjectMapper|float|null $objectMapper, Of|float|null $of, Oneway|float|null $oneway, Open|float|null $open, Operator|float|null $operator, Optional|float|null $optional, OrClass|float|null $or, OrEq|float|null $orEq, Out|float|null $out, OverrideClass|float|null $override, Package|float|null $package, Params|float|null $params, Pass|float|null $pass, Port|float|null $port, Postfix|float|null $postfix, Precedence|float|null $precedence, Prefix|float|null $prefix, PrimitiveKind|float|null $primitiveKind, PrintClass|float|null $print, Printf|float|null $printf, PrintMembers|float|null $printMembers, PrivateClass|float|null $private, ProtectedClass|float|null $protected, Protocol|float|null $protocol, ProtocolClass|float|null $topLevelProtocol, PublicClass|float|null $public, Quicktype|float|null $quicktype, Raise|float|null $raise, Range|float|null $range, ReadonlyClass|float|null $readonly, Ref|float|null $ref, RegExp|float|null $regExp, Register|float|null $register, ReinterpretCast|float|null $reinterpretCast, Repeat|float|null $repeat, RequireClass|float|null $require, Required|float|null $required, Requires|float|null $requires, Restrict|float|null $restrict, Retain|float|null $retain, Rethrows|float|null $rethrows, ReturnClass|float|null $return, Right|float|null $right, RuntimeType|float|null $runtimeType, S|float|null $s, Sbyte|float|null $sbyte, Sealed|float|null $sealed, Sel|float|null $sel, Select|float|null $select, SelfClass|float|null $self, UnionSelfSelf|float|null $topLevelSelf, Sendable|float|null $sendable, SerialDescriptor|float|null $serialDescriptor, SerializableClass|float|null $serializable, Serialize|float|null $serialize, SerializerProvider|float|null $serializerProvider, SerialName|float|null $serialName, Set|float|null $set, Short|float|null $short, Signed|float|null $signed, SimpleModule|float|null $simpleModule, Sizeof|float|null $sizeof, Stackalloc|float|null $stackalloc, Standards|float|null $standards, StaticClass|float|null $static, StaticAssert|float|null $staticAssert, StaticCast|float|null $staticCast, StdDeserializer|float|null $stdDeserializer, StdSerializer|float|null $stdSerializer, Strictfp|float|null $strictfp, StringClass|float|null $string, Struct|float|null $struct, Subscript|float|null $subscript, Super|float|null $super, SwitchClass|float|null $switch, Symbol|float|null $symbol, Synchronized|float|null $synchronized, System|float|null $system, Template|float|null $template, Then|float|null $then, This|float|null $topLevelThis, ThreadLocal|float|null $threadLocal, ThrowClass|float|null $throw, Throws|float|null $throws, TimeOnly|float|null $timeOnly, TimeOnlyConverter|float|null $timeOnlyConverter, TimeZone|float|null $timeZone, ToJSON|float|null $toJSON, TopLevelClass|float|null $topLevel, ToString|float|null $toString, Transient|float|null $transient, TrueClass|float|null $true, UnionTrueTrue|float|null $topLevelTrue, TryClass|float|null $try, Type|float|null $type, TypeClass|float|null $topLevelType, Typealias|float|null $typealias, Typedef|float|null $typedef, Typeid|float|null $typeid, Typename|float|null $typename, Typeof|float|null $typeof, Uint|float|null $uint, Ulong|float|null $ulong, Unchecked|float|null $unchecked, Undefined|float|null $undefined, UnionClass|float|null $union, Unowned|float|null $unowned, Unsafe|float|null $unsafe, Unsigned|float|null $unsigned, UseSerializers|float|null $useSerializers, Ushort|float|null $ushort, Using|float|null $using, Utf8JSONReader|float|null $utf8JSONReader, Utf8JSONWriter|float|null $utf8JSONWriter, UUID|float|null $uuid, VarClass|float|null $var, Virtual|float|null $virtual, VoidClass|float|null $void, Volatile|float|null $volatile, WcharT|float|null $wcharT, Weak|float|null $weak, Where|float|null $where, WhileClass|float|null $while, WillSet|float|null $willSet, With|float|null $with, XorClass|float|null $xor, XorEq|float|null $xorEq, Yes|float|null $yes, YieldClass|float|null $yield) {
+    public function __construct(Union|float|null $empty, UnionBoolBool|float|null $topLevelBool, Complex|float|null $complex, Imaginery|float|null $imaginery, AbstractClass|float|null $abstract, Alignas|float|null $alignas, Alignof|float|null $alignof, AndClass|float|null $and, AndEq|float|null $andEq, AnyClass|float|null $topLevelAny, Any|float|null $any, ArrayClass|float|null $array, AsClass|float|null $as, ASM|float|null $asm, Assert|float|null $assert, Associatedtype|float|null $associatedtype, Associativity|float|null $associativity, Async|float|null $async, Atomic|float|null $atomic, AtomicCancel|float|null $atomicCancel, AtomicCommit|float|null $atomicCommit, AtomicNoexcept|float|null $atomicNoexcept, Auto|float|null $auto, Await|float|null $await, Base|float|null $base, Bitand|float|null $bitand, Bitor|float|null $bitor, BOOLClass|float|null $bool, UnionBoolBoolClass|float|null $purpleBool, Boolean|float|null $boolean, BreakClass|float|null $break, Bycopy|float|null $bycopy, Byref|float|null $byref, Byte|float|null $byte, Calendar|float|null $calendar, CaseClass|float|null $case, CatchClass|float|null $catch, Chan|float|null $chan, Char|float|null $char, Char16T|float|null $char16T, Char32T|float|null $char32T, Checked|float|null $checked, UnionClassClass|float|null $topLevelClass, ClassClass|float|null $class, CloneClass|float|null $clone, CoAwait|float|null $coAwait, CoReturn|float|null $coReturn, CoYield|float|null $coYield, Codable|float|null $codable, CodingKey|float|null $codingKey, CodingKeys|float|null $codingKeys, Compl|float|null $compl, Concept|float|null $concept, Console|float|null $console, ConstClass|float|null $const, ConstCast|float|null $constCast, Constexpr|float|null $constexpr, Constructor|float|null $constructor, ContinueClass|float|null $continue, Convenience|float|null $convenience, Convert|float|null $convert, ConverterClass|float|null $converter, CultureInfo|float|null $cultureInfo, Date|float|null $date, DateParseHandling|float|null $dateParseHandling, DateFormatter|float|null $dateFormatter, DateOnly|float|null $dateOnly, DateOnlyConverter|float|null $dateOnlyConverter, DateTimeClass|float|null $dateTime, DateTimeStyles|float|null $dateTimeStyles, Debugger|float|null $debugger, Decimal|float|null $decimal, DeclareClass|float|null $declare, Decltype|float|null $decltype, DecodeString|float|null $decodeString, Decoder|float|null $decoder, DecodingError|float|null $decodingError, Def|float|null $def, DefaultClass|float|null $default, Defer|float|null $defer, Deinit|float|null $deinit, Del|float|null $del, Delegate|float|null $delegate, Delete|float|null $delete, Dict|float|null $dict, Dictionary|float|null $dictionary, DidSet|float|null $didSet, DoClass|float|null $do, Double|float|null $double, ?float $dummy, Dynamic|float|null $dynamic, DynamicCast|float|null $dynamicCast, Elif|float|null $elif, ElseClass|float|null $else, EncodeQuickType|float|null $encodeQuickType, Encoder|float|null $encoder, EnumClass|float|null $enum, EnumValues|float|null $enumValues, EqualityContract|float|null $equalityContract, Equatable|float|null $equatable, Event|float|null $event, Except|float|null $except, ExceptionClass|float|null $exception, Explicit|float|null $explicit, Export|float|null $export, Exposing|float|null $exposing, ExtendsClass|float|null $extends, Extension|float|null $extension, Extern|float|null $extern, Fallthrough|float|null $fallthrough, UnionFalseFalse|float|null $topLevelFalse, FalseClass|float|null $false, Fileprivate|float|null $fileprivate, FinalClass|float|null $final, FinallyClass|float|null $finally, Fixed|float|null $fixed, FloatClass|float|null $float, ForClass|float|null $for, ForeachClass|float|null $foreach, FormatException|float|null $formatException, Friend|float|null $friend, From|float|null $from, FromDict|float|null $fromDict, FromJSON|float|null $fromJSON, Func|float|null $func, FunctionClass|float|null $function, Get|float|null $get, GlobalClass|float|null $global, Go|float|null $go, GotoClass|float|null $goto, Guard|float|null $guard, Hashable|float|null $hashable, HashCode|float|null $hashCode, Hasher|float|null $hasher, HasOwnProperty|float|null $hasOwnProperty, ID|float|null $id, IfClass|float|null $if, Imp|float|null $imp, ImplementsClass|float|null $implements, Implicit|float|null $implicit, Import|float|null $import, In|float|null $in, Indirect|float|null $indirect, Infix|float|null $infix, Init|float|null $init, Inline|float|null $inline, Inout|float|null $inout, InstanceofClass|float|null $instanceof, IntClass|float|null $int, InterfaceClass|float|null $interface, Internal|float|null $internal, Is|float|null $is, ISODateTimeOffsetConverter|float|null $isoDateTimeOffsetConverter, IterableClass|float|null $iterable, Jdec|float|null $jdec, Jenc|float|null $jenc, Jpipe|float|null $jpipe, JSON|float|null $json, JSONConverter|float|null $jsonConverter, JSONSerializer|float|null $jsonSerializer, JSONToken|float|null $jsonToken, JSONWriter|float|null $jsonWriter, JSONAny|float|null $jsonAny, JSONCodingKey|float|null $jsonCodingKey, JSONDecoder|float|null $jsonDecoder, JSONEncoder|float|null $jsonEncoder, JSONExceptionClass|float|null $jsonException, JSONGenerator|float|null $jsonGenerator, JSONNode|float|null $jsonNode, JSONNull|float|null $jsonNull, JSONParser|float|null $jsonParser, JSONReader|float|null $jsonReader, JSONTokenType|float|null $jsonTokenType, KSerializer|float|null $kSerializer, Lambda|float|null $lambda, Lazy|float|null $lazy, Left|float|null $left, Let|float|null $let, ListClass|float|null $list, LocaleClass|float|null $locale, Lock|float|null $lock, Long|float|null $long, Map|float|null $map, MapEntry|float|null $mapEntry, MarshalJSON|float|null $marshalJSON, MetadataPropertyHandling|float|null $metadataPropertyHandling, Module|float|null $module, Mutable|float|null $mutable, Mutating|float|null $mutating, NamespaceClass|float|null $namespace, Native|float|null $native, NewClass|float|null $new, Newtonsoft|float|null $newtonsoft, Nil|float|null $nil, No|float|null $no, Noexcept|float|null $noexcept, Nonatomic|float|null $nonatomic, NoneClass|float|null $topLevelNone, None|float|null $none, Nonlocal|float|null $nonlocal, Nonmutating|float|null $nonmutating, NoSuchMethod|float|null $noSuchMethod, Not|float|null $not, NotEq|float|null $notEq, NSError|float|null $nsError, NSObject|float|null $nsObject, NSString|float|null $nsString, NULLClass|float|null $null, UnionNullNull|float|null $topLevelNull, Nullptr|float|null $nullptr, Number|float|null $number, ObjectClass|float|null $object, ObjectMapper|float|null $objectMapper, Of|float|null $of, Oneway|float|null $oneway, Open|float|null $open, Operator|float|null $operator, Optional|float|null $optional, OrClass|float|null $or, OrEq|float|null $orEq, Out|float|null $out, OverrideClass|float|null $override, Package|float|null $package, Params|float|null $params, Pass|float|null $pass, Port|float|null $port, Postfix|float|null $postfix, Precedence|float|null $precedence, Prefix|float|null $prefix, PrimitiveKind|float|null $primitiveKind, PrintClass|float|null $print, Printf|float|null $printf, PrintMembers|float|null $printMembers, PrivateClass|float|null $private, ProtectedClass|float|null $protected, Protocol|float|null $protocol, ProtocolClass|float|null $topLevelProtocol, PublicClass|float|null $public, Quicktype|float|null $quicktype, Raise|float|null $raise, Range|float|null $range, ReadonlyClass|float|null $readonly, Ref|float|null $ref, RegExp|float|null $regExp, Register|float|null $register, ReinterpretCast|float|null $reinterpretCast, Repeat|float|null $repeat, RequireClass|float|null $require, Required|float|null $required, Requires|float|null $requires, Restrict|float|null $restrict, Retain|float|null $retain, Rethrows|float|null $rethrows, ReturnClass|float|null $return, Right|float|null $right, RuntimeType|float|null $runtimeType, S|float|null $s, Sbyte|float|null $sbyte, Sealed|float|null $sealed, Sel|float|null $sel, Select|float|null $select, SelfClass|float|null $self, UnionSelfSelf|float|null $topLevelSelf, Sendable|float|null $sendable, SerialDescriptor|float|null $serialDescriptor, SerializableClass|float|null $serializable, Serialize|float|null $serialize, SerializerProvider|float|null $serializerProvider, SerialName|float|null $serialName, Set|float|null $set, Short|float|null $short, Signed|float|null $signed, SimpleModule|float|null $simpleModule, Sizeof|float|null $sizeof, Stackalloc|float|null $stackalloc, Standards|float|null $standards, StaticClass|float|null $static, StaticAssert|float|null $staticAssert, StaticCast|float|null $staticCast, StdDeserializer|float|null $stdDeserializer, StdSerializer|float|null $stdSerializer, Strictfp|float|null $strictfp, StringClass|float|null $string, Struct|float|null $struct, Subscript|float|null $subscript, Super|float|null $super, SwitchClass|float|null $switch, Symbol|float|null $symbol, Synchronized|float|null $synchronized, System|float|null $system, Template|float|null $template, Then|float|null $then, This|float|null $topLevelThis, ThreadLocal|float|null $threadLocal, ThrowClass|float|null $throw, Throws|float|null $throws, TimeOnly|float|null $timeOnly, TimeOnlyConverter|float|null $timeOnlyConverter, TimeZone|float|null $timeZone, ToDict|float|null $toDict, ToJSON|float|null $toJSON, TopLevelClass|float|null $topLevel, ToString|float|null $toString, Transient|float|null $transient, TrueClass|float|null $true, UnionTrueTrue|float|null $topLevelTrue, TryClass|float|null $try, Type|float|null $type, TypeClass|float|null $topLevelType, Typealias|float|null $typealias, Typedef|float|null $typedef, Typeid|float|null $typeid, Typename|float|null $typename, Typeof|float|null $typeof, Uint|float|null $uint, Ulong|float|null $ulong, Unchecked|float|null $unchecked, Undefined|float|null $undefined, UnionClass|float|null $union, UnmarshalJSON|float|null $unmarshalJSON, Unowned|float|null $unowned, Unsafe|float|null $unsafe, Unsigned|float|null $unsigned, UseSerializers|float|null $useSerializers, Ushort|float|null $ushort, Using|float|null $using, Utf8JSONReader|float|null $utf8JSONReader, Utf8JSONWriter|float|null $utf8JSONWriter, UUID|float|null $uuid, VarClass|float|null $var, Virtual|float|null $virtual, VoidClass|float|null $void, Volatile|float|null $volatile, WcharT|float|null $wcharT, Weak|float|null $weak, Where|float|null $where, WhileClass|float|null $while, WillSet|float|null $willSet, With|float|null $with, XorClass|float|null $xor, XorEq|float|null $xorEq, Yes|float|null $yes, YieldClass|float|null $yield) {
         $this->empty = $empty;
         $this->topLevelBool = $topLevelBool;
         $this->complex = $complex;
@@ -808,6 +816,7 @@ class TopLevel {
         $this->formatException = $formatException;
         $this->friend = $friend;
         $this->from = $from;
+        $this->fromDict = $fromDict;
         $this->fromJSON = $fromJSON;
         $this->func = $func;
         $this->function = $function;
@@ -869,6 +878,7 @@ class TopLevel {
         $this->long = $long;
         $this->map = $map;
         $this->mapEntry = $mapEntry;
+        $this->marshalJSON = $marshalJSON;
         $this->metadataPropertyHandling = $metadataPropertyHandling;
         $this->module = $module;
         $this->mutable = $mutable;
@@ -983,6 +993,7 @@ class TopLevel {
         $this->timeOnly = $timeOnly;
         $this->timeOnlyConverter = $timeOnlyConverter;
         $this->timeZone = $timeZone;
+        $this->toDict = $toDict;
         $this->toJSON = $toJSON;
         $this->topLevel = $topLevel;
         $this->toString = $toString;
@@ -1002,6 +1013,7 @@ class TopLevel {
         $this->unchecked = $unchecked;
         $this->undefined = $undefined;
         $this->union = $union;
+        $this->unmarshalJSON = $unmarshalJSON;
         $this->unowned = $unowned;
         $this->unsafe = $unsafe;
         $this->unsigned = $unsigned;
@@ -7416,7 +7428,7 @@ class TopLevel {
      * @throws Exception
      * @return Dict|float|null
      */
-    public static function fromDict(stdClass|float|null $value): Dict|float|null {
+    public static function purpleFromDict(stdClass|float|null $value): Dict|float|null {
         if (is_null($value)) {
             return $value; /*null*/
         } elseif (is_object($value)) {
@@ -7432,7 +7444,7 @@ class TopLevel {
      * @throws Exception
      * @return stdClass|float|null
      */
-    public function toDict(): stdClass|float|null {
+    public function purpleToDict(): stdClass|float|null {
         if (TopLevel::validateDict($this->dict))  {
             if (is_null($this->dict)) {
                 return $this->dict; /*null*/
@@ -10280,6 +10292,82 @@ class TopLevel {
         return From::sample(); /*152:from*/
     }
 
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return FromDict|float|null
+     */
+    public static function fromFromDict(stdClass|float|null $value): FromDict|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return FromDict::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toFromDict(): stdClass|float|null {
+        if (TopLevel::validateFromDict($this->fromDict))  {
+            if (is_null($this->fromDict)) {
+                return $this->fromDict; /*null*/
+            } elseif ($this->fromDict instanceof FromDict) {
+                return $this->fromDict->to(); /*class*/
+            } elseif (is_float($this->fromDict) || is_int($this->fromDict)) {
+                return $this->fromDict; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::fromDict');
+    }
+
+    /**
+     * @param FromDict|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateFromDict(FromDict|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::fromDict");
+            }
+        } elseif ($value instanceof FromDict) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::fromDict");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::fromDict");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return FromDict|float|null
+     */
+    public function getFromDict(): FromDict|float|null {
+        if (TopLevel::validateFromDict($this->fromDict))  {
+            return $this->fromDict;
+        }
+        throw new Exception('never get to getFromDict TopLevel::fromDict');
+    }
+
+    /**
+     * @return FromDict|float|null
+     */
+    public static function sampleFromDict(): FromDict|float|null {
+        return FromDict::sample(); /*153:fromDict*/
+    }
+
     /**
      * @param stdClass|float|null $value
      * @throws Exception
@@ -10353,7 +10441,7 @@ class TopLevel {
      * @return FromJSON|float|null
      */
     public static function sampleFromJSON(): FromJSON|float|null {
-        return FromJSON::sample(); /*153:fromJSON*/
+        return FromJSON::sample(); /*154:fromJSON*/
     }
 
     /**
@@ -10429,7 +10517,7 @@ class TopLevel {
      * @return Func|float|null
      */
     public static function sampleFunc(): Func|float|null {
-        return Func::sample(); /*154:func*/
+        return Func::sample(); /*155:func*/
     }
 
     /**
@@ -10505,7 +10593,7 @@ class TopLevel {
      * @return FunctionClass|float|null
      */
     public static function sampleFunction(): FunctionClass|float|null {
-        return FunctionClass::sample(); /*155:function*/
+        return FunctionClass::sample(); /*156:function*/
     }
 
     /**
@@ -10581,7 +10669,7 @@ class TopLevel {
      * @return Get|float|null
      */
     public static function sampleGet(): Get|float|null {
-        return Get::sample(); /*156:get*/
+        return Get::sample(); /*157:get*/
     }
 
     /**
@@ -10657,7 +10745,7 @@ class TopLevel {
      * @return GlobalClass|float|null
      */
     public static function sampleGlobal(): GlobalClass|float|null {
-        return GlobalClass::sample(); /*157:global*/
+        return GlobalClass::sample(); /*158:global*/
     }
 
     /**
@@ -10733,7 +10821,7 @@ class TopLevel {
      * @return Go|float|null
      */
     public static function sampleGo(): Go|float|null {
-        return Go::sample(); /*158:go*/
+        return Go::sample(); /*159:go*/
     }
 
     /**
@@ -10809,7 +10897,7 @@ class TopLevel {
      * @return GotoClass|float|null
      */
     public static function sampleGoto(): GotoClass|float|null {
-        return GotoClass::sample(); /*159:goto*/
+        return GotoClass::sample(); /*160:goto*/
     }
 
     /**
@@ -10885,7 +10973,7 @@ class TopLevel {
      * @return Guard|float|null
      */
     public static function sampleGuard(): Guard|float|null {
-        return Guard::sample(); /*160:guard*/
+        return Guard::sample(); /*161:guard*/
     }
 
     /**
@@ -10961,7 +11049,7 @@ class TopLevel {
      * @return Hashable|float|null
      */
     public static function sampleHashable(): Hashable|float|null {
-        return Hashable::sample(); /*161:hashable*/
+        return Hashable::sample(); /*162:hashable*/
     }
 
     /**
@@ -11037,7 +11125,7 @@ class TopLevel {
      * @return HashCode|float|null
      */
     public static function sampleHashCode(): HashCode|float|null {
-        return HashCode::sample(); /*162:hashCode*/
+        return HashCode::sample(); /*163:hashCode*/
     }
 
     /**
@@ -11113,7 +11201,7 @@ class TopLevel {
      * @return Hasher|float|null
      */
     public static function sampleHasher(): Hasher|float|null {
-        return Hasher::sample(); /*163:hasher*/
+        return Hasher::sample(); /*164:hasher*/
     }
 
     /**
@@ -11189,7 +11277,7 @@ class TopLevel {
      * @return HasOwnProperty|float|null
      */
     public static function sampleHasOwnProperty(): HasOwnProperty|float|null {
-        return HasOwnProperty::sample(); /*164:hasOwnProperty*/
+        return HasOwnProperty::sample(); /*165:hasOwnProperty*/
     }
 
     /**
@@ -11265,7 +11353,7 @@ class TopLevel {
      * @return ID|float|null
      */
     public static function sampleID(): ID|float|null {
-        return ID::sample(); /*165:id*/
+        return ID::sample(); /*166:id*/
     }
 
     /**
@@ -11341,7 +11429,7 @@ class TopLevel {
      * @return IfClass|float|null
      */
     public static function sampleIf(): IfClass|float|null {
-        return IfClass::sample(); /*166:if*/
+        return IfClass::sample(); /*167:if*/
     }
 
     /**
@@ -11417,7 +11505,7 @@ class TopLevel {
      * @return Imp|float|null
      */
     public static function sampleImp(): Imp|float|null {
-        return Imp::sample(); /*167:imp*/
+        return Imp::sample(); /*168:imp*/
     }
 
     /**
@@ -11493,7 +11581,7 @@ class TopLevel {
      * @return ImplementsClass|float|null
      */
     public static function sampleImplements(): ImplementsClass|float|null {
-        return ImplementsClass::sample(); /*168:implements*/
+        return ImplementsClass::sample(); /*169:implements*/
     }
 
     /**
@@ -11569,7 +11657,7 @@ class TopLevel {
      * @return Implicit|float|null
      */
     public static function sampleImplicit(): Implicit|float|null {
-        return Implicit::sample(); /*169:implicit*/
+        return Implicit::sample(); /*170:implicit*/
     }
 
     /**
@@ -11645,7 +11733,7 @@ class TopLevel {
      * @return Import|float|null
      */
     public static function sampleImport(): Import|float|null {
-        return Import::sample(); /*170:import*/
+        return Import::sample(); /*171:import*/
     }
 
     /**
@@ -11721,7 +11809,7 @@ class TopLevel {
      * @return In|float|null
      */
     public static function sampleIn(): In|float|null {
-        return In::sample(); /*171:in*/
+        return In::sample(); /*172:in*/
     }
 
     /**
@@ -11797,7 +11885,7 @@ class TopLevel {
      * @return Indirect|float|null
      */
     public static function sampleIndirect(): Indirect|float|null {
-        return Indirect::sample(); /*172:indirect*/
+        return Indirect::sample(); /*173:indirect*/
     }
 
     /**
@@ -11873,7 +11961,7 @@ class TopLevel {
      * @return Infix|float|null
      */
     public static function sampleInfix(): Infix|float|null {
-        return Infix::sample(); /*173:infix*/
+        return Infix::sample(); /*174:infix*/
     }
 
     /**
@@ -11949,7 +12037,7 @@ class TopLevel {
      * @return Init|float|null
      */
     public static function sampleInit(): Init|float|null {
-        return Init::sample(); /*174:init*/
+        return Init::sample(); /*175:init*/
     }
 
     /**
@@ -12025,7 +12113,7 @@ class TopLevel {
      * @return Inline|float|null
      */
     public static function sampleInline(): Inline|float|null {
-        return Inline::sample(); /*175:inline*/
+        return Inline::sample(); /*176:inline*/
     }
 
     /**
@@ -12101,7 +12189,7 @@ class TopLevel {
      * @return Inout|float|null
      */
     public static function sampleInout(): Inout|float|null {
-        return Inout::sample(); /*176:inout*/
+        return Inout::sample(); /*177:inout*/
     }
 
     /**
@@ -12177,7 +12265,7 @@ class TopLevel {
      * @return InstanceofClass|float|null
      */
     public static function sampleInstanceof(): InstanceofClass|float|null {
-        return InstanceofClass::sample(); /*177:instanceof*/
+        return InstanceofClass::sample(); /*178:instanceof*/
     }
 
     /**
@@ -12253,7 +12341,7 @@ class TopLevel {
      * @return IntClass|float|null
      */
     public static function sampleInt(): IntClass|float|null {
-        return IntClass::sample(); /*178:int*/
+        return IntClass::sample(); /*179:int*/
     }
 
     /**
@@ -12329,7 +12417,7 @@ class TopLevel {
      * @return InterfaceClass|float|null
      */
     public static function sampleInterface(): InterfaceClass|float|null {
-        return InterfaceClass::sample(); /*179:interface*/
+        return InterfaceClass::sample(); /*180:interface*/
     }
 
     /**
@@ -12405,7 +12493,7 @@ class TopLevel {
      * @return Internal|float|null
      */
     public static function sampleInternal(): Internal|float|null {
-        return Internal::sample(); /*180:internal*/
+        return Internal::sample(); /*181:internal*/
     }
 
     /**
@@ -12481,7 +12569,7 @@ class TopLevel {
      * @return Is|float|null
      */
     public static function sampleIs(): Is|float|null {
-        return Is::sample(); /*181:is*/
+        return Is::sample(); /*182:is*/
     }
 
     /**
@@ -12557,7 +12645,7 @@ class TopLevel {
      * @return ISODateTimeOffsetConverter|float|null
      */
     public static function sampleISODateTimeOffsetConverter(): ISODateTimeOffsetConverter|float|null {
-        return ISODateTimeOffsetConverter::sample(); /*182:isoDateTimeOffsetConverter*/
+        return ISODateTimeOffsetConverter::sample(); /*183:isoDateTimeOffsetConverter*/
     }
 
     /**
@@ -12633,7 +12721,7 @@ class TopLevel {
      * @return IterableClass|float|null
      */
     public static function sampleIterable(): IterableClass|float|null {
-        return IterableClass::sample(); /*183:iterable*/
+        return IterableClass::sample(); /*184:iterable*/
     }
 
     /**
@@ -12709,7 +12797,7 @@ class TopLevel {
      * @return Jdec|float|null
      */
     public static function sampleJdec(): Jdec|float|null {
-        return Jdec::sample(); /*184:jdec*/
+        return Jdec::sample(); /*185:jdec*/
     }
 
     /**
@@ -12785,7 +12873,7 @@ class TopLevel {
      * @return Jenc|float|null
      */
     public static function sampleJenc(): Jenc|float|null {
-        return Jenc::sample(); /*185:jenc*/
+        return Jenc::sample(); /*186:jenc*/
     }
 
     /**
@@ -12861,7 +12949,7 @@ class TopLevel {
      * @return Jpipe|float|null
      */
     public static function sampleJpipe(): Jpipe|float|null {
-        return Jpipe::sample(); /*186:jpipe*/
+        return Jpipe::sample(); /*187:jpipe*/
     }
 
     /**
@@ -12937,7 +13025,7 @@ class TopLevel {
      * @return JSON|float|null
      */
     public static function sampleJSON(): JSON|float|null {
-        return JSON::sample(); /*187:json*/
+        return JSON::sample(); /*188:json*/
     }
 
     /**
@@ -13013,7 +13101,7 @@ class TopLevel {
      * @return JSONConverter|float|null
      */
     public static function sampleJSONConverter(): JSONConverter|float|null {
-        return JSONConverter::sample(); /*188:jsonConverter*/
+        return JSONConverter::sample(); /*189:jsonConverter*/
     }
 
     /**
@@ -13089,7 +13177,7 @@ class TopLevel {
      * @return JSONSerializer|float|null
      */
     public static function sampleJSONSerializer(): JSONSerializer|float|null {
-        return JSONSerializer::sample(); /*189:jsonSerializer*/
+        return JSONSerializer::sample(); /*190:jsonSerializer*/
     }
 
     /**
@@ -13165,7 +13253,7 @@ class TopLevel {
      * @return JSONToken|float|null
      */
     public static function sampleJSONToken(): JSONToken|float|null {
-        return JSONToken::sample(); /*190:jsonToken*/
+        return JSONToken::sample(); /*191:jsonToken*/
     }
 
     /**
@@ -13241,7 +13329,7 @@ class TopLevel {
      * @return JSONWriter|float|null
      */
     public static function sampleJSONWriter(): JSONWriter|float|null {
-        return JSONWriter::sample(); /*191:jsonWriter*/
+        return JSONWriter::sample(); /*192:jsonWriter*/
     }
 
     /**
@@ -13317,7 +13405,7 @@ class TopLevel {
      * @return JSONAny|float|null
      */
     public static function sampleJSONAny(): JSONAny|float|null {
-        return JSONAny::sample(); /*192:jsonAny*/
+        return JSONAny::sample(); /*193:jsonAny*/
     }
 
     /**
@@ -13393,7 +13481,7 @@ class TopLevel {
      * @return JSONCodingKey|float|null
      */
     public static function sampleJSONCodingKey(): JSONCodingKey|float|null {
-        return JSONCodingKey::sample(); /*193:jsonCodingKey*/
+        return JSONCodingKey::sample(); /*194:jsonCodingKey*/
     }
 
     /**
@@ -13469,7 +13557,7 @@ class TopLevel {
      * @return JSONDecoder|float|null
      */
     public static function sampleJSONDecoder(): JSONDecoder|float|null {
-        return JSONDecoder::sample(); /*194:jsonDecoder*/
+        return JSONDecoder::sample(); /*195:jsonDecoder*/
     }
 
     /**
@@ -13545,7 +13633,7 @@ class TopLevel {
      * @return JSONEncoder|float|null
      */
     public static function sampleJSONEncoder(): JSONEncoder|float|null {
-        return JSONEncoder::sample(); /*195:jsonEncoder*/
+        return JSONEncoder::sample(); /*196:jsonEncoder*/
     }
 
     /**
@@ -13621,7 +13709,7 @@ class TopLevel {
      * @return JSONExceptionClass|float|null
      */
     public static function sampleJSONException(): JSONExceptionClass|float|null {
-        return JSONExceptionClass::sample(); /*196:jsonException*/
+        return JSONExceptionClass::sample(); /*197:jsonException*/
     }
 
     /**
@@ -13697,7 +13785,7 @@ class TopLevel {
      * @return JSONGenerator|float|null
      */
     public static function sampleJSONGenerator(): JSONGenerator|float|null {
-        return JSONGenerator::sample(); /*197:jsonGenerator*/
+        return JSONGenerator::sample(); /*198:jsonGenerator*/
     }
 
     /**
@@ -13773,7 +13861,7 @@ class TopLevel {
      * @return JSONNode|float|null
      */
     public static function sampleJSONNode(): JSONNode|float|null {
-        return JSONNode::sample(); /*198:jsonNode*/
+        return JSONNode::sample(); /*199:jsonNode*/
     }
 
     /**
@@ -13849,7 +13937,7 @@ class TopLevel {
      * @return JSONNull|float|null
      */
     public static function sampleJSONNull(): JSONNull|float|null {
-        return JSONNull::sample(); /*199:jsonNull*/
+        return JSONNull::sample(); /*200:jsonNull*/
     }
 
     /**
@@ -13925,7 +14013,7 @@ class TopLevel {
      * @return JSONParser|float|null
      */
     public static function sampleJSONParser(): JSONParser|float|null {
-        return JSONParser::sample(); /*200:jsonParser*/
+        return JSONParser::sample(); /*201:jsonParser*/
     }
 
     /**
@@ -14001,7 +14089,7 @@ class TopLevel {
      * @return JSONReader|float|null
      */
     public static function sampleJSONReader(): JSONReader|float|null {
-        return JSONReader::sample(); /*201:jsonReader*/
+        return JSONReader::sample(); /*202:jsonReader*/
     }
 
     /**
@@ -14077,7 +14165,7 @@ class TopLevel {
      * @return JSONTokenType|float|null
      */
     public static function sampleJSONTokenType(): JSONTokenType|float|null {
-        return JSONTokenType::sample(); /*202:jsonTokenType*/
+        return JSONTokenType::sample(); /*203:jsonTokenType*/
     }
 
     /**
@@ -14153,7 +14241,7 @@ class TopLevel {
      * @return KSerializer|float|null
      */
     public static function sampleKSerializer(): KSerializer|float|null {
-        return KSerializer::sample(); /*203:kSerializer*/
+        return KSerializer::sample(); /*204:kSerializer*/
     }
 
     /**
@@ -14229,7 +14317,7 @@ class TopLevel {
      * @return Lambda|float|null
      */
     public static function sampleLambda(): Lambda|float|null {
-        return Lambda::sample(); /*204:lambda*/
+        return Lambda::sample(); /*205:lambda*/
     }
 
     /**
@@ -14305,7 +14393,7 @@ class TopLevel {
      * @return Lazy|float|null
      */
     public static function sampleLazy(): Lazy|float|null {
-        return Lazy::sample(); /*205:lazy*/
+        return Lazy::sample(); /*206:lazy*/
     }
 
     /**
@@ -14381,7 +14469,7 @@ class TopLevel {
      * @return Left|float|null
      */
     public static function sampleLeft(): Left|float|null {
-        return Left::sample(); /*206:left*/
+        return Left::sample(); /*207:left*/
     }
 
     /**
@@ -14457,7 +14545,7 @@ class TopLevel {
      * @return Let|float|null
      */
     public static function sampleLet(): Let|float|null {
-        return Let::sample(); /*207:let*/
+        return Let::sample(); /*208:let*/
     }
 
     /**
@@ -14533,7 +14621,7 @@ class TopLevel {
      * @return ListClass|float|null
      */
     public static function sampleList(): ListClass|float|null {
-        return ListClass::sample(); /*208:list*/
+        return ListClass::sample(); /*209:list*/
     }
 
     /**
@@ -14609,7 +14697,7 @@ class TopLevel {
      * @return LocaleClass|float|null
      */
     public static function sampleLocale(): LocaleClass|float|null {
-        return LocaleClass::sample(); /*209:locale*/
+        return LocaleClass::sample(); /*210:locale*/
     }
 
     /**
@@ -14685,7 +14773,7 @@ class TopLevel {
      * @return Lock|float|null
      */
     public static function sampleLock(): Lock|float|null {
-        return Lock::sample(); /*210:lock*/
+        return Lock::sample(); /*211:lock*/
     }
 
     /**
@@ -14761,7 +14849,7 @@ class TopLevel {
      * @return Long|float|null
      */
     public static function sampleLong(): Long|float|null {
-        return Long::sample(); /*211:long*/
+        return Long::sample(); /*212:long*/
     }
 
     /**
@@ -14837,7 +14925,7 @@ class TopLevel {
      * @return Map|float|null
      */
     public static function sampleMap(): Map|float|null {
-        return Map::sample(); /*212:map*/
+        return Map::sample(); /*213:map*/
     }
 
     /**
@@ -14913,7 +15001,83 @@ class TopLevel {
      * @return MapEntry|float|null
      */
     public static function sampleMapEntry(): MapEntry|float|null {
-        return MapEntry::sample(); /*213:mapEntry*/
+        return MapEntry::sample(); /*214:mapEntry*/
+    }
+
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return MarshalJSON|float|null
+     */
+    public static function fromMarshalJSON(stdClass|float|null $value): MarshalJSON|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return MarshalJSON::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toMarshalJSON(): stdClass|float|null {
+        if (TopLevel::validateMarshalJSON($this->marshalJSON))  {
+            if (is_null($this->marshalJSON)) {
+                return $this->marshalJSON; /*null*/
+            } elseif ($this->marshalJSON instanceof MarshalJSON) {
+                return $this->marshalJSON->to(); /*class*/
+            } elseif (is_float($this->marshalJSON) || is_int($this->marshalJSON)) {
+                return $this->marshalJSON; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::marshalJSON');
+    }
+
+    /**
+     * @param MarshalJSON|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateMarshalJSON(MarshalJSON|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::marshalJSON");
+            }
+        } elseif ($value instanceof MarshalJSON) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::marshalJSON");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::marshalJSON");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return MarshalJSON|float|null
+     */
+    public function getMarshalJSON(): MarshalJSON|float|null {
+        if (TopLevel::validateMarshalJSON($this->marshalJSON))  {
+            return $this->marshalJSON;
+        }
+        throw new Exception('never get to getMarshalJSON TopLevel::marshalJSON');
+    }
+
+    /**
+     * @return MarshalJSON|float|null
+     */
+    public static function sampleMarshalJSON(): MarshalJSON|float|null {
+        return MarshalJSON::sample(); /*215:marshalJSON*/
     }
 
     /**
@@ -14989,7 +15153,7 @@ class TopLevel {
      * @return MetadataPropertyHandling|float|null
      */
     public static function sampleMetadataPropertyHandling(): MetadataPropertyHandling|float|null {
-        return MetadataPropertyHandling::sample(); /*214:metadataPropertyHandling*/
+        return MetadataPropertyHandling::sample(); /*216:metadataPropertyHandling*/
     }
 
     /**
@@ -15065,7 +15229,7 @@ class TopLevel {
      * @return Module|float|null
      */
     public static function sampleModule(): Module|float|null {
-        return Module::sample(); /*215:module*/
+        return Module::sample(); /*217:module*/
     }
 
     /**
@@ -15141,7 +15305,7 @@ class TopLevel {
      * @return Mutable|float|null
      */
     public static function sampleMutable(): Mutable|float|null {
-        return Mutable::sample(); /*216:mutable*/
+        return Mutable::sample(); /*218:mutable*/
     }
 
     /**
@@ -15217,7 +15381,7 @@ class TopLevel {
      * @return Mutating|float|null
      */
     public static function sampleMutating(): Mutating|float|null {
-        return Mutating::sample(); /*217:mutating*/
+        return Mutating::sample(); /*219:mutating*/
     }
 
     /**
@@ -15293,7 +15457,7 @@ class TopLevel {
      * @return NamespaceClass|float|null
      */
     public static function sampleNamespace(): NamespaceClass|float|null {
-        return NamespaceClass::sample(); /*218:namespace*/
+        return NamespaceClass::sample(); /*220:namespace*/
     }
 
     /**
@@ -15369,7 +15533,7 @@ class TopLevel {
      * @return Native|float|null
      */
     public static function sampleNative(): Native|float|null {
-        return Native::sample(); /*219:native*/
+        return Native::sample(); /*221:native*/
     }
 
     /**
@@ -15445,7 +15609,7 @@ class TopLevel {
      * @return NewClass|float|null
      */
     public static function sampleNew(): NewClass|float|null {
-        return NewClass::sample(); /*220:new*/
+        return NewClass::sample(); /*222:new*/
     }
 
     /**
@@ -15521,7 +15685,7 @@ class TopLevel {
      * @return Newtonsoft|float|null
      */
     public static function sampleNewtonsoft(): Newtonsoft|float|null {
-        return Newtonsoft::sample(); /*221:newtonsoft*/
+        return Newtonsoft::sample(); /*223:newtonsoft*/
     }
 
     /**
@@ -15597,7 +15761,7 @@ class TopLevel {
      * @return Nil|float|null
      */
     public static function sampleNil(): Nil|float|null {
-        return Nil::sample(); /*222:nil*/
+        return Nil::sample(); /*224:nil*/
     }
 
     /**
@@ -15673,7 +15837,7 @@ class TopLevel {
      * @return No|float|null
      */
     public static function sampleNo(): No|float|null {
-        return No::sample(); /*223:no*/
+        return No::sample(); /*225:no*/
     }
 
     /**
@@ -15749,7 +15913,7 @@ class TopLevel {
      * @return Noexcept|float|null
      */
     public static function sampleNoexcept(): Noexcept|float|null {
-        return Noexcept::sample(); /*224:noexcept*/
+        return Noexcept::sample(); /*226:noexcept*/
     }
 
     /**
@@ -15825,7 +15989,7 @@ class TopLevel {
      * @return Nonatomic|float|null
      */
     public static function sampleNonatomic(): Nonatomic|float|null {
-        return Nonatomic::sample(); /*225:nonatomic*/
+        return Nonatomic::sample(); /*227:nonatomic*/
     }
 
     /**
@@ -15901,7 +16065,7 @@ class TopLevel {
      * @return NoneClass|float|null
      */
     public static function sampleTopLevelNone(): NoneClass|float|null {
-        return NoneClass::sample(); /*226:topLevelNone*/
+        return NoneClass::sample(); /*228:topLevelNone*/
     }
 
     /**
@@ -15977,7 +16141,7 @@ class TopLevel {
      * @return None|float|null
      */
     public static function sampleNone(): None|float|null {
-        return None::sample(); /*227:none*/
+        return None::sample(); /*229:none*/
     }
 
     /**
@@ -16053,7 +16217,7 @@ class TopLevel {
      * @return Nonlocal|float|null
      */
     public static function sampleNonlocal(): Nonlocal|float|null {
-        return Nonlocal::sample(); /*228:nonlocal*/
+        return Nonlocal::sample(); /*230:nonlocal*/
     }
 
     /**
@@ -16129,7 +16293,7 @@ class TopLevel {
      * @return Nonmutating|float|null
      */
     public static function sampleNonmutating(): Nonmutating|float|null {
-        return Nonmutating::sample(); /*229:nonmutating*/
+        return Nonmutating::sample(); /*231:nonmutating*/
     }
 
     /**
@@ -16205,7 +16369,7 @@ class TopLevel {
      * @return NoSuchMethod|float|null
      */
     public static function sampleNoSuchMethod(): NoSuchMethod|float|null {
-        return NoSuchMethod::sample(); /*230:noSuchMethod*/
+        return NoSuchMethod::sample(); /*232:noSuchMethod*/
     }
 
     /**
@@ -16281,7 +16445,7 @@ class TopLevel {
      * @return Not|float|null
      */
     public static function sampleNot(): Not|float|null {
-        return Not::sample(); /*231:not*/
+        return Not::sample(); /*233:not*/
     }
 
     /**
@@ -16357,7 +16521,7 @@ class TopLevel {
      * @return NotEq|float|null
      */
     public static function sampleNotEq(): NotEq|float|null {
-        return NotEq::sample(); /*232:notEq*/
+        return NotEq::sample(); /*234:notEq*/
     }
 
     /**
@@ -16433,7 +16597,7 @@ class TopLevel {
      * @return NSError|float|null
      */
     public static function sampleNSError(): NSError|float|null {
-        return NSError::sample(); /*233:nsError*/
+        return NSError::sample(); /*235:nsError*/
     }
 
     /**
@@ -16509,7 +16673,7 @@ class TopLevel {
      * @return NSObject|float|null
      */
     public static function sampleNSObject(): NSObject|float|null {
-        return NSObject::sample(); /*234:nsObject*/
+        return NSObject::sample(); /*236:nsObject*/
     }
 
     /**
@@ -16585,7 +16749,7 @@ class TopLevel {
      * @return NSString|float|null
      */
     public static function sampleNSString(): NSString|float|null {
-        return NSString::sample(); /*235:nsString*/
+        return NSString::sample(); /*237:nsString*/
     }
 
     /**
@@ -16661,7 +16825,7 @@ class TopLevel {
      * @return NULLClass|float|null
      */
     public static function sampleNull(): NULLClass|float|null {
-        return NULLClass::sample(); /*236:null*/
+        return NULLClass::sample(); /*238:null*/
     }
 
     /**
@@ -16737,7 +16901,7 @@ class TopLevel {
      * @return UnionNullNull|float|null
      */
     public static function sampleTopLevelNull(): UnionNullNull|float|null {
-        return UnionNullNull::sample(); /*237:topLevelNull*/
+        return UnionNullNull::sample(); /*239:topLevelNull*/
     }
 
     /**
@@ -16813,7 +16977,7 @@ class TopLevel {
      * @return Nullptr|float|null
      */
     public static function sampleNullptr(): Nullptr|float|null {
-        return Nullptr::sample(); /*238:nullptr*/
+        return Nullptr::sample(); /*240:nullptr*/
     }
 
     /**
@@ -16889,7 +17053,7 @@ class TopLevel {
      * @return Number|float|null
      */
     public static function sampleNumber(): Number|float|null {
-        return Number::sample(); /*239:number*/
+        return Number::sample(); /*241:number*/
     }
 
     /**
@@ -16965,7 +17129,7 @@ class TopLevel {
      * @return ObjectClass|float|null
      */
     public static function sampleObject(): ObjectClass|float|null {
-        return ObjectClass::sample(); /*240:object*/
+        return ObjectClass::sample(); /*242:object*/
     }
 
     /**
@@ -17041,7 +17205,7 @@ class TopLevel {
      * @return ObjectMapper|float|null
      */
     public static function sampleObjectMapper(): ObjectMapper|float|null {
-        return ObjectMapper::sample(); /*241:objectMapper*/
+        return ObjectMapper::sample(); /*243:objectMapper*/
     }
 
     /**
@@ -17117,7 +17281,7 @@ class TopLevel {
      * @return Of|float|null
      */
     public static function sampleOf(): Of|float|null {
-        return Of::sample(); /*242:of*/
+        return Of::sample(); /*244:of*/
     }
 
     /**
@@ -17193,7 +17357,7 @@ class TopLevel {
      * @return Oneway|float|null
      */
     public static function sampleOneway(): Oneway|float|null {
-        return Oneway::sample(); /*243:oneway*/
+        return Oneway::sample(); /*245:oneway*/
     }
 
     /**
@@ -17269,7 +17433,7 @@ class TopLevel {
      * @return Open|float|null
      */
     public static function sampleOpen(): Open|float|null {
-        return Open::sample(); /*244:open*/
+        return Open::sample(); /*246:open*/
     }
 
     /**
@@ -17345,7 +17509,7 @@ class TopLevel {
      * @return Operator|float|null
      */
     public static function sampleOperator(): Operator|float|null {
-        return Operator::sample(); /*245:operator*/
+        return Operator::sample(); /*247:operator*/
     }
 
     /**
@@ -17421,7 +17585,7 @@ class TopLevel {
      * @return Optional|float|null
      */
     public static function sampleOptional(): Optional|float|null {
-        return Optional::sample(); /*246:optional*/
+        return Optional::sample(); /*248:optional*/
     }
 
     /**
@@ -17497,7 +17661,7 @@ class TopLevel {
      * @return OrClass|float|null
      */
     public static function sampleOr(): OrClass|float|null {
-        return OrClass::sample(); /*247:or*/
+        return OrClass::sample(); /*249:or*/
     }
 
     /**
@@ -17573,7 +17737,7 @@ class TopLevel {
      * @return OrEq|float|null
      */
     public static function sampleOrEq(): OrEq|float|null {
-        return OrEq::sample(); /*248:orEq*/
+        return OrEq::sample(); /*250:orEq*/
     }
 
     /**
@@ -17649,7 +17813,7 @@ class TopLevel {
      * @return Out|float|null
      */
     public static function sampleOut(): Out|float|null {
-        return Out::sample(); /*249:out*/
+        return Out::sample(); /*251:out*/
     }
 
     /**
@@ -17725,7 +17889,7 @@ class TopLevel {
      * @return OverrideClass|float|null
      */
     public static function sampleOverride(): OverrideClass|float|null {
-        return OverrideClass::sample(); /*250:override*/
+        return OverrideClass::sample(); /*252:override*/
     }
 
     /**
@@ -17801,7 +17965,7 @@ class TopLevel {
      * @return Package|float|null
      */
     public static function samplePackage(): Package|float|null {
-        return Package::sample(); /*251:package*/
+        return Package::sample(); /*253:package*/
     }
 
     /**
@@ -17877,7 +18041,7 @@ class TopLevel {
      * @return Params|float|null
      */
     public static function sampleParams(): Params|float|null {
-        return Params::sample(); /*252:params*/
+        return Params::sample(); /*254:params*/
     }
 
     /**
@@ -17953,7 +18117,7 @@ class TopLevel {
      * @return Pass|float|null
      */
     public static function samplePass(): Pass|float|null {
-        return Pass::sample(); /*253:pass*/
+        return Pass::sample(); /*255:pass*/
     }
 
     /**
@@ -18029,7 +18193,7 @@ class TopLevel {
      * @return Port|float|null
      */
     public static function samplePort(): Port|float|null {
-        return Port::sample(); /*254:port*/
+        return Port::sample(); /*256:port*/
     }
 
     /**
@@ -18105,7 +18269,7 @@ class TopLevel {
      * @return Postfix|float|null
      */
     public static function samplePostfix(): Postfix|float|null {
-        return Postfix::sample(); /*255:postfix*/
+        return Postfix::sample(); /*257:postfix*/
     }
 
     /**
@@ -18181,7 +18345,7 @@ class TopLevel {
      * @return Precedence|float|null
      */
     public static function samplePrecedence(): Precedence|float|null {
-        return Precedence::sample(); /*256:precedence*/
+        return Precedence::sample(); /*258:precedence*/
     }
 
     /**
@@ -18257,7 +18421,7 @@ class TopLevel {
      * @return Prefix|float|null
      */
     public static function samplePrefix(): Prefix|float|null {
-        return Prefix::sample(); /*257:prefix*/
+        return Prefix::sample(); /*259:prefix*/
     }
 
     /**
@@ -18333,7 +18497,7 @@ class TopLevel {
      * @return PrimitiveKind|float|null
      */
     public static function samplePrimitiveKind(): PrimitiveKind|float|null {
-        return PrimitiveKind::sample(); /*258:primitiveKind*/
+        return PrimitiveKind::sample(); /*260:primitiveKind*/
     }
 
     /**
@@ -18409,7 +18573,7 @@ class TopLevel {
      * @return PrintClass|float|null
      */
     public static function samplePrint(): PrintClass|float|null {
-        return PrintClass::sample(); /*259:print*/
+        return PrintClass::sample(); /*261:print*/
     }
 
     /**
@@ -18485,7 +18649,7 @@ class TopLevel {
      * @return Printf|float|null
      */
     public static function samplePrintf(): Printf|float|null {
-        return Printf::sample(); /*260:printf*/
+        return Printf::sample(); /*262:printf*/
     }
 
     /**
@@ -18561,7 +18725,7 @@ class TopLevel {
      * @return PrintMembers|float|null
      */
     public static function samplePrintMembers(): PrintMembers|float|null {
-        return PrintMembers::sample(); /*261:printMembers*/
+        return PrintMembers::sample(); /*263:printMembers*/
     }
 
     /**
@@ -18637,7 +18801,7 @@ class TopLevel {
      * @return PrivateClass|float|null
      */
     public static function samplePrivate(): PrivateClass|float|null {
-        return PrivateClass::sample(); /*262:private*/
+        return PrivateClass::sample(); /*264:private*/
     }
 
     /**
@@ -18713,7 +18877,7 @@ class TopLevel {
      * @return ProtectedClass|float|null
      */
     public static function sampleProtected(): ProtectedClass|float|null {
-        return ProtectedClass::sample(); /*263:protected*/
+        return ProtectedClass::sample(); /*265:protected*/
     }
 
     /**
@@ -18789,7 +18953,7 @@ class TopLevel {
      * @return Protocol|float|null
      */
     public static function sampleProtocol(): Protocol|float|null {
-        return Protocol::sample(); /*264:protocol*/
+        return Protocol::sample(); /*266:protocol*/
     }
 
     /**
@@ -18865,7 +19029,7 @@ class TopLevel {
      * @return ProtocolClass|float|null
      */
     public static function sampleTopLevelProtocol(): ProtocolClass|float|null {
-        return ProtocolClass::sample(); /*265:topLevelProtocol*/
+        return ProtocolClass::sample(); /*267:topLevelProtocol*/
     }
 
     /**
@@ -18941,7 +19105,7 @@ class TopLevel {
      * @return PublicClass|float|null
      */
     public static function samplePublic(): PublicClass|float|null {
-        return PublicClass::sample(); /*266:public*/
+        return PublicClass::sample(); /*268:public*/
     }
 
     /**
@@ -19017,7 +19181,7 @@ class TopLevel {
      * @return Quicktype|float|null
      */
     public static function sampleQuicktype(): Quicktype|float|null {
-        return Quicktype::sample(); /*267:quicktype*/
+        return Quicktype::sample(); /*269:quicktype*/
     }
 
     /**
@@ -19093,7 +19257,7 @@ class TopLevel {
      * @return Raise|float|null
      */
     public static function sampleRaise(): Raise|float|null {
-        return Raise::sample(); /*268:raise*/
+        return Raise::sample(); /*270:raise*/
     }
 
     /**
@@ -19169,7 +19333,7 @@ class TopLevel {
      * @return Range|float|null
      */
     public static function sampleRange(): Range|float|null {
-        return Range::sample(); /*269:range*/
+        return Range::sample(); /*271:range*/
     }
 
     /**
@@ -19245,7 +19409,7 @@ class TopLevel {
      * @return ReadonlyClass|float|null
      */
     public static function sampleReadonly(): ReadonlyClass|float|null {
-        return ReadonlyClass::sample(); /*270:readonly*/
+        return ReadonlyClass::sample(); /*272:readonly*/
     }
 
     /**
@@ -19321,7 +19485,7 @@ class TopLevel {
      * @return Ref|float|null
      */
     public static function sampleRef(): Ref|float|null {
-        return Ref::sample(); /*271:ref*/
+        return Ref::sample(); /*273:ref*/
     }
 
     /**
@@ -19397,7 +19561,7 @@ class TopLevel {
      * @return RegExp|float|null
      */
     public static function sampleRegExp(): RegExp|float|null {
-        return RegExp::sample(); /*272:regExp*/
+        return RegExp::sample(); /*274:regExp*/
     }
 
     /**
@@ -19473,7 +19637,7 @@ class TopLevel {
      * @return Register|float|null
      */
     public static function sampleRegister(): Register|float|null {
-        return Register::sample(); /*273:register*/
+        return Register::sample(); /*275:register*/
     }
 
     /**
@@ -19549,7 +19713,7 @@ class TopLevel {
      * @return ReinterpretCast|float|null
      */
     public static function sampleReinterpretCast(): ReinterpretCast|float|null {
-        return ReinterpretCast::sample(); /*274:reinterpretCast*/
+        return ReinterpretCast::sample(); /*276:reinterpretCast*/
     }
 
     /**
@@ -19625,7 +19789,7 @@ class TopLevel {
      * @return Repeat|float|null
      */
     public static function sampleRepeat(): Repeat|float|null {
-        return Repeat::sample(); /*275:repeat*/
+        return Repeat::sample(); /*277:repeat*/
     }
 
     /**
@@ -19701,7 +19865,7 @@ class TopLevel {
      * @return RequireClass|float|null
      */
     public static function sampleRequire(): RequireClass|float|null {
-        return RequireClass::sample(); /*276:require*/
+        return RequireClass::sample(); /*278:require*/
     }
 
     /**
@@ -19777,7 +19941,7 @@ class TopLevel {
      * @return Required|float|null
      */
     public static function sampleRequired(): Required|float|null {
-        return Required::sample(); /*277:required*/
+        return Required::sample(); /*279:required*/
     }
 
     /**
@@ -19853,7 +20017,7 @@ class TopLevel {
      * @return Requires|float|null
      */
     public static function sampleRequires(): Requires|float|null {
-        return Requires::sample(); /*278:requires*/
+        return Requires::sample(); /*280:requires*/
     }
 
     /**
@@ -19929,7 +20093,7 @@ class TopLevel {
      * @return Restrict|float|null
      */
     public static function sampleRestrict(): Restrict|float|null {
-        return Restrict::sample(); /*279:restrict*/
+        return Restrict::sample(); /*281:restrict*/
     }
 
     /**
@@ -20005,7 +20169,7 @@ class TopLevel {
      * @return Retain|float|null
      */
     public static function sampleRetain(): Retain|float|null {
-        return Retain::sample(); /*280:retain*/
+        return Retain::sample(); /*282:retain*/
     }
 
     /**
@@ -20081,7 +20245,7 @@ class TopLevel {
      * @return Rethrows|float|null
      */
     public static function sampleRethrows(): Rethrows|float|null {
-        return Rethrows::sample(); /*281:rethrows*/
+        return Rethrows::sample(); /*283:rethrows*/
     }
 
     /**
@@ -20157,7 +20321,7 @@ class TopLevel {
      * @return ReturnClass|float|null
      */
     public static function sampleReturn(): ReturnClass|float|null {
-        return ReturnClass::sample(); /*282:return*/
+        return ReturnClass::sample(); /*284:return*/
     }
 
     /**
@@ -20233,7 +20397,7 @@ class TopLevel {
      * @return Right|float|null
      */
     public static function sampleRight(): Right|float|null {
-        return Right::sample(); /*283:right*/
+        return Right::sample(); /*285:right*/
     }
 
     /**
@@ -20309,7 +20473,7 @@ class TopLevel {
      * @return RuntimeType|float|null
      */
     public static function sampleRuntimeType(): RuntimeType|float|null {
-        return RuntimeType::sample(); /*284:runtimeType*/
+        return RuntimeType::sample(); /*286:runtimeType*/
     }
 
     /**
@@ -20385,7 +20549,7 @@ class TopLevel {
      * @return S|float|null
      */
     public static function sampleS(): S|float|null {
-        return S::sample(); /*285:s*/
+        return S::sample(); /*287:s*/
     }
 
     /**
@@ -20461,7 +20625,7 @@ class TopLevel {
      * @return Sbyte|float|null
      */
     public static function sampleSbyte(): Sbyte|float|null {
-        return Sbyte::sample(); /*286:sbyte*/
+        return Sbyte::sample(); /*288:sbyte*/
     }
 
     /**
@@ -20537,7 +20701,7 @@ class TopLevel {
      * @return Sealed|float|null
      */
     public static function sampleSealed(): Sealed|float|null {
-        return Sealed::sample(); /*287:sealed*/
+        return Sealed::sample(); /*289:sealed*/
     }
 
     /**
@@ -20613,7 +20777,7 @@ class TopLevel {
      * @return Sel|float|null
      */
     public static function sampleSel(): Sel|float|null {
-        return Sel::sample(); /*288:sel*/
+        return Sel::sample(); /*290:sel*/
     }
 
     /**
@@ -20689,7 +20853,7 @@ class TopLevel {
      * @return Select|float|null
      */
     public static function sampleSelect(): Select|float|null {
-        return Select::sample(); /*289:select*/
+        return Select::sample(); /*291:select*/
     }
 
     /**
@@ -20765,7 +20929,7 @@ class TopLevel {
      * @return SelfClass|float|null
      */
     public static function sampleSelf(): SelfClass|float|null {
-        return SelfClass::sample(); /*290:self*/
+        return SelfClass::sample(); /*292:self*/
     }
 
     /**
@@ -20841,7 +21005,7 @@ class TopLevel {
      * @return UnionSelfSelf|float|null
      */
     public static function sampleTopLevelSelf(): UnionSelfSelf|float|null {
-        return UnionSelfSelf::sample(); /*291:topLevelSelf*/
+        return UnionSelfSelf::sample(); /*293:topLevelSelf*/
     }
 
     /**
@@ -20917,7 +21081,7 @@ class TopLevel {
      * @return Sendable|float|null
      */
     public static function sampleSendable(): Sendable|float|null {
-        return Sendable::sample(); /*292:sendable*/
+        return Sendable::sample(); /*294:sendable*/
     }
 
     /**
@@ -20993,7 +21157,7 @@ class TopLevel {
      * @return SerialDescriptor|float|null
      */
     public static function sampleSerialDescriptor(): SerialDescriptor|float|null {
-        return SerialDescriptor::sample(); /*293:serialDescriptor*/
+        return SerialDescriptor::sample(); /*295:serialDescriptor*/
     }
 
     /**
@@ -21069,7 +21233,7 @@ class TopLevel {
      * @return SerializableClass|float|null
      */
     public static function sampleSerializable(): SerializableClass|float|null {
-        return SerializableClass::sample(); /*294:serializable*/
+        return SerializableClass::sample(); /*296:serializable*/
     }
 
     /**
@@ -21145,7 +21309,7 @@ class TopLevel {
      * @return Serialize|float|null
      */
     public static function sampleSerialize(): Serialize|float|null {
-        return Serialize::sample(); /*295:serialize*/
+        return Serialize::sample(); /*297:serialize*/
     }
 
     /**
@@ -21221,7 +21385,7 @@ class TopLevel {
      * @return SerializerProvider|float|null
      */
     public static function sampleSerializerProvider(): SerializerProvider|float|null {
-        return SerializerProvider::sample(); /*296:serializerProvider*/
+        return SerializerProvider::sample(); /*298:serializerProvider*/
     }
 
     /**
@@ -21297,7 +21461,7 @@ class TopLevel {
      * @return SerialName|float|null
      */
     public static function sampleSerialName(): SerialName|float|null {
-        return SerialName::sample(); /*297:serialName*/
+        return SerialName::sample(); /*299:serialName*/
     }
 
     /**
@@ -21373,7 +21537,7 @@ class TopLevel {
      * @return Set|float|null
      */
     public static function sampleSet(): Set|float|null {
-        return Set::sample(); /*298:set*/
+        return Set::sample(); /*300:set*/
     }
 
     /**
@@ -21449,7 +21613,7 @@ class TopLevel {
      * @return Short|float|null
      */
     public static function sampleShort(): Short|float|null {
-        return Short::sample(); /*299:short*/
+        return Short::sample(); /*301:short*/
     }
 
     /**
@@ -21525,7 +21689,7 @@ class TopLevel {
      * @return Signed|float|null
      */
     public static function sampleSigned(): Signed|float|null {
-        return Signed::sample(); /*300:signed*/
+        return Signed::sample(); /*302:signed*/
     }
 
     /**
@@ -21601,7 +21765,7 @@ class TopLevel {
      * @return SimpleModule|float|null
      */
     public static function sampleSimpleModule(): SimpleModule|float|null {
-        return SimpleModule::sample(); /*301:simpleModule*/
+        return SimpleModule::sample(); /*303:simpleModule*/
     }
 
     /**
@@ -21677,7 +21841,7 @@ class TopLevel {
      * @return Sizeof|float|null
      */
     public static function sampleSizeof(): Sizeof|float|null {
-        return Sizeof::sample(); /*302:sizeof*/
+        return Sizeof::sample(); /*304:sizeof*/
     }
 
     /**
@@ -21753,7 +21917,7 @@ class TopLevel {
      * @return Stackalloc|float|null
      */
     public static function sampleStackalloc(): Stackalloc|float|null {
-        return Stackalloc::sample(); /*303:stackalloc*/
+        return Stackalloc::sample(); /*305:stackalloc*/
     }
 
     /**
@@ -21829,7 +21993,7 @@ class TopLevel {
      * @return Standards|float|null
      */
     public static function sampleStandards(): Standards|float|null {
-        return Standards::sample(); /*304:standards*/
+        return Standards::sample(); /*306:standards*/
     }
 
     /**
@@ -21905,7 +22069,7 @@ class TopLevel {
      * @return StaticClass|float|null
      */
     public static function sampleStatic(): StaticClass|float|null {
-        return StaticClass::sample(); /*305:static*/
+        return StaticClass::sample(); /*307:static*/
     }
 
     /**
@@ -21981,7 +22145,7 @@ class TopLevel {
      * @return StaticAssert|float|null
      */
     public static function sampleStaticAssert(): StaticAssert|float|null {
-        return StaticAssert::sample(); /*306:staticAssert*/
+        return StaticAssert::sample(); /*308:staticAssert*/
     }
 
     /**
@@ -22057,7 +22221,7 @@ class TopLevel {
      * @return StaticCast|float|null
      */
     public static function sampleStaticCast(): StaticCast|float|null {
-        return StaticCast::sample(); /*307:staticCast*/
+        return StaticCast::sample(); /*309:staticCast*/
     }
 
     /**
@@ -22133,7 +22297,7 @@ class TopLevel {
      * @return StdDeserializer|float|null
      */
     public static function sampleStdDeserializer(): StdDeserializer|float|null {
-        return StdDeserializer::sample(); /*308:stdDeserializer*/
+        return StdDeserializer::sample(); /*310:stdDeserializer*/
     }
 
     /**
@@ -22209,7 +22373,7 @@ class TopLevel {
      * @return StdSerializer|float|null
      */
     public static function sampleStdSerializer(): StdSerializer|float|null {
-        return StdSerializer::sample(); /*309:stdSerializer*/
+        return StdSerializer::sample(); /*311:stdSerializer*/
     }
 
     /**
@@ -22285,7 +22449,7 @@ class TopLevel {
      * @return Strictfp|float|null
      */
     public static function sampleStrictfp(): Strictfp|float|null {
-        return Strictfp::sample(); /*310:strictfp*/
+        return Strictfp::sample(); /*312:strictfp*/
     }
 
     /**
@@ -22361,7 +22525,7 @@ class TopLevel {
      * @return StringClass|float|null
      */
     public static function sampleString(): StringClass|float|null {
-        return StringClass::sample(); /*311:string*/
+        return StringClass::sample(); /*313:string*/
     }
 
     /**
@@ -22437,7 +22601,7 @@ class TopLevel {
      * @return Struct|float|null
      */
     public static function sampleStruct(): Struct|float|null {
-        return Struct::sample(); /*312:struct*/
+        return Struct::sample(); /*314:struct*/
     }
 
     /**
@@ -22513,7 +22677,7 @@ class TopLevel {
      * @return Subscript|float|null
      */
     public static function sampleSubscript(): Subscript|float|null {
-        return Subscript::sample(); /*313:subscript*/
+        return Subscript::sample(); /*315:subscript*/
     }
 
     /**
@@ -22589,7 +22753,7 @@ class TopLevel {
      * @return Super|float|null
      */
     public static function sampleSuper(): Super|float|null {
-        return Super::sample(); /*314:super*/
+        return Super::sample(); /*316:super*/
     }
 
     /**
@@ -22665,7 +22829,7 @@ class TopLevel {
      * @return SwitchClass|float|null
      */
     public static function sampleSwitch(): SwitchClass|float|null {
-        return SwitchClass::sample(); /*315:switch*/
+        return SwitchClass::sample(); /*317:switch*/
     }
 
     /**
@@ -22741,7 +22905,7 @@ class TopLevel {
      * @return Symbol|float|null
      */
     public static function sampleSymbol(): Symbol|float|null {
-        return Symbol::sample(); /*316:symbol*/
+        return Symbol::sample(); /*318:symbol*/
     }
 
     /**
@@ -22817,7 +22981,7 @@ class TopLevel {
      * @return Synchronized|float|null
      */
     public static function sampleSynchronized(): Synchronized|float|null {
-        return Synchronized::sample(); /*317:synchronized*/
+        return Synchronized::sample(); /*319:synchronized*/
     }
 
     /**
@@ -22893,7 +23057,7 @@ class TopLevel {
      * @return System|float|null
      */
     public static function sampleSystem(): System|float|null {
-        return System::sample(); /*318:system*/
+        return System::sample(); /*320:system*/
     }
 
     /**
@@ -22969,7 +23133,7 @@ class TopLevel {
      * @return Template|float|null
      */
     public static function sampleTemplate(): Template|float|null {
-        return Template::sample(); /*319:template*/
+        return Template::sample(); /*321:template*/
     }
 
     /**
@@ -23045,7 +23209,7 @@ class TopLevel {
      * @return Then|float|null
      */
     public static function sampleThen(): Then|float|null {
-        return Then::sample(); /*320:then*/
+        return Then::sample(); /*322:then*/
     }
 
     /**
@@ -23121,7 +23285,7 @@ class TopLevel {
      * @return This|float|null
      */
     public static function sampleTopLevelThis(): This|float|null {
-        return This::sample(); /*321:topLevelThis*/
+        return This::sample(); /*323:topLevelThis*/
     }
 
     /**
@@ -23197,7 +23361,7 @@ class TopLevel {
      * @return ThreadLocal|float|null
      */
     public static function sampleThreadLocal(): ThreadLocal|float|null {
-        return ThreadLocal::sample(); /*322:threadLocal*/
+        return ThreadLocal::sample(); /*324:threadLocal*/
     }
 
     /**
@@ -23273,7 +23437,7 @@ class TopLevel {
      * @return ThrowClass|float|null
      */
     public static function sampleThrow(): ThrowClass|float|null {
-        return ThrowClass::sample(); /*323:throw*/
+        return ThrowClass::sample(); /*325:throw*/
     }
 
     /**
@@ -23349,7 +23513,7 @@ class TopLevel {
      * @return Throws|float|null
      */
     public static function sampleThrows(): Throws|float|null {
-        return Throws::sample(); /*324:throws*/
+        return Throws::sample(); /*326:throws*/
     }
 
     /**
@@ -23425,7 +23589,7 @@ class TopLevel {
      * @return TimeOnly|float|null
      */
     public static function sampleTimeOnly(): TimeOnly|float|null {
-        return TimeOnly::sample(); /*325:timeOnly*/
+        return TimeOnly::sample(); /*327:timeOnly*/
     }
 
     /**
@@ -23501,7 +23665,7 @@ class TopLevel {
      * @return TimeOnlyConverter|float|null
      */
     public static function sampleTimeOnlyConverter(): TimeOnlyConverter|float|null {
-        return TimeOnlyConverter::sample(); /*326:timeOnlyConverter*/
+        return TimeOnlyConverter::sample(); /*328:timeOnlyConverter*/
     }
 
     /**
@@ -23577,7 +23741,83 @@ class TopLevel {
      * @return TimeZone|float|null
      */
     public static function sampleTimeZone(): TimeZone|float|null {
-        return TimeZone::sample(); /*327:timeZone*/
+        return TimeZone::sample(); /*329:timeZone*/
+    }
+
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return ToDict|float|null
+     */
+    public static function fromToDict(stdClass|float|null $value): ToDict|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return ToDict::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toToDict(): stdClass|float|null {
+        if (TopLevel::validateToDict($this->toDict))  {
+            if (is_null($this->toDict)) {
+                return $this->toDict; /*null*/
+            } elseif ($this->toDict instanceof ToDict) {
+                return $this->toDict->to(); /*class*/
+            } elseif (is_float($this->toDict) || is_int($this->toDict)) {
+                return $this->toDict; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::toDict');
+    }
+
+    /**
+     * @param ToDict|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateToDict(ToDict|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::toDict");
+            }
+        } elseif ($value instanceof ToDict) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::toDict");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::toDict");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return ToDict|float|null
+     */
+    public function getToDict(): ToDict|float|null {
+        if (TopLevel::validateToDict($this->toDict))  {
+            return $this->toDict;
+        }
+        throw new Exception('never get to getToDict TopLevel::toDict');
+    }
+
+    /**
+     * @return ToDict|float|null
+     */
+    public static function sampleToDict(): ToDict|float|null {
+        return ToDict::sample(); /*330:toDict*/
     }
 
     /**
@@ -23653,7 +23893,7 @@ class TopLevel {
      * @return ToJSON|float|null
      */
     public static function sampleToJSON(): ToJSON|float|null {
-        return ToJSON::sample(); /*328:toJSON*/
+        return ToJSON::sample(); /*331:toJSON*/
     }
 
     /**
@@ -23729,7 +23969,7 @@ class TopLevel {
      * @return TopLevelClass|float|null
      */
     public static function sampleTopLevel(): TopLevelClass|float|null {
-        return TopLevelClass::sample(); /*329:topLevel*/
+        return TopLevelClass::sample(); /*332:topLevel*/
     }
 
     /**
@@ -23805,7 +24045,7 @@ class TopLevel {
      * @return ToString|float|null
      */
     public static function sampleToString(): ToString|float|null {
-        return ToString::sample(); /*330:toString*/
+        return ToString::sample(); /*333:toString*/
     }
 
     /**
@@ -23881,7 +24121,7 @@ class TopLevel {
      * @return Transient|float|null
      */
     public static function sampleTransient(): Transient|float|null {
-        return Transient::sample(); /*331:transient*/
+        return Transient::sample(); /*334:transient*/
     }
 
     /**
@@ -23957,7 +24197,7 @@ class TopLevel {
      * @return TrueClass|float|null
      */
     public static function sampleTrue(): TrueClass|float|null {
-        return TrueClass::sample(); /*332:true*/
+        return TrueClass::sample(); /*335:true*/
     }
 
     /**
@@ -24033,7 +24273,7 @@ class TopLevel {
      * @return UnionTrueTrue|float|null
      */
     public static function sampleTopLevelTrue(): UnionTrueTrue|float|null {
-        return UnionTrueTrue::sample(); /*333:topLevelTrue*/
+        return UnionTrueTrue::sample(); /*336:topLevelTrue*/
     }
 
     /**
@@ -24109,7 +24349,7 @@ class TopLevel {
      * @return TryClass|float|null
      */
     public static function sampleTry(): TryClass|float|null {
-        return TryClass::sample(); /*334:try*/
+        return TryClass::sample(); /*337:try*/
     }
 
     /**
@@ -24185,7 +24425,7 @@ class TopLevel {
      * @return Type|float|null
      */
     public static function sampleType(): Type|float|null {
-        return Type::sample(); /*335:type*/
+        return Type::sample(); /*338:type*/
     }
 
     /**
@@ -24261,7 +24501,7 @@ class TopLevel {
      * @return TypeClass|float|null
      */
     public static function sampleTopLevelType(): TypeClass|float|null {
-        return TypeClass::sample(); /*336:topLevelType*/
+        return TypeClass::sample(); /*339:topLevelType*/
     }
 
     /**
@@ -24337,7 +24577,7 @@ class TopLevel {
      * @return Typealias|float|null
      */
     public static function sampleTypealias(): Typealias|float|null {
-        return Typealias::sample(); /*337:typealias*/
+        return Typealias::sample(); /*340:typealias*/
     }
 
     /**
@@ -24413,7 +24653,7 @@ class TopLevel {
      * @return Typedef|float|null
      */
     public static function sampleTypedef(): Typedef|float|null {
-        return Typedef::sample(); /*338:typedef*/
+        return Typedef::sample(); /*341:typedef*/
     }
 
     /**
@@ -24489,7 +24729,7 @@ class TopLevel {
      * @return Typeid|float|null
      */
     public static function sampleTypeid(): Typeid|float|null {
-        return Typeid::sample(); /*339:typeid*/
+        return Typeid::sample(); /*342:typeid*/
     }
 
     /**
@@ -24565,7 +24805,7 @@ class TopLevel {
      * @return Typename|float|null
      */
     public static function sampleTypename(): Typename|float|null {
-        return Typename::sample(); /*340:typename*/
+        return Typename::sample(); /*343:typename*/
     }
 
     /**
@@ -24641,7 +24881,7 @@ class TopLevel {
      * @return Typeof|float|null
      */
     public static function sampleTypeof(): Typeof|float|null {
-        return Typeof::sample(); /*341:typeof*/
+        return Typeof::sample(); /*344:typeof*/
     }
 
     /**
@@ -24717,7 +24957,7 @@ class TopLevel {
      * @return Uint|float|null
      */
     public static function sampleUint(): Uint|float|null {
-        return Uint::sample(); /*342:uint*/
+        return Uint::sample(); /*345:uint*/
     }
 
     /**
@@ -24793,7 +25033,7 @@ class TopLevel {
      * @return Ulong|float|null
      */
     public static function sampleUlong(): Ulong|float|null {
-        return Ulong::sample(); /*343:ulong*/
+        return Ulong::sample(); /*346:ulong*/
     }
 
     /**
@@ -24869,7 +25109,7 @@ class TopLevel {
      * @return Unchecked|float|null
      */
     public static function sampleUnchecked(): Unchecked|float|null {
-        return Unchecked::sample(); /*344:unchecked*/
+        return Unchecked::sample(); /*347:unchecked*/
     }
 
     /**
@@ -24945,7 +25185,7 @@ class TopLevel {
      * @return Undefined|float|null
      */
     public static function sampleUndefined(): Undefined|float|null {
-        return Undefined::sample(); /*345:undefined*/
+        return Undefined::sample(); /*348:undefined*/
     }
 
     /**
@@ -25021,7 +25261,83 @@ class TopLevel {
      * @return UnionClass|float|null
      */
     public static function sampleUnion(): UnionClass|float|null {
-        return UnionClass::sample(); /*346:union*/
+        return UnionClass::sample(); /*349:union*/
+    }
+
+    /**
+     * @param stdClass|float|null $value
+     * @throws Exception
+     * @return UnmarshalJSON|float|null
+     */
+    public static function fromUnmarshalJSON(stdClass|float|null $value): UnmarshalJSON|float|null {
+        if (is_null($value)) {
+            return $value; /*null*/
+        } elseif (is_object($value)) {
+            return UnmarshalJSON::from($value); /*class*/
+        } elseif (is_float($value) || is_int($value)) {
+            return $value; /*float*/
+        } else {
+            throw new Exception('Cannot deserialize union value in TopLevel');
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass|float|null
+     */
+    public function toUnmarshalJSON(): stdClass|float|null {
+        if (TopLevel::validateUnmarshalJSON($this->unmarshalJSON))  {
+            if (is_null($this->unmarshalJSON)) {
+                return $this->unmarshalJSON; /*null*/
+            } elseif ($this->unmarshalJSON instanceof UnmarshalJSON) {
+                return $this->unmarshalJSON->to(); /*class*/
+            } elseif (is_float($this->unmarshalJSON) || is_int($this->unmarshalJSON)) {
+                return $this->unmarshalJSON; /*float*/
+            } else {
+                throw new Exception('Union value has no matching member in TopLevel');
+            }
+        }
+        throw new Exception('never get to this TopLevel::unmarshalJSON');
+    }
+
+    /**
+     * @param UnmarshalJSON|float|null
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateUnmarshalJSON(UnmarshalJSON|float|null $value): bool {
+        if (is_null($value)) {
+            if (!is_null($value)) {
+                throw new Exception("Attribute Error:TopLevel::unmarshalJSON");
+            }
+        } elseif ($value instanceof UnmarshalJSON) {
+            $value->validate();
+        } elseif (is_float($value) || is_int($value)) {
+            if (!is_float($value) && !is_int($value)) {
+                throw new Exception("Attribute Error:TopLevel::unmarshalJSON");
+            }
+        } else {
+            throw new Exception("Attribute Error:TopLevel::unmarshalJSON");
+        }
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return UnmarshalJSON|float|null
+     */
+    public function getUnmarshalJSON(): UnmarshalJSON|float|null {
+        if (TopLevel::validateUnmarshalJSON($this->unmarshalJSON))  {
+            return $this->unmarshalJSON;
+        }
+        throw new Exception('never get to getUnmarshalJSON TopLevel::unmarshalJSON');
+    }
+
+    /**
+     * @return UnmarshalJSON|float|null
+     */
+    public static function sampleUnmarshalJSON(): UnmarshalJSON|float|null {
+        return UnmarshalJSON::sample(); /*350:unmarshalJSON*/
     }
 
     /**
@@ -25097,7 +25413,7 @@ class TopLevel {
      * @return Unowned|float|null
      */
     public static function sampleUnowned(): Unowned|float|null {
-        return Unowned::sample(); /*347:unowned*/
+        return Unowned::sample(); /*351:unowned*/
     }
 
     /**
@@ -25173,7 +25489,7 @@ class TopLevel {
      * @return Unsafe|float|null
      */
     public static function sampleUnsafe(): Unsafe|float|null {
-        return Unsafe::sample(); /*348:unsafe*/
+        return Unsafe::sample(); /*352:unsafe*/
     }
 
     /**
@@ -25249,7 +25565,7 @@ class TopLevel {
      * @return Unsigned|float|null
      */
     public static function sampleUnsigned(): Unsigned|float|null {
-        return Unsigned::sample(); /*349:unsigned*/
+        return Unsigned::sample(); /*353:unsigned*/
     }
 
     /**
@@ -25325,7 +25641,7 @@ class TopLevel {
      * @return UseSerializers|float|null
      */
     public static function sampleUseSerializers(): UseSerializers|float|null {
-        return UseSerializers::sample(); /*350:useSerializers*/
+        return UseSerializers::sample(); /*354:useSerializers*/
     }
 
     /**
@@ -25401,7 +25717,7 @@ class TopLevel {
      * @return Ushort|float|null
      */
     public static function sampleUshort(): Ushort|float|null {
-        return Ushort::sample(); /*351:ushort*/
+        return Ushort::sample(); /*355:ushort*/
     }
 
     /**
@@ -25477,7 +25793,7 @@ class TopLevel {
      * @return Using|float|null
      */
     public static function sampleUsing(): Using|float|null {
-        return Using::sample(); /*352:using*/
+        return Using::sample(); /*356:using*/
     }
 
     /**
@@ -25553,7 +25869,7 @@ class TopLevel {
      * @return Utf8JSONReader|float|null
      */
     public static function sampleUtf8JSONReader(): Utf8JSONReader|float|null {
-        return Utf8JSONReader::sample(); /*353:utf8JSONReader*/
+        return Utf8JSONReader::sample(); /*357:utf8JSONReader*/
     }
 
     /**
@@ -25629,7 +25945,7 @@ class TopLevel {
      * @return Utf8JSONWriter|float|null
      */
     public static function sampleUtf8JSONWriter(): Utf8JSONWriter|float|null {
-        return Utf8JSONWriter::sample(); /*354:utf8JSONWriter*/
+        return Utf8JSONWriter::sample(); /*358:utf8JSONWriter*/
     }
 
     /**
@@ -25705,7 +26021,7 @@ class TopLevel {
      * @return UUID|float|null
      */
     public static function sampleUUID(): UUID|float|null {
-        return UUID::sample(); /*355:uuid*/
+        return UUID::sample(); /*359:uuid*/
     }
 
     /**
@@ -25781,7 +26097,7 @@ class TopLevel {
      * @return VarClass|float|null
      */
     public static function sampleVar(): VarClass|float|null {
-        return VarClass::sample(); /*356:var*/
+        return VarClass::sample(); /*360:var*/
     }
 
     /**
@@ -25857,7 +26173,7 @@ class TopLevel {
      * @return Virtual|float|null
      */
     public static function sampleVirtual(): Virtual|float|null {
-        return Virtual::sample(); /*357:virtual*/
+        return Virtual::sample(); /*361:virtual*/
     }
 
     /**
@@ -25933,7 +26249,7 @@ class TopLevel {
      * @return VoidClass|float|null
      */
     public static function sampleVoid(): VoidClass|float|null {
-        return VoidClass::sample(); /*358:void*/
+        return VoidClass::sample(); /*362:void*/
     }
 
     /**
@@ -26009,7 +26325,7 @@ class TopLevel {
      * @return Volatile|float|null
      */
     public static function sampleVolatile(): Volatile|float|null {
-        return Volatile::sample(); /*359:volatile*/
+        return Volatile::sample(); /*363:volatile*/
     }
 
     /**
@@ -26085,7 +26401,7 @@ class TopLevel {
      * @return WcharT|float|null
      */
     public static function sampleWcharT(): WcharT|float|null {
-        return WcharT::sample(); /*360:wcharT*/
+        return WcharT::sample(); /*364:wcharT*/
     }
 
     /**
@@ -26161,7 +26477,7 @@ class TopLevel {
      * @return Weak|float|null
      */
     public static function sampleWeak(): Weak|float|null {
-        return Weak::sample(); /*361:weak*/
+        return Weak::sample(); /*365:weak*/
     }
 
     /**
@@ -26237,7 +26553,7 @@ class TopLevel {
      * @return Where|float|null
      */
     public static function sampleWhere(): Where|float|null {
-        return Where::sample(); /*362:where*/
+        return Where::sample(); /*366:where*/
     }
 
     /**
@@ -26313,7 +26629,7 @@ class TopLevel {
      * @return WhileClass|float|null
      */
     public static function sampleWhile(): WhileClass|float|null {
-        return WhileClass::sample(); /*363:while*/
+        return WhileClass::sample(); /*367:while*/
     }
 
     /**
@@ -26389,7 +26705,7 @@ class TopLevel {
      * @return WillSet|float|null
      */
     public static function sampleWillSet(): WillSet|float|null {
-        return WillSet::sample(); /*364:willSet*/
+        return WillSet::sample(); /*368:willSet*/
     }
 
     /**
@@ -26465,7 +26781,7 @@ class TopLevel {
      * @return With|float|null
      */
     public static function sampleWith(): With|float|null {
-        return With::sample(); /*365:with*/
+        return With::sample(); /*369:with*/
     }
 
     /**
@@ -26541,7 +26857,7 @@ class TopLevel {
      * @return XorClass|float|null
      */
     public static function sampleXor(): XorClass|float|null {
-        return XorClass::sample(); /*366:xor*/
+        return XorClass::sample(); /*370:xor*/
     }
 
     /**
@@ -26617,7 +26933,7 @@ class TopLevel {
      * @return XorEq|float|null
      */
     public static function sampleXorEq(): XorEq|float|null {
-        return XorEq::sample(); /*367:xorEq*/
+        return XorEq::sample(); /*371:xorEq*/
     }
 
     /**
@@ -26693,7 +27009,7 @@ class TopLevel {
      * @return Yes|float|null
      */
     public static function sampleYes(): Yes|float|null {
-        return Yes::sample(); /*368:yes*/
+        return Yes::sample(); /*372:yes*/
     }
 
     /**
@@ -26769,7 +27085,7 @@ class TopLevel {
      * @return YieldClass|float|null
      */
     public static function sampleYield(): YieldClass|float|null {
-        return YieldClass::sample(); /*369:yield*/
+        return YieldClass::sample(); /*373:yield*/
     }
 
     /**
@@ -26899,6 +27215,7 @@ class TopLevel {
         || TopLevel::validateFormatException($this->formatException)
         || TopLevel::validateFriend($this->friend)
         || TopLevel::validateFrom($this->from)
+        || TopLevel::validateFromDict($this->fromDict)
         || TopLevel::validateFromJSON($this->fromJSON)
         || TopLevel::validateFunc($this->func)
         || TopLevel::validateFunction($this->function)
@@ -26960,6 +27277,7 @@ class TopLevel {
         || TopLevel::validateLong($this->long)
         || TopLevel::validateMap($this->map)
         || TopLevel::validateMapEntry($this->mapEntry)
+        || TopLevel::validateMarshalJSON($this->marshalJSON)
         || TopLevel::validateMetadataPropertyHandling($this->metadataPropertyHandling)
         || TopLevel::validateModule($this->module)
         || TopLevel::validateMutable($this->mutable)
@@ -27074,6 +27392,7 @@ class TopLevel {
         || TopLevel::validateTimeOnly($this->timeOnly)
         || TopLevel::validateTimeOnlyConverter($this->timeOnlyConverter)
         || TopLevel::validateTimeZone($this->timeZone)
+        || TopLevel::validateToDict($this->toDict)
         || TopLevel::validateToJSON($this->toJSON)
         || TopLevel::validateTopLevel($this->topLevel)
         || TopLevel::validateToString($this->toString)
@@ -27093,6 +27412,7 @@ class TopLevel {
         || TopLevel::validateUnchecked($this->unchecked)
         || TopLevel::validateUndefined($this->undefined)
         || TopLevel::validateUnion($this->union)
+        || TopLevel::validateUnmarshalJSON($this->unmarshalJSON)
         || TopLevel::validateUnowned($this->unowned)
         || TopLevel::validateUnsafe($this->unsafe)
         || TopLevel::validateUnsigned($this->unsigned)
@@ -27208,7 +27528,7 @@ class TopLevel {
         $out->{'del'} = $this->toDel();
         $out->{'delegate'} = $this->toDelegate();
         $out->{'delete'} = $this->toDelete();
-        $out->{'dict'} = $this->toDict();
+        $out->{'dict'} = $this->purpleToDict();
         $out->{'dictionary'} = $this->toDictionary();
         $out->{'didSet'} = $this->toDidSet();
         $out->{'do'} = $this->toDo();
@@ -27246,6 +27566,7 @@ class TopLevel {
         $out->{'FormatException'} = $this->toFormatException();
         $out->{'friend'} = $this->toFriend();
         $out->{'from'} = $this->toFrom();
+        $out->{'from_dict'} = $this->toFromDict();
         $out->{'from_json'} = $this->toFromJSON();
         $out->{'func'} = $this->toFunc();
         $out->{'function'} = $this->toFunction();
@@ -27307,6 +27628,7 @@ class TopLevel {
         $out->{'long'} = $this->toLong();
         $out->{'map'} = $this->toMap();
         $out->{'MapEntry'} = $this->toMapEntry();
+        $out->{'MarshalJSON'} = $this->toMarshalJSON();
         $out->{'metadata_property_handling'} = $this->toMetadataPropertyHandling();
         $out->{'module'} = $this->toModule();
         $out->{'mutable'} = $this->toMutable();
@@ -27421,6 +27743,7 @@ class TopLevel {
         $out->{'TimeOnly'} = $this->toTimeOnly();
         $out->{'TimeOnlyConverter'} = $this->toTimeOnlyConverter();
         $out->{'TimeZone'} = $this->toTimeZone();
+        $out->{'to_dict'} = $this->toToDict();
         $out->{'to_json'} = $this->toToJSON();
         $out->{'top_level'} = $this->toTopLevel();
         $out->{'toString'} = $this->toToString();
@@ -27440,6 +27763,7 @@ class TopLevel {
         $out->{'unchecked'} = $this->toUnchecked();
         $out->{'undefined'} = $this->toUndefined();
         $out->{'union'} = $this->toUnion();
+        $out->{'UnmarshalJSON'} = $this->toUnmarshalJSON();
         $out->{'unowned'} = $this->toUnowned();
         $out->{'unsafe'} = $this->toUnsafe();
         $out->{'unsigned'} = $this->toUnsigned();
@@ -27557,7 +27881,7 @@ class TopLevel {
         ,TopLevel::fromDel($obj->{'del'})
         ,TopLevel::fromDelegate($obj->{'delegate'})
         ,TopLevel::fromDelete($obj->{'delete'})
-        ,TopLevel::fromDict($obj->{'dict'})
+        ,TopLevel::purpleFromDict($obj->{'dict'})
         ,TopLevel::fromDictionary($obj->{'dictionary'})
         ,TopLevel::fromDidSet($obj->{'didSet'})
         ,TopLevel::fromDo($obj->{'do'})
@@ -27595,6 +27919,7 @@ class TopLevel {
         ,TopLevel::fromFormatException($obj->{'FormatException'})
         ,TopLevel::fromFriend($obj->{'friend'})
         ,TopLevel::fromFrom($obj->{'from'})
+        ,TopLevel::fromFromDict($obj->{'from_dict'})
         ,TopLevel::fromFromJSON($obj->{'from_json'})
         ,TopLevel::fromFunc($obj->{'func'})
         ,TopLevel::fromFunction($obj->{'function'})
@@ -27656,6 +27981,7 @@ class TopLevel {
         ,TopLevel::fromLong($obj->{'long'})
         ,TopLevel::fromMap($obj->{'map'})
         ,TopLevel::fromMapEntry($obj->{'MapEntry'})
+        ,TopLevel::fromMarshalJSON($obj->{'MarshalJSON'})
         ,TopLevel::fromMetadataPropertyHandling($obj->{'metadata_property_handling'})
         ,TopLevel::fromModule($obj->{'module'})
         ,TopLevel::fromMutable($obj->{'mutable'})
@@ -27770,6 +28096,7 @@ class TopLevel {
         ,TopLevel::fromTimeOnly($obj->{'TimeOnly'})
         ,TopLevel::fromTimeOnlyConverter($obj->{'TimeOnlyConverter'})
         ,TopLevel::fromTimeZone($obj->{'TimeZone'})
+        ,TopLevel::fromToDict($obj->{'to_dict'})
         ,TopLevel::fromToJSON($obj->{'to_json'})
         ,TopLevel::fromTopLevel($obj->{'top_level'})
         ,TopLevel::fromToString($obj->{'toString'})
@@ -27789,6 +28116,7 @@ class TopLevel {
         ,TopLevel::fromUnchecked($obj->{'unchecked'})
         ,TopLevel::fromUndefined($obj->{'undefined'})
         ,TopLevel::fromUnion($obj->{'union'})
+        ,TopLevel::fromUnmarshalJSON($obj->{'UnmarshalJSON'})
         ,TopLevel::fromUnowned($obj->{'unowned'})
         ,TopLevel::fromUnsafe($obj->{'unsafe'})
         ,TopLevel::fromUnsigned($obj->{'unsigned'})
@@ -27942,6 +28270,7 @@ class TopLevel {
         ,TopLevel::sampleFormatException()
         ,TopLevel::sampleFriend()
         ,TopLevel::sampleFrom()
+        ,TopLevel::sampleFromDict()
         ,TopLevel::sampleFromJSON()
         ,TopLevel::sampleFunc()
         ,TopLevel::sampleFunction()
@@ -28003,6 +28332,7 @@ class TopLevel {
         ,TopLevel::sampleLong()
         ,TopLevel::sampleMap()
         ,TopLevel::sampleMapEntry()
+        ,TopLevel::sampleMarshalJSON()
         ,TopLevel::sampleMetadataPropertyHandling()
         ,TopLevel::sampleModule()
         ,TopLevel::sampleMutable()
@@ -28117,6 +28447,7 @@ class TopLevel {
         ,TopLevel::sampleTimeOnly()
         ,TopLevel::sampleTimeOnlyConverter()
         ,TopLevel::sampleTimeZone()
+        ,TopLevel::sampleToDict()
         ,TopLevel::sampleToJSON()
         ,TopLevel::sampleTopLevel()
         ,TopLevel::sampleToString()
@@ -28136,6 +28467,7 @@ class TopLevel {
         ,TopLevel::sampleUnchecked()
         ,TopLevel::sampleUndefined()
         ,TopLevel::sampleUnion()
+        ,TopLevel::sampleUnmarshalJSON()
         ,TopLevel::sampleUnowned()
         ,TopLevel::sampleUnsafe()
         ,TopLevel::sampleUnsigned()
@@ -33338,6 +33670,51 @@ class From {
     }
 }
 
+// This is an autogenerated file:FromDict
+
+class FromDict {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return FromDict
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): FromDict {
+        return new FromDict(
+        );
+    }
+
+    /**
+     * @return FromDict
+     */
+    public static function sample(): FromDict {
+        return new FromDict(
+        );
+    }
+}
+
 // This is an autogenerated file:FromJSON
 
 class FromJSON {
@@ -36128,6 +36505,51 @@ class MapEntry {
     }
 }
 
+// This is an autogenerated file:MarshalJSON
+
+class MarshalJSON {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return MarshalJSON
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): MarshalJSON {
+        return new MarshalJSON(
+        );
+    }
+
+    /**
+     * @return MarshalJSON
+     */
+    public static function sample(): MarshalJSON {
+        return new MarshalJSON(
+        );
+    }
+}
+
 // This is an autogenerated file:MetadataPropertyHandling
 
 class MetadataPropertyHandling {
@@ -41078,6 +41500,51 @@ class TimeZone {
     }
 }
 
+// This is an autogenerated file:ToDict
+
+class ToDict {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return ToDict
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): ToDict {
+        return new ToDict(
+        );
+    }
+
+    /**
+     * @return ToDict
+     */
+    public static function sample(): ToDict {
+        return new ToDict(
+        );
+    }
+}
+
 // This is an autogenerated file:ToJSON
 
 class ToJSON {
@@ -42338,6 +42805,51 @@ class UnionClass {
     }
 }
 
+// This is an autogenerated file:UnmarshalJSON
+
+class UnmarshalJSON {
+
+    /**
+     */
+    public function __construct() {
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return true;
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return UnmarshalJSON
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): UnmarshalJSON {
+        return new UnmarshalJSON(
+        );
+    }
+
+    /**
+     * @return UnmarshalJSON
+     */
+    public static function sample(): UnmarshalJSON {
+        return new UnmarshalJSON(
+        );
+    }
+}
+
 // This is an autogenerated file:Unowned
 
 class Unowned {
diff --git a/base/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
index db46bce..8cd5493 100644
--- a/base/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
+++ b/head/schema-pike/test/inputs/schema/keyword-enum.schema/default/TopLevel.pmod
@@ -154,6 +154,7 @@ enum Enum {
     FORMAT_EXCEPTION = "FormatException",                          // json: "FormatException"
     FRIEND = "friend",                                             // json: "friend"
     FROM = "from",                                                 // json: "from"
+    FROM_DICT = "from_dict",                                       // json: "from_dict"
     FROM_JSON = "from_json",                                       // json: "from_json"
     FUNC = "func",                                                 // json: "func"
     FUNCTION = "function",                                         // json: "function"
@@ -213,6 +214,7 @@ enum Enum {
     LOCK = "lock",                                                 // json: "lock"
     LONG = "long",                                                 // json: "long"
     MAP = "map",                                                   // json: "map"
+    MARSHAL_JSON = "MarshalJSON",                                  // json: "MarshalJSON"
     MAP_ENTRY = "MapEntry",                                        // json: "MapEntry"
     METADATA_PROPERTY_HANDLING = "metadata_property_handling",     // json: "metadata_property_handling"
     MODULE = "module",                                             // json: "module"
@@ -332,6 +334,7 @@ enum Enum {
     TO_JSON = "to_json",                                           // json: "to_json"
     TOP_LEVEL = "top_level",                                       // json: "top_level"
     TO_STRING = "toString",                                        // json: "toString"
+    TO_DICT = "to_dict",                                           // json: "to_dict"
     TRANSIENT = "transient",                                       // json: "transient"
     TRUE = "True",                                                 // json: "True"
     ENUM_TRUE = "true",                                            // json: "true"
@@ -348,6 +351,7 @@ enum Enum {
     UNCHECKED = "unchecked",                                       // json: "unchecked"
     UNDEFINED = "undefined",                                       // json: "undefined"
     UNION = "union",                                               // json: "union"
+    UNMARSHAL_JSON = "UnmarshalJSON",                              // json: "UnmarshalJSON"
     USE_SERIALIZERS = "UseSerializers",                            // json: "UseSerializers"
     UNOWNED = "unowned",                                           // json: "unowned"
     UNSAFE = "unsafe",                                             // json: "unsafe"
@@ -375,5 +379,5 @@ enum Enum {
 }
 
 Enum Enum_from_JSON(mixed json) {
-    if(!zero_type(json)&&json != "_"&&json != "_Bool"&&json != "_Complex"&&json != "_Imaginery"&&json != "abstract"&&json != "alignas"&&json != "alignof"&&json != "and"&&json != "and_eq"&&json != "any"&&json != "Any"&&json != "array"&&json != "as"&&json != "asm"&&json != "assert"&&json != "associatedtype"&&json != "associativity"&&json != "async"&&json != "atomic"&&json != "atomic_cancel"&&json != "atomic_commit"&&json != "atomic_noexcept"&&json != "auto"&&json != "await"&&json != "base"&&json != "bitand"&&json != "bitor"&&json != "BOOL"&&json != "bool"&&json != "boolean"&&json != "break"&&json != "bycopy"&&json != "byref"&&json != "byte"&&json != "Calendar"&&json != "case"&&json != "catch"&&json != "chan"&&json != "char"&&json != "char16_t"&&json != "char32_t"&&json != "checked"&&json != "class"&&json != "Class"&&json != "clone"&&json != "co_await"&&json != "co_return"&&json != "co_yield"&&json != "Codable"&&json != "CodingKey"&&json != "CodingKeys"&&json != "compl"&&json != "concept"&&json != "console"&&json != "const"&&json != "const_cast"&&json != "constexpr"&&json != "constructor"&&json != "continue"&&json != "convenience"&&json != "convert"&&json != "converter"&&json != "CultureInfo"&&json != "date"&&json != "date_parse_handling"&&json != "DateFormatter"&&json != "DateOnly"&&json != "DateOnlyConverter"&&json != "DateTime"&&json != "DateTimeStyles"&&json != "debugger"&&json != "decimal"&&json != "declare"&&json != "decltype"&&json != "decode_string"&&json != "Decoder"&&json != "DecodingError"&&json != "def"&&json != "default"&&json != "defer"&&json != "deinit"&&json != "del"&&json != "delegate"&&json != "delete"&&json != "dict"&&json != "dictionary"&&json != "didSet"&&json != "do"&&json != "double"&&json != "dynamic"&&json != "dynamic_cast"&&json != "elif"&&json != "else"&&json != "encode_quick_type"&&json != "Encoder"&&json != "enum"&&json != "EnumValues"&&json != "Equatable"&&json != "equalityContract"&&json != "event"&&json != "except"&&json != "exception"&&json != "explicit"&&json != "export"&&json != "exposing"&&json != "extends"&&json != "extension"&&json != "extern"&&json != "fallthrough"&&json != "false"&&json != "False"&&json != "fileprivate"&&json != "final"&&json != "finally"&&json != "fixed"&&json != "float"&&json != "for"&&json != "foreach"&&json != "FormatException"&&json != "friend"&&json != "from"&&json != "from_json"&&json != "func"&&json != "function"&&json != "get"&&json != "global"&&json != "go"&&json != "goto"&&json != "guard"&&json != "Hashable"&&json != "hashCode"&&json != "Hasher"&&json != "hasOwnProperty"&&json != "id"&&json != "if"&&json != "IMP"&&json != "implements"&&json != "implicit"&&json != "import"&&json != "in"&&json != "indirect"&&json != "infix"&&json != "init"&&json != "inline"&&json != "inout"&&json != "instanceof"&&json != "int"&&json != "interface"&&json != "internal"&&json != "IsoDateTimeOffsetConverter"&&json != "iterable"&&json != "is"&&json != "jdec"&&json != "jenc"&&json != "jpipe"&&json != "json"&&json != "json_converter"&&json != "json_serializer"&&json != "json_token"&&json != "json_writer"&&json != "JSONAny"&&json != "JSONCodingKey"&&json != "JSONDecoder"&&json != "JSONEncoder"&&json != "JsonException"&&json != "JsonGenerator"&&json != "JsonNode"&&json != "JSONNull"&&json != "JsonParser"&&json != "JsonReader"&&json != "JsonTokenType"&&json != "lambda"&&json != "lazy"&&json != "left"&&json != "let"&&json != "list"&&json != "Locale"&&json != "lock"&&json != "long"&&json != "map"&&json != "MapEntry"&&json != "metadata_property_handling"&&json != "module"&&json != "mutable"&&json != "mutating"&&json != "namespace"&&json != "native"&&json != "new"&&json != "newtonsoft"&&json != "nil"&&json != "NO"&&json != "noexcept"&&json != "nonatomic"&&json != "none"&&json != "None"&&json != "nonlocal"&&json != "nonmutating"&&json != "NSObject"&&json != "noSuchMethod"&&json != "not"&&json != "not_eq"&&json != "NSError"&&json != "NSString"&&json != "NULL"&&json != "null"&&json != "nullptr"&&json != "number"&&json != "object"&&json != "ObjectMapper"&&json != "of"&&json != "oneway"&&json != "open"&&json != "operator"&&json != "optional"&&json != "or"&&json != "or_eq"&&json != "out"&&json != "override"&&json != "package"&&json != "params"&&json != "pass"&&json != "port"&&json != "postfix"&&json != "precedence"&&json != "prefix"&&json != "print"&&json != "printf"&&json != "printMembers"&&json != "private"&&json != "protected"&&json != "Protocol"&&json != "protocol"&&json != "public"&&json != "quicktype"&&json != "raise"&&json != "range"&&json != "readonly"&&json != "ref"&&json != "RegExp"&&json != "register"&&json != "reinterpret_cast"&&json != "repeat"&&json != "require"&&json != "required"&&json != "requires"&&json != "restrict"&&json != "retain"&&json != "rethrows"&&json != "return"&&json != "right"&&json != "runtimeType"&&json != "s"&&json != "sbyte"&&json != "sealed"&&json != "SEL"&&json != "select"&&json != "Self"&&json != "Serializable"&&json != "self"&&json != "Sendable"&&json != "serialize"&&json != "SerialName"&&json != "KSerializer"&&json != "PrimitiveKind"&&json != "SerialDescriptor"&&json != "SerializerProvider"&&json != "set"&&json != "short"&&json != "signed"&&json != "SimpleModule"&&json != "sizeof"&&json != "stackalloc"&&json != "Standards"&&json != "static"&&json != "static_assert"&&json != "static_cast"&&json != "StdDeserializer"&&json != "StdSerializer"&&json != "strictfp"&&json != "string"&&json != "struct"&&json != "subscript"&&json != "super"&&json != "switch"&&json != "symbol"&&json != "synchronized"&&json != "system"&&json != "template"&&json != "then"&&json != "this"&&json != "thread_local"&&json != "throw"&&json != "throws"&&json != "TimeOnly"&&json != "TimeOnlyConverter"&&json != "TimeZone"&&json != "to_json"&&json != "top_level"&&json != "toString"&&json != "transient"&&json != "True"&&json != "true"&&json != "try"&&json != "Type"&&json != "type"&&json != "typealias"&&json != "typedef"&&json != "typeid"&&json != "typename"&&json != "typeof"&&json != "uint"&&json != "ulong"&&json != "unchecked"&&json != "undefined"&&json != "union"&&json != "UseSerializers"&&json != "unowned"&&json != "unsafe"&&json != "unsigned"&&json != "ushort"&&json != "using"&&json != "Utf8JsonReader"&&json != "Utf8JsonWriter"&&json != "UUID"&&json != "var"&&json != "virtual"&&json != "void"&&json != "volatile"&&json != "wchar_t"&&json != "weak"&&json != "where"&&json != "while"&&json != "willSet"&&json != "with"&&json != "xor"&&json != "xor_eq"&&json != "YES"&&json != "yield"&&json != "dummy")error("enum");return json;
+    if(!zero_type(json)&&json != "_"&&json != "_Bool"&&json != "_Complex"&&json != "_Imaginery"&&json != "abstract"&&json != "alignas"&&json != "alignof"&&json != "and"&&json != "and_eq"&&json != "any"&&json != "Any"&&json != "array"&&json != "as"&&json != "asm"&&json != "assert"&&json != "associatedtype"&&json != "associativity"&&json != "async"&&json != "atomic"&&json != "atomic_cancel"&&json != "atomic_commit"&&json != "atomic_noexcept"&&json != "auto"&&json != "await"&&json != "base"&&json != "bitand"&&json != "bitor"&&json != "BOOL"&&json != "bool"&&json != "boolean"&&json != "break"&&json != "bycopy"&&json != "byref"&&json != "byte"&&json != "Calendar"&&json != "case"&&json != "catch"&&json != "chan"&&json != "char"&&json != "char16_t"&&json != "char32_t"&&json != "checked"&&json != "class"&&json != "Class"&&json != "clone"&&json != "co_await"&&json != "co_return"&&json != "co_yield"&&json != "Codable"&&json != "CodingKey"&&json != "CodingKeys"&&json != "compl"&&json != "concept"&&json != "console"&&json != "const"&&json != "const_cast"&&json != "constexpr"&&json != "constructor"&&json != "continue"&&json != "convenience"&&json != "convert"&&json != "converter"&&json != "CultureInfo"&&json != "date"&&json != "date_parse_handling"&&json != "DateFormatter"&&json != "DateOnly"&&json != "DateOnlyConverter"&&json != "DateTime"&&json != "DateTimeStyles"&&json != "debugger"&&json != "decimal"&&json != "declare"&&json != "decltype"&&json != "decode_string"&&json != "Decoder"&&json != "DecodingError"&&json != "def"&&json != "default"&&json != "defer"&&json != "deinit"&&json != "del"&&json != "delegate"&&json != "delete"&&json != "dict"&&json != "dictionary"&&json != "didSet"&&json != "do"&&json != "double"&&json != "dynamic"&&json != "dynamic_cast"&&json != "elif"&&json != "else"&&json != "encode_quick_type"&&json != "Encoder"&&json != "enum"&&json != "EnumValues"&&json != "Equatable"&&json != "equalityContract"&&json != "event"&&json != "except"&&json != "exception"&&json != "explicit"&&json != "export"&&json != "exposing"&&json != "extends"&&json != "extension"&&json != "extern"&&json != "fallthrough"&&json != "false"&&json != "False"&&json != "fileprivate"&&json != "final"&&json != "finally"&&json != "fixed"&&json != "float"&&json != "for"&&json != "foreach"&&json != "FormatException"&&json != "friend"&&json != "from"&&json != "from_dict"&&json != "from_json"&&json != "func"&&json != "function"&&json != "get"&&json != "global"&&json != "go"&&json != "goto"&&json != "guard"&&json != "Hashable"&&json != "hashCode"&&json != "Hasher"&&json != "hasOwnProperty"&&json != "id"&&json != "if"&&json != "IMP"&&json != "implements"&&json != "implicit"&&json != "import"&&json != "in"&&json != "indirect"&&json != "infix"&&json != "init"&&json != "inline"&&json != "inout"&&json != "instanceof"&&json != "int"&&json != "interface"&&json != "internal"&&json != "IsoDateTimeOffsetConverter"&&json != "iterable"&&json != "is"&&json != "jdec"&&json != "jenc"&&json != "jpipe"&&json != "json"&&json != "json_converter"&&json != "json_serializer"&&json != "json_token"&&json != "json_writer"&&json != "JSONAny"&&json != "JSONCodingKey"&&json != "JSONDecoder"&&json != "JSONEncoder"&&json != "JsonException"&&json != "JsonGenerator"&&json != "JsonNode"&&json != "JSONNull"&&json != "JsonParser"&&json != "JsonReader"&&json != "JsonTokenType"&&json != "lambda"&&json != "lazy"&&json != "left"&&json != "let"&&json != "list"&&json != "Locale"&&json != "lock"&&json != "long"&&json != "map"&&json != "MarshalJSON"&&json != "MapEntry"&&json != "metadata_property_handling"&&json != "module"&&json != "mutable"&&json != "mutating"&&json != "namespace"&&json != "native"&&json != "new"&&json != "newtonsoft"&&json != "nil"&&json != "NO"&&json != "noexcept"&&json != "nonatomic"&&json != "none"&&json != "None"&&json != "nonlocal"&&json != "nonmutating"&&json != "NSObject"&&json != "noSuchMethod"&&json != "not"&&json != "not_eq"&&json != "NSError"&&json != "NSString"&&json != "NULL"&&json != "null"&&json != "nullptr"&&json != "number"&&json != "object"&&json != "ObjectMapper"&&json != "of"&&json != "oneway"&&json != "open"&&json != "operator"&&json != "optional"&&json != "or"&&json != "or_eq"&&json != "out"&&json != "override"&&json != "package"&&json != "params"&&json != "pass"&&json != "port"&&json != "postfix"&&json != "precedence"&&json != "prefix"&&json != "print"&&json != "printf"&&json != "printMembers"&&json != "private"&&json != "protected"&&json != "Protocol"&&json != "protocol"&&json != "public"&&json != "quicktype"&&json != "raise"&&json != "range"&&json != "readonly"&&json != "ref"&&json != "RegExp"&&json != "register"&&json != "reinterpret_cast"&&json != "repeat"&&json != "require"&&json != "required"&&json != "requires"&&json != "restrict"&&json != "retain"&&json != "rethrows"&&json != "return"&&json != "right"&&json != "runtimeType"&&json != "s"&&json != "sbyte"&&json != "sealed"&&json != "SEL"&&json != "select"&&json != "Self"&&json != "Serializable"&&json != "self"&&json != "Sendable"&&json != "serialize"&&json != "SerialName"&&json != "KSerializer"&&json != "PrimitiveKind"&&json != "SerialDescriptor"&&json != "SerializerProvider"&&json != "set"&&json != "short"&&json != "signed"&&json != "SimpleModule"&&json != "sizeof"&&json != "stackalloc"&&json != "Standards"&&json != "static"&&json != "static_assert"&&json != "static_cast"&&json != "StdDeserializer"&&json != "StdSerializer"&&json != "strictfp"&&json != "string"&&json != "struct"&&json != "subscript"&&json != "super"&&json != "switch"&&json != "symbol"&&json != "synchronized"&&json != "system"&&json != "template"&&json != "then"&&json != "this"&&json != "thread_local"&&json != "throw"&&json != "throws"&&json != "TimeOnly"&&json != "TimeOnlyConverter"&&json != "TimeZone"&&json != "to_json"&&json != "top_level"&&json != "toString"&&json != "to_dict"&&json != "transient"&&json != "True"&&json != "true"&&json != "try"&&json != "Type"&&json != "type"&&json != "typealias"&&json != "typedef"&&json != "typeid"&&json != "typename"&&json != "typeof"&&json != "uint"&&json != "ulong"&&json != "unchecked"&&json != "undefined"&&json != "union"&&json != "UnmarshalJSON"&&json != "UseSerializers"&&json != "unowned"&&json != "unsafe"&&json != "unsigned"&&json != "ushort"&&json != "using"&&json != "Utf8JsonReader"&&json != "Utf8JsonWriter"&&json != "UUID"&&json != "var"&&json != "virtual"&&json != "void"&&json != "volatile"&&json != "wchar_t"&&json != "weak"&&json != "where"&&json != "while"&&json != "willSet"&&json != "with"&&json != "xor"&&json != "xor_eq"&&json != "YES"&&json != "yield"&&json != "dummy")error("enum");return json;
 }
diff --git a/base/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
index dcc7d8b..22bbd77 100644
--- a/base/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
+++ b/head/schema-pike/test/inputs/schema/keyword-unions.schema/default/TopLevel.pmod
@@ -135,6 +135,7 @@ class TopLevel {
     UnionFormatException            format_exception;               // json: "FormatException"
     UnionFriend                     friend;                         // json: "friend"
     UnionFrom                       from;                           // json: "from"
+    UnionFromDict                   from_dict;                      // json: "from_dict"
     UnionFromJson                   from_json;                      // json: "from_json"
     UnionFunc                       func;                           // json: "func"
     UnionFunction                   top_level_function;             // json: "function"
@@ -196,6 +197,7 @@ class TopLevel {
     UnionLong                       long;                           // json: "long"
     UnionMap                        map;                            // json: "map"
     UnionMapEntry                   map_entry;                      // json: "MapEntry"
+    UnionMarshalJson                marshal_json;                   // json: "MarshalJSON"
     UnionMetadataPropertyHandling   metadata_property_handling;     // json: "metadata_property_handling"
     UnionModule                     module;                         // json: "module"
     UnionMutable                    mutable;                        // json: "mutable"
@@ -310,6 +312,7 @@ class TopLevel {
     UnionTimeOnly                   time_only;                      // json: "TimeOnly"
     UnionTimeOnlyConverter          time_only_converter;            // json: "TimeOnlyConverter"
     UnionTimeZone                   time_zone;                      // json: "TimeZone"
+    UnionToDict                     to_dict;                        // json: "to_dict"
     UnionToJson                     to_json;                        // json: "to_json"
     UnionTopLevel                   top_level;                      // json: "top_level"
     UnionToString                   to_string;                      // json: "toString"
@@ -329,6 +332,7 @@ class TopLevel {
     UnionUnchecked                  unchecked;                      // json: "unchecked"
     UnionUndefined                  undefined;                      // json: "undefined"
     UnionUnionUnion                 union;                          // json: "union"
+    UnionUnmarshalJson              unmarshal_json;                 // json: "UnmarshalJSON"
     UnionUnowned                    unowned;                        // json: "unowned"
     UnionUnsafe                     unsafe;                         // json: "unsafe"
     UnionUnsigned                   unsigned;                       // json: "unsigned"
@@ -477,6 +481,7 @@ class TopLevel {
             "FormatException" : format_exception,
             "friend" : friend,
             "from" : from,
+            "from_dict" : from_dict,
             "from_json" : from_json,
             "func" : func,
             "function" : top_level_function,
@@ -538,6 +543,7 @@ class TopLevel {
             "long" : long,
             "map" : map,
             "MapEntry" : map_entry,
+            "MarshalJSON" : marshal_json,
             "metadata_property_handling" : metadata_property_handling,
             "module" : module,
             "mutable" : mutable,
@@ -652,6 +658,7 @@ class TopLevel {
             "TimeOnly" : time_only,
             "TimeOnlyConverter" : time_only_converter,
             "TimeZone" : time_zone,
+            "to_dict" : to_dict,
             "to_json" : to_json,
             "top_level" : top_level,
             "toString" : to_string,
@@ -671,6 +678,7 @@ class TopLevel {
             "unchecked" : unchecked,
             "undefined" : undefined,
             "union" : union,
+            "UnmarshalJSON" : unmarshal_json,
             "unowned" : unowned,
             "unsafe" : unsafe,
             "unsigned" : unsigned,
@@ -946,6 +954,8 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.friend = json["friend"];
     if (arrayp(json["from"])) error("Unexpected array");
     retval.from = json["from"];
+    if (arrayp(json["from_dict"])) error("Unexpected array");
+    retval.from_dict = json["from_dict"];
     if (arrayp(json["from_json"])) error("Unexpected array");
     retval.from_json = json["from_json"];
     if (arrayp(json["func"])) error("Unexpected array");
@@ -1068,6 +1078,8 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.map = json["map"];
     if (arrayp(json["MapEntry"])) error("Unexpected array");
     retval.map_entry = json["MapEntry"];
+    if (arrayp(json["MarshalJSON"])) error("Unexpected array");
+    retval.marshal_json = json["MarshalJSON"];
     if (arrayp(json["metadata_property_handling"])) error("Unexpected array");
     retval.metadata_property_handling = json["metadata_property_handling"];
     if (arrayp(json["module"])) error("Unexpected array");
@@ -1296,6 +1308,8 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.time_only_converter = json["TimeOnlyConverter"];
     if (arrayp(json["TimeZone"])) error("Unexpected array");
     retval.time_zone = json["TimeZone"];
+    if (arrayp(json["to_dict"])) error("Unexpected array");
+    retval.to_dict = json["to_dict"];
     if (arrayp(json["to_json"])) error("Unexpected array");
     retval.to_json = json["to_json"];
     if (arrayp(json["top_level"])) error("Unexpected array");
@@ -1334,6 +1348,8 @@ TopLevel TopLevel_from_JSON(mixed json) {
     retval.undefined = json["undefined"];
     if (arrayp(json["union"])) error("Unexpected array");
     retval.union = json["union"];
+    if (arrayp(json["UnmarshalJSON"])) error("Unexpected array");
+    retval.unmarshal_json = json["UnmarshalJSON"];
     if (arrayp(json["unowned"])) error("Unexpected array");
     retval.unowned = json["unowned"];
     if (arrayp(json["unsafe"])) error("Unexpected array");
@@ -3540,6 +3556,28 @@ From From_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|FromDict UnionFromDict;
+
+UnionFromDict UnionFromDict_from_JSON(mixed json) {
+    return json;
+}
+
+class FromDict {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+FromDict FromDict_from_JSON(mixed json) {
+    FromDict retval = FromDict();
+
+    return retval;
+}
+
 typedef float|FromJson UnionFromJson;
 
 UnionFromJson UnionFromJson_from_JSON(mixed json) {
@@ -4750,6 +4788,28 @@ MapEntry MapEntry_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|MarshalJson UnionMarshalJson;
+
+UnionMarshalJson UnionMarshalJson_from_JSON(mixed json) {
+    return json;
+}
+
+class MarshalJson {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+MarshalJson MarshalJson_from_JSON(mixed json) {
+    MarshalJson retval = MarshalJson();
+
+    return retval;
+}
+
 typedef float|MetadataPropertyHandling UnionMetadataPropertyHandling;
 
 UnionMetadataPropertyHandling UnionMetadataPropertyHandling_from_JSON(mixed json) {
@@ -7016,6 +7076,28 @@ TimeZone TimeZone_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|ToDict UnionToDict;
+
+UnionToDict UnionToDict_from_JSON(mixed json) {
+    return json;
+}
+
+class ToDict {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+ToDict ToDict_from_JSON(mixed json) {
+    ToDict retval = ToDict();
+
+    return retval;
+}
+
 typedef float|ToJson UnionToJson;
 
 UnionToJson UnionToJson_from_JSON(mixed json) {
@@ -8358,6 +8440,28 @@ Union Union_from_JSON(mixed json) {
     return retval;
 }
 
+typedef float|UnmarshalJson UnionUnmarshalJson;
+
+UnionUnmarshalJson UnionUnmarshalJson_from_JSON(mixed json) {
+    return json;
+}
+
+class UnmarshalJson {
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+UnmarshalJson UnmarshalJson_from_JSON(mixed json) {
+    UnmarshalJson retval = UnmarshalJson();
+
+    return retval;
+}
+
 typedef float|Unowned UnionUnowned;
 
 UnionUnowned UnionUnowned_from_JSON(mixed json) {
diff --git a/base/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
index 00946be..695beaa 100644
--- a/base/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
+++ b/head/schema-python/test/inputs/schema/keyword-enum.schema/default/quicktype.py
@@ -153,6 +153,7 @@ class EnumEnum(Enum):
     FORMAT_EXCEPTION = "FormatException"
     FRIEND = "friend"
     FROM = "from"
+    FROM_DICT = "from_dict"
     FROM_JSON = "from_json"
     FUNC = "func"
     FUNCTION = "function"
@@ -212,6 +213,7 @@ class EnumEnum(Enum):
     LOCK = "lock"
     LONG = "long"
     MAP = "map"
+    MARSHAL_JSON = "MarshalJSON"
     MAP_ENTRY = "MapEntry"
     METADATA_PROPERTY_HANDLING = "metadata_property_handling"
     MODULE = "module"
@@ -331,6 +333,7 @@ class EnumEnum(Enum):
     TO_JSON = "to_json"
     TOP_LEVEL = "top_level"
     TO_STRING = "toString"
+    TO_DICT = "to_dict"
     TRANSIENT = "transient"
     TRUE = "True"
     ENUM_TRUE = "true"
@@ -347,6 +350,7 @@ class EnumEnum(Enum):
     UNCHECKED = "unchecked"
     UNDEFINED = "undefined"
     UNION = "union"
+    UNMARSHAL_JSON = "UnmarshalJSON"
     USE_SERIALIZERS = "UseSerializers"
     UNOWNED = "unowned"
     UNSAFE = "unsafe"
diff --git a/base/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
index 0c5eaeb..3f868fc 100644
--- a/base/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
+++ b/head/schema-python/test/inputs/schema/keyword-unions.schema/default/quicktype.py
@@ -2162,6 +2162,20 @@ class MapEntry:
         return result
 
 
+@dataclass
+class MarshalJSON:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'MarshalJSON':
+        assert isinstance(obj, dict)
+        return MarshalJSON()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class MetadataPropertyHandling:
     pass
@@ -3968,6 +3982,20 @@ class From:
         return result
 
 
+@dataclass
+class FromDict:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'FromDict':
+        assert isinstance(obj, dict)
+        return FromDict()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class Global:
     pass
@@ -4220,6 +4248,20 @@ class Self:
         return result
 
 
+@dataclass
+class ToDict:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'ToDict':
+        assert isinstance(obj, dict)
+        return ToDict()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class UnionTrueTrue:
     pass
@@ -4486,6 +4528,20 @@ class UnionClass:
         return result
 
 
+@dataclass
+class UnmarshalJSON:
+    pass
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'UnmarshalJSON':
+        assert isinstance(obj, dict)
+        return UnmarshalJSON()
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        return result
+
+
 @dataclass
 class Unowned:
     pass
@@ -4890,6 +4946,7 @@ class TopLevel:
     format_exception: float | FormatException | None = None
     friend: float | Friend | None = None
     top_level_from: float | From | None = None
+    top_level_from_dict: float | FromDict | None = None
     from_json: float | FromJSON | None = None
     func: float | Func | None = None
     function: float | Function | None = None
@@ -4951,6 +5008,7 @@ class TopLevel:
     long: float | Long | None = None
     map: float | Map | None = None
     map_entry: float | MapEntry | None = None
+    marshal_json: float | MarshalJSON | None = None
     metadata_property_handling: float | MetadataPropertyHandling | None = None
     module: float | Module | None = None
     mutable: float | Mutable | None = None
@@ -5065,6 +5123,7 @@ class TopLevel:
     time_only: float | TimeOnly | None = None
     time_only_converter: float | TimeOnlyConverter | None = None
     time_zone: float | TimeZone | None = None
+    top_level_to_dict: float | ToDict | None = None
     to_json: float | ToJSON | None = None
     top_level: float | TopLevelClass | None = None
     to_string: float | ToString | None = None
@@ -5084,6 +5143,7 @@ class TopLevel:
     unchecked: float | Unchecked | None = None
     undefined: float | Undefined | None = None
     union: float | UnionClass | None = None
+    unmarshal_json: float | UnmarshalJSON | None = None
     unowned: float | Unowned | None = None
     unsafe: float | Unsafe | None = None
     unsigned: float | Unsigned | None = None
@@ -5233,6 +5293,7 @@ class TopLevel:
         format_exception = from_union([from_float, FormatException.from_dict, from_none], obj.get("FormatException"))
         friend = from_union([from_float, Friend.from_dict, from_none], obj.get("friend"))
         top_level_from = from_union([from_float, From.from_dict, from_none], obj.get("from"))
+        top_level_from_dict = from_union([from_float, FromDict.from_dict, from_none], obj.get("from_dict"))
         from_json = from_union([from_float, FromJSON.from_dict, from_none], obj.get("from_json"))
         func = from_union([from_float, Func.from_dict, from_none], obj.get("func"))
         function = from_union([from_float, Function.from_dict, from_none], obj.get("function"))
@@ -5294,6 +5355,7 @@ class TopLevel:
         long = from_union([from_float, Long.from_dict, from_none], obj.get("long"))
         map = from_union([from_float, Map.from_dict, from_none], obj.get("map"))
         map_entry = from_union([from_float, MapEntry.from_dict, from_none], obj.get("MapEntry"))
+        marshal_json = from_union([from_float, MarshalJSON.from_dict, from_none], obj.get("MarshalJSON"))
         metadata_property_handling = from_union([from_float, MetadataPropertyHandling.from_dict, from_none], obj.get("metadata_property_handling"))
         module = from_union([from_float, Module.from_dict, from_none], obj.get("module"))
         mutable = from_union([from_float, Mutable.from_dict, from_none], obj.get("mutable"))
@@ -5408,6 +5470,7 @@ class TopLevel:
         time_only = from_union([from_float, TimeOnly.from_dict, from_none], obj.get("TimeOnly"))
         time_only_converter = from_union([from_float, TimeOnlyConverter.from_dict, from_none], obj.get("TimeOnlyConverter"))
         time_zone = from_union([from_float, TimeZone.from_dict, from_none], obj.get("TimeZone"))
+        top_level_to_dict = from_union([from_float, ToDict.from_dict, from_none], obj.get("to_dict"))
         to_json = from_union([from_float, ToJSON.from_dict, from_none], obj.get("to_json"))
         top_level = from_union([from_float, TopLevelClass.from_dict, from_none], obj.get("top_level"))
         to_string = from_union([from_float, ToString.from_dict, from_none], obj.get("toString"))
@@ -5427,6 +5490,7 @@ class TopLevel:
         unchecked = from_union([from_float, Unchecked.from_dict, from_none], obj.get("unchecked"))
         undefined = from_union([from_float, Undefined.from_dict, from_none], obj.get("undefined"))
         union = from_union([from_float, UnionClass.from_dict, from_none], obj.get("union"))
+        unmarshal_json = from_union([from_float, UnmarshalJSON.from_dict, from_none], obj.get("UnmarshalJSON"))
         unowned = from_union([from_float, Unowned.from_dict, from_none], obj.get("unowned"))
         unsafe = from_union([from_float, Unsafe.from_dict, from_none], obj.get("unsafe"))
         unsigned = from_union([from_float, Unsigned.from_dict, from_none], obj.get("unsigned"))
@@ -5450,7 +5514,7 @@ class TopLevel:
         xor_eq = from_union([from_float, XorEq.from_dict, from_none], obj.get("xor_eq"))
         yes = from_union([from_float, Yes.from_dict, from_none], obj.get("YES"))
         top_level_yield = from_union([from_float, Yield.from_dict, from_none], obj.get("yield"))
-        return TopLevel(empty, purple_bool, complex, imaginery, abstract, alignas, alignof, top_level_and, and_eq, top_level_any, any, array, top_level_as, asm, top_level_assert, associatedtype, associativity, top_level_async, atomic, atomic_cancel, atomic_commit, atomic_noexcept, auto, top_level_await, base, bitand, bitor, top_level_bool, fluffy_bool, boolean, top_level_break, bycopy, byref, byte, calendar, case, catch, chan, char, char16_t, char32_t, checked, purple_class, top_level_class, clone, co_await, co_return, co_yield, codable, coding_key, coding_keys, compl, concept, console, const, const_cast, constexpr, constructor, top_level_continue, convenience, convert, converter, culture_info, date, date_parse_handling, date_formatter, date_only, date_only_converter, date_time, date_time_styles, debugger, decimal, declare, decltype, decode_string, decoder, decoding_error, top_level_def, default, defer, deinit, top_level_del, delegate, delete, top_level_dict, dictionary, did_set, do, double, dummy, dynamic, dynamic_cast, top_level_elif, top_level_else, encode_quick_type, encoder, enum, enum_values, equality_contract, equatable, event, top_level_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, top_level_false, false, fileprivate, final, top_level_finally, fixed, top_level_float, top_level_for, foreach, format_exception, friend, top_level_from, from_json, func, function, get, top_level_global, go, goto, guard, hashable, hash_code, hasher, has_own_property, id, top_level_if, imp, implements, implicit, top_level_import, top_level_in, indirect, infix, init, inline, inout, instanceof, top_level_int, interface, internal, top_level_is, iso_date_time_offset_converter, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, json_any, json_coding_key, json_decoder, json_encoder, json_exception, json_generator, json_node, json_null, json_parser, json_reader, json_token_type, k_serializer, top_level_lambda, lazy, left, let, list, locale, lock, long, map, map_entry, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, no, noexcept, nonatomic, top_level_none, none, top_level_nonlocal, nonmutating, no_such_method, top_level_not, not_eq, ns_error, ns_object, ns_string, null, top_level_null, nullptr, number, object, object_mapper, of, oneway, open, operator, optional, top_level_or, or_eq, out, override, package, params, top_level_pass, port, postfix, precedence, prefix, primitive_kind, top_level_print, printf, print_members, private, protected, protocol, top_level_protocol, public, quicktype, top_level_raise, range, readonly, ref, reg_exp, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, top_level_return, right, runtime_type, s, sbyte, sealed, sel, select, top_level_self, purple_self, sendable, serial_descriptor, serializable, serialize, serializer_provider, serial_name, set, short, signed, simple_module, sizeof, stackalloc, standards, static, static_assert, static_cast, std_deserializer, std_serializer, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, time_only, time_only_converter, time_zone, to_json, top_level, to_string, transient, true, top_level_true, top_level_try, type, top_level_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unowned, unsafe, unsigned, use_serializers, ushort, using, utf8_json_reader, utf8_json_writer, uuid, var, virtual, void, volatile, wchar_t, weak, where, top_level_while, will_set, top_level_with, xor, xor_eq, yes, top_level_yield)
+        return TopLevel(empty, purple_bool, complex, imaginery, abstract, alignas, alignof, top_level_and, and_eq, top_level_any, any, array, top_level_as, asm, top_level_assert, associatedtype, associativity, top_level_async, atomic, atomic_cancel, atomic_commit, atomic_noexcept, auto, top_level_await, base, bitand, bitor, top_level_bool, fluffy_bool, boolean, top_level_break, bycopy, byref, byte, calendar, case, catch, chan, char, char16_t, char32_t, checked, purple_class, top_level_class, clone, co_await, co_return, co_yield, codable, coding_key, coding_keys, compl, concept, console, const, const_cast, constexpr, constructor, top_level_continue, convenience, convert, converter, culture_info, date, date_parse_handling, date_formatter, date_only, date_only_converter, date_time, date_time_styles, debugger, decimal, declare, decltype, decode_string, decoder, decoding_error, top_level_def, default, defer, deinit, top_level_del, delegate, delete, top_level_dict, dictionary, did_set, do, double, dummy, dynamic, dynamic_cast, top_level_elif, top_level_else, encode_quick_type, encoder, enum, enum_values, equality_contract, equatable, event, top_level_except, exception, explicit, export, exposing, extends, extension, extern, fallthrough, top_level_false, false, fileprivate, final, top_level_finally, fixed, top_level_float, top_level_for, foreach, format_exception, friend, top_level_from, top_level_from_dict, from_json, func, function, get, top_level_global, go, goto, guard, hashable, hash_code, hasher, has_own_property, id, top_level_if, imp, implements, implicit, top_level_import, top_level_in, indirect, infix, init, inline, inout, instanceof, top_level_int, interface, internal, top_level_is, iso_date_time_offset_converter, iterable, jdec, jenc, jpipe, json, json_converter, json_serializer, json_token, json_writer, json_any, json_coding_key, json_decoder, json_encoder, json_exception, json_generator, json_node, json_null, json_parser, json_reader, json_token_type, k_serializer, top_level_lambda, lazy, left, let, list, locale, lock, long, map, map_entry, marshal_json, metadata_property_handling, module, mutable, mutating, namespace, native, new, newtonsoft, nil, no, noexcept, nonatomic, top_level_none, none, top_level_nonlocal, nonmutating, no_such_method, top_level_not, not_eq, ns_error, ns_object, ns_string, null, top_level_null, nullptr, number, object, object_mapper, of, oneway, open, operator, optional, top_level_or, or_eq, out, override, package, params, top_level_pass, port, postfix, precedence, prefix, primitive_kind, top_level_print, printf, print_members, private, protected, protocol, top_level_protocol, public, quicktype, top_level_raise, range, readonly, ref, reg_exp, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, top_level_return, right, runtime_type, s, sbyte, sealed, sel, select, top_level_self, purple_self, sendable, serial_descriptor, serializable, serialize, serializer_provider, serial_name, set, short, signed, simple_module, sizeof, stackalloc, standards, static, static_assert, static_cast, std_deserializer, std_serializer, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, time_only, time_only_converter, time_zone, top_level_to_dict, to_json, top_level, to_string, transient, true, top_level_true, top_level_try, type, top_level_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined, union, unmarshal_json, unowned, unsafe, unsigned, use_serializers, ushort, using, utf8_json_reader, utf8_json_writer, uuid, var, virtual, void, volatile, wchar_t, weak, where, top_level_while, will_set, top_level_with, xor, xor_eq, yes, top_level_yield)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -5698,6 +5762,8 @@ class TopLevel:
             result["friend"] = from_union([to_float, lambda x: to_class(Friend, x), from_none], self.friend)
         if self.top_level_from is not None:
             result["from"] = from_union([to_float, lambda x: to_class(From, x), from_none], self.top_level_from)
+        if self.top_level_from_dict is not None:
+            result["from_dict"] = from_union([to_float, lambda x: to_class(FromDict, x), from_none], self.top_level_from_dict)
         if self.from_json is not None:
             result["from_json"] = from_union([to_float, lambda x: to_class(FromJSON, x), from_none], self.from_json)
         if self.func is not None:
@@ -5820,6 +5886,8 @@ class TopLevel:
             result["map"] = from_union([to_float, lambda x: to_class(Map, x), from_none], self.map)
         if self.map_entry is not None:
             result["MapEntry"] = from_union([to_float, lambda x: to_class(MapEntry, x), from_none], self.map_entry)
+        if self.marshal_json is not None:
+            result["MarshalJSON"] = from_union([to_float, lambda x: to_class(MarshalJSON, x), from_none], self.marshal_json)
         if self.metadata_property_handling is not None:
             result["metadata_property_handling"] = from_union([to_float, lambda x: to_class(MetadataPropertyHandling, x), from_none], self.metadata_property_handling)
         if self.module is not None:
@@ -6048,6 +6116,8 @@ class TopLevel:
             result["TimeOnlyConverter"] = from_union([to_float, lambda x: to_class(TimeOnlyConverter, x), from_none], self.time_only_converter)
         if self.time_zone is not None:
             result["TimeZone"] = from_union([to_float, lambda x: to_class(TimeZone, x), from_none], self.time_zone)
+        if self.top_level_to_dict is not None:
+            result["to_dict"] = from_union([to_float, lambda x: to_class(ToDict, x), from_none], self.top_level_to_dict)
         if self.to_json is not None:
             result["to_json"] = from_union([to_float, lambda x: to_class(ToJSON, x), from_none], self.to_json)
         if self.top_level is not None:
@@ -6086,6 +6156,8 @@ class TopLevel:
             result["undefined"] = from_union([to_float, lambda x: to_class(Undefined, x), from_none], self.undefined)
         if self.union is not None:
             result["union"] = from_union([to_float, lambda x: to_class(UnionClass, x), from_none], self.union)
+        if self.unmarshal_json is not None:
+            result["UnmarshalJSON"] = from_union([to_float, lambda x: to_class(UnmarshalJSON, x), from_none], self.unmarshal_json)
         if self.unowned is not None:
             result["unowned"] = from_union([to_float, lambda x: to_class(Unowned, x), from_none], self.unowned)
         if self.unsafe is not None:
diff --git a/base/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
index 2f8bc98..202f786 100644
--- a/base/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
+++ b/head/schema-ruby/test/inputs/schema/keyword-enum.schema/default/TopLevel.rb
@@ -17,7 +17,7 @@ module Types
 
   Hash   = Strict::Hash
   String = Strict::String
-  Enum   = Strict::String.enum("_", "_Bool", "_Complex", "_Imaginery", "abstract", "alignas", "alignof", "and", "and_eq", "any", "Any", "array", "as", "asm", "assert", "associatedtype", "associativity", "async", "atomic", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "await", "base", "bitand", "bitor", "BOOL", "bool", "boolean", "break", "bycopy", "byref", "byte", "Calendar", "case", "catch", "chan", "char", "char16_t", "char32_t", "checked", "class", "Class", "clone", "co_await", "co_return", "co_yield", "Codable", "CodingKey", "CodingKeys", "compl", "concept", "console", "const", "const_cast", "constexpr", "constructor", "continue", "convenience", "convert", "converter", "CultureInfo", "date", "date_parse_handling", "DateFormatter", "DateOnly", "DateOnlyConverter", "DateTime", "DateTimeStyles", "debugger", "decimal", "declare", "decltype", "decode_string", "Decoder", "DecodingError", "def", "default", "defer", "deinit", "del", "delegate", "delete", "dict", "dictionary", "didSet", "do", "double", "dynamic", "dynamic_cast", "elif", "else", "encode_quick_type", "Encoder", "enum", "EnumValues", "Equatable", "equalityContract", "event", "except", "exception", "explicit", "export", "exposing", "extends", "extension", "extern", "fallthrough", "false", "False", "fileprivate", "final", "finally", "fixed", "float", "for", "foreach", "FormatException", "friend", "from", "from_json", "func", "function", "get", "global", "go", "goto", "guard", "Hashable", "hashCode", "Hasher", "hasOwnProperty", "id", "if", "IMP", "implements", "implicit", "import", "in", "indirect", "infix", "init", "inline", "inout", "instanceof", "int", "interface", "internal", "IsoDateTimeOffsetConverter", "iterable", "is", "jdec", "jenc", "jpipe", "json", "json_converter", "json_serializer", "json_token", "json_writer", "JSONAny", "JSONCodingKey", "JSONDecoder", "JSONEncoder", "JsonException", "JsonGenerator", "JsonNode", "JSONNull", "JsonParser", "JsonReader", "JsonTokenType", "lambda", "lazy", "left", "let", "list", "Locale", "lock", "long", "map", "MapEntry", "metadata_property_handling", "module", "mutable", "mutating", "namespace", "native", "new", "newtonsoft", "nil", "NO", "noexcept", "nonatomic", "none", "None", "nonlocal", "nonmutating", "NSObject", "noSuchMethod", "not", "not_eq", "NSError", "NSString", "NULL", "null", "nullptr", "number", "object", "ObjectMapper", "of", "oneway", "open", "operator", "optional", "or", "or_eq", "out", "override", "package", "params", "pass", "port", "postfix", "precedence", "prefix", "print", "printf", "printMembers", "private", "protected", "Protocol", "protocol", "public", "quicktype", "raise", "range", "readonly", "ref", "RegExp", "register", "reinterpret_cast", "repeat", "require", "required", "requires", "restrict", "retain", "rethrows", "return", "right", "runtimeType", "s", "sbyte", "sealed", "SEL", "select", "Self", "Serializable", "self", "Sendable", "serialize", "SerialName", "KSerializer", "PrimitiveKind", "SerialDescriptor", "SerializerProvider", "set", "short", "signed", "SimpleModule", "sizeof", "stackalloc", "Standards", "static", "static_assert", "static_cast", "StdDeserializer", "StdSerializer", "strictfp", "string", "struct", "subscript", "super", "switch", "symbol", "synchronized", "system", "template", "then", "this", "thread_local", "throw", "throws", "TimeOnly", "TimeOnlyConverter", "TimeZone", "to_json", "top_level", "toString", "transient", "True", "true", "try", "Type", "type", "typealias", "typedef", "typeid", "typename", "typeof", "uint", "ulong", "unchecked", "undefined", "union", "UseSerializers", "unowned", "unsafe", "unsigned", "ushort", "using", "Utf8JsonReader", "Utf8JsonWriter", "UUID", "var", "virtual", "void", "volatile", "wchar_t", "weak", "where", "while", "willSet", "with", "xor", "xor_eq", "YES", "yield", "dummy")
+  Enum   = Strict::String.enum("_", "_Bool", "_Complex", "_Imaginery", "abstract", "alignas", "alignof", "and", "and_eq", "any", "Any", "array", "as", "asm", "assert", "associatedtype", "associativity", "async", "atomic", "atomic_cancel", "atomic_commit", "atomic_noexcept", "auto", "await", "base", "bitand", "bitor", "BOOL", "bool", "boolean", "break", "bycopy", "byref", "byte", "Calendar", "case", "catch", "chan", "char", "char16_t", "char32_t", "checked", "class", "Class", "clone", "co_await", "co_return", "co_yield", "Codable", "CodingKey", "CodingKeys", "compl", "concept", "console", "const", "const_cast", "constexpr", "constructor", "continue", "convenience", "convert", "converter", "CultureInfo", "date", "date_parse_handling", "DateFormatter", "DateOnly", "DateOnlyConverter", "DateTime", "DateTimeStyles", "debugger", "decimal", "declare", "decltype", "decode_string", "Decoder", "DecodingError", "def", "default", "defer", "deinit", "del", "delegate", "delete", "dict", "dictionary", "didSet", "do", "double", "dynamic", "dynamic_cast", "elif", "else", "encode_quick_type", "Encoder", "enum", "EnumValues", "Equatable", "equalityContract", "event", "except", "exception", "explicit", "export", "exposing", "extends", "extension", "extern", "fallthrough", "false", "False", "fileprivate", "final", "finally", "fixed", "float", "for", "foreach", "FormatException", "friend", "from", "from_dict", "from_json", "func", "function", "get", "global", "go", "goto", "guard", "Hashable", "hashCode", "Hasher", "hasOwnProperty", "id", "if", "IMP", "implements", "implicit", "import", "in", "indirect", "infix", "init", "inline", "inout", "instanceof", "int", "interface", "internal", "IsoDateTimeOffsetConverter", "iterable", "is", "jdec", "jenc", "jpipe", "json", "json_converter", "json_serializer", "json_token", "json_writer", "JSONAny", "JSONCodingKey", "JSONDecoder", "JSONEncoder", "JsonException", "JsonGenerator", "JsonNode", "JSONNull", "JsonParser", "JsonReader", "JsonTokenType", "lambda", "lazy", "left", "let", "list", "Locale", "lock", "long", "map", "MarshalJSON", "MapEntry", "metadata_property_handling", "module", "mutable", "mutating", "namespace", "native", "new", "newtonsoft", "nil", "NO", "noexcept", "nonatomic", "none", "None", "nonlocal", "nonmutating", "NSObject", "noSuchMethod", "not", "not_eq", "NSError", "NSString", "NULL", "null", "nullptr", "number", "object", "ObjectMapper", "of", "oneway", "open", "operator", "optional", "or", "or_eq", "out", "override", "package", "params", "pass", "port", "postfix", "precedence", "prefix", "print", "printf", "printMembers", "private", "protected", "Protocol", "protocol", "public", "quicktype", "raise", "range", "readonly", "ref", "RegExp", "register", "reinterpret_cast", "repeat", "require", "required", "requires", "restrict", "retain", "rethrows", "return", "right", "runtimeType", "s", "sbyte", "sealed", "SEL", "select", "Self", "Serializable", "self", "Sendable", "serialize", "SerialName", "KSerializer", "PrimitiveKind", "SerialDescriptor", "SerializerProvider", "set", "short", "signed", "SimpleModule", "sizeof", "stackalloc", "Standards", "static", "static_assert", "static_cast", "StdDeserializer", "StdSerializer", "strictfp", "string", "struct", "subscript", "super", "switch", "symbol", "synchronized", "system", "template", "then", "this", "thread_local", "throw", "throws", "TimeOnly", "TimeOnlyConverter", "TimeZone", "to_json", "top_level", "toString", "to_dict", "transient", "True", "true", "try", "Type", "type", "typealias", "typedef", "typeid", "typename", "typeof", "uint", "ulong", "unchecked", "undefined", "union", "UnmarshalJSON", "UseSerializers", "unowned", "unsafe", "unsigned", "ushort", "using", "Utf8JsonReader", "Utf8JsonWriter", "UUID", "var", "virtual", "void", "volatile", "wchar_t", "weak", "where", "while", "willSet", "with", "xor", "xor_eq", "YES", "yield", "dummy")
 end
 
 module Enum
@@ -142,6 +142,7 @@ module Enum
   FormatException            = "FormatException"
   Friend                     = "friend"
   From                       = "from"
+  FromDict                   = "from_dict"
   FromJSON                   = "from_json"
   Func                       = "func"
   Function                   = "function"
@@ -201,6 +202,7 @@ module Enum
   Lock                       = "lock"
   Long                       = "long"
   Map                        = "map"
+  MarshalJSON                = "MarshalJSON"
   MapEntry                   = "MapEntry"
   MetadataPropertyHandling   = "metadata_property_handling"
   Module                     = "module"
@@ -320,6 +322,7 @@ module Enum
   ToJSON                     = "to_json"
   TopLevel                   = "top_level"
   ToString                   = "toString"
+  ToDict                     = "to_dict"
   Transient                  = "transient"
   True                       = "True"
   EnumTrue                   = "true"
@@ -336,6 +339,7 @@ module Enum
   Unchecked                  = "unchecked"
   Undefined                  = "undefined"
   Union                      = "union"
+  UnmarshalJSON              = "UnmarshalJSON"
   UseSerializers             = "UseSerializers"
   Unowned                    = "unowned"
   Unsafe                     = "unsafe"
diff --git a/base/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
index d4b45aa..89a695d 100644
--- a/base/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
+++ b/head/schema-ruby/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
@@ -5947,6 +5947,63 @@ class UnionFrom < Dry::Struct
   end
 end
 
+class FromDict < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionFromDict < Dry::Struct
+  attribute :double,    Types::Double.optional
+  attribute :from_dict, FromDict.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, from_dict: nil)
+    end
+    begin
+      value = FromDict.from_dynamic!(d)
+      if schema.key(:from_dict).type.right.valid? value
+        return new(from_dict: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif from_dict != nil
+      from_dict.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class FromJSON < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -9310,6 +9367,63 @@ class UnionMapEntry < Dry::Struct
   end
 end
 
+class MarshalJSON < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionMarshalJSON < Dry::Struct
+  attribute :double,       Types::Double.optional
+  attribute :marshal_json, MarshalJSON.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, marshal_json: nil)
+    end
+    begin
+      value = MarshalJSON.from_dynamic!(d)
+      if schema.key(:marshal_json).type.right.valid? value
+        return new(marshal_json: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif marshal_json != nil
+      marshal_json.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class MetadataPropertyHandling < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -14611,6 +14725,63 @@ class UnionTimeZone < Dry::Struct
   end
 end
 
+class ToDict < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionToDict < Dry::Struct
+  attribute :double,  Types::Double.optional
+  attribute :to_dict, ToDict.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, to_dict: nil)
+    end
+    begin
+      value = ToDict.from_dynamic!(d)
+      if schema.key(:to_dict).type.right.valid? value
+        return new(to_dict: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif to_dict != nil
+      to_dict.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class ToString < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -18145,6 +18316,63 @@ class UnionUnionUnion < Dry::Struct
   end
 end
 
+class UnmarshalJSON < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionUnmarshalJSON < Dry::Struct
+  attribute :double,         Types::Double.optional
+  attribute :unmarshal_json, UnmarshalJSON.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, unmarshal_json: nil)
+    end
+    begin
+      value = UnmarshalJSON.from_dynamic!(d)
+      if schema.key(:unmarshal_json).type.right.valid? value
+        return new(unmarshal_json: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif unmarshal_json != nil
+      unmarshal_json.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Unowned < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -19408,6 +19636,7 @@ class TopLevel < Dry::Struct
   attribute :format_exception,               Types.Instance(UnionFormatException).optional
   attribute :friend,                         Types.Instance(UnionFriend).optional
   attribute :from,                           Types.Instance(UnionFrom).optional
+  attribute :from_dict,                      Types.Instance(UnionFromDict).optional
   attribute :from_json,                      Types.Instance(UnionFromJSON).optional
   attribute :func,                           Types.Instance(UnionFunc).optional
   attribute :function,                       Types.Instance(UnionFunction).optional
@@ -19469,6 +19698,7 @@ class TopLevel < Dry::Struct
   attribute :long,                           Types.Instance(UnionLong).optional
   attribute :map,                            Types.Instance(UnionMap).optional
   attribute :map_entry,                      Types.Instance(UnionMapEntry).optional
+  attribute :marshal_json,                   Types.Instance(UnionMarshalJSON).optional
   attribute :metadata_property_handling,     Types.Instance(UnionMetadataPropertyHandling).optional
   attribute :top_level_module,               Types.Instance(UnionModule).optional
   attribute :mutable,                        Types.Instance(UnionMutable).optional
@@ -19583,6 +19813,7 @@ class TopLevel < Dry::Struct
   attribute :time_only,                      Types.Instance(UnionTimeOnly).optional
   attribute :time_only_converter,            Types.Instance(UnionTimeOnlyConverter).optional
   attribute :time_zone,                      Types.Instance(UnionTimeZone).optional
+  attribute :to_dict,                        Types.Instance(UnionToDict).optional
   attribute :top_level_to_json,              Types.Instance(UnionToJSON).optional
   attribute :top_level,                      Types.Instance(UnionTopLevel).optional
   attribute :to_string,                      Types.Instance(UnionToString).optional
@@ -19602,6 +19833,7 @@ class TopLevel < Dry::Struct
   attribute :unchecked,                      Types.Instance(UnionUnchecked).optional
   attribute :undefined,                      Types.Instance(UnionUndefined).optional
   attribute :union,                          Types.Instance(UnionUnionUnion).optional
+  attribute :unmarshal_json,                 Types.Instance(UnionUnmarshalJSON).optional
   attribute :unowned,                        Types.Instance(UnionUnowned).optional
   attribute :unsafe,                         Types.Instance(UnionUnsafe).optional
   attribute :unsigned,                       Types.Instance(UnionUnsigned).optional
@@ -19751,6 +19983,7 @@ class TopLevel < Dry::Struct
       format_exception:               d.key?("FormatException") ? UnionFormatException.from_dynamic!(d["FormatException"]) : nil,
       friend:                         d.key?("friend") ? UnionFriend.from_dynamic!(d["friend"]) : nil,
       from:                           d.key?("from") ? UnionFrom.from_dynamic!(d["from"]) : nil,
+      from_dict:                      d.key?("from_dict") ? UnionFromDict.from_dynamic!(d["from_dict"]) : nil,
       from_json:                      d.key?("from_json") ? UnionFromJSON.from_dynamic!(d["from_json"]) : nil,
       func:                           d.key?("func") ? UnionFunc.from_dynamic!(d["func"]) : nil,
       function:                       d.key?("function") ? UnionFunction.from_dynamic!(d["function"]) : nil,
@@ -19812,6 +20045,7 @@ class TopLevel < Dry::Struct
       long:                           d.key?("long") ? UnionLong.from_dynamic!(d["long"]) : nil,
       map:                            d.key?("map") ? UnionMap.from_dynamic!(d["map"]) : nil,
       map_entry:                      d.key?("MapEntry") ? UnionMapEntry.from_dynamic!(d["MapEntry"]) : nil,
+      marshal_json:                   d.key?("MarshalJSON") ? UnionMarshalJSON.from_dynamic!(d["MarshalJSON"]) : nil,
       metadata_property_handling:     d.key?("metadata_property_handling") ? UnionMetadataPropertyHandling.from_dynamic!(d["metadata_property_handling"]) : nil,
       top_level_module:               d.key?("module") ? UnionModule.from_dynamic!(d["module"]) : nil,
       mutable:                        d.key?("mutable") ? UnionMutable.from_dynamic!(d["mutable"]) : nil,
@@ -19926,6 +20160,7 @@ class TopLevel < Dry::Struct
       time_only:                      d.key?("TimeOnly") ? UnionTimeOnly.from_dynamic!(d["TimeOnly"]) : nil,
       time_only_converter:            d.key?("TimeOnlyConverter") ? UnionTimeOnlyConverter.from_dynamic!(d["TimeOnlyConverter"]) : nil,
       time_zone:                      d.key?("TimeZone") ? UnionTimeZone.from_dynamic!(d["TimeZone"]) : nil,
+      to_dict:                        d.key?("to_dict") ? UnionToDict.from_dynamic!(d["to_dict"]) : nil,
       top_level_to_json:              d.key?("to_json") ? UnionToJSON.from_dynamic!(d["to_json"]) : nil,
       top_level:                      d.key?("top_level") ? UnionTopLevel.from_dynamic!(d["top_level"]) : nil,
       to_string:                      d.key?("toString") ? UnionToString.from_dynamic!(d["toString"]) : nil,
@@ -19945,6 +20180,7 @@ class TopLevel < Dry::Struct
       unchecked:                      d.key?("unchecked") ? UnionUnchecked.from_dynamic!(d["unchecked"]) : nil,
       undefined:                      d.key?("undefined") ? UnionUndefined.from_dynamic!(d["undefined"]) : nil,
       union:                          d.key?("union") ? UnionUnionUnion.from_dynamic!(d["union"]) : nil,
+      unmarshal_json:                 d.key?("UnmarshalJSON") ? UnionUnmarshalJSON.from_dynamic!(d["UnmarshalJSON"]) : nil,
       unowned:                        d.key?("unowned") ? UnionUnowned.from_dynamic!(d["unowned"]) : nil,
       unsafe:                         d.key?("unsafe") ? UnionUnsafe.from_dynamic!(d["unsafe"]) : nil,
       unsigned:                       d.key?("unsigned") ? UnionUnsigned.from_dynamic!(d["unsigned"]) : nil,
@@ -20099,6 +20335,7 @@ class TopLevel < Dry::Struct
       "FormatException"            => format_exception&.to_dynamic,
       "friend"                     => friend&.to_dynamic,
       "from"                       => from&.to_dynamic,
+      "from_dict"                  => from_dict&.to_dynamic,
       "from_json"                  => from_json&.to_dynamic,
       "func"                       => func&.to_dynamic,
       "function"                   => function&.to_dynamic,
@@ -20160,6 +20397,7 @@ class TopLevel < Dry::Struct
       "long"                       => long&.to_dynamic,
       "map"                        => map&.to_dynamic,
       "MapEntry"                   => map_entry&.to_dynamic,
+      "MarshalJSON"                => marshal_json&.to_dynamic,
       "metadata_property_handling" => metadata_property_handling&.to_dynamic,
       "module"                     => top_level_module&.to_dynamic,
       "mutable"                    => mutable&.to_dynamic,
@@ -20274,6 +20512,7 @@ class TopLevel < Dry::Struct
       "TimeOnly"                   => time_only&.to_dynamic,
       "TimeOnlyConverter"          => time_only_converter&.to_dynamic,
       "TimeZone"                   => time_zone&.to_dynamic,
+      "to_dict"                    => to_dict&.to_dynamic,
       "to_json"                    => top_level_to_json&.to_dynamic,
       "top_level"                  => top_level&.to_dynamic,
       "toString"                   => to_string&.to_dynamic,
@@ -20293,6 +20532,7 @@ class TopLevel < Dry::Struct
       "unchecked"                  => unchecked&.to_dynamic,
       "undefined"                  => undefined&.to_dynamic,
       "union"                      => union&.to_dynamic,
+      "UnmarshalJSON"              => unmarshal_json&.to_dynamic,
       "unowned"                    => unowned&.to_dynamic,
       "unsafe"                     => unsafe&.to_dynamic,
       "unsigned"                   => unsigned&.to_dynamic,
diff --git a/base/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb b/head/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
index d4b45aa..89a695d 100644
--- a/base/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
+++ b/head/schema-ruby-syntax/test/inputs/schema/keyword-unions.schema/default/TopLevel.rb
@@ -5947,6 +5947,63 @@ class UnionFrom < Dry::Struct
   end
 end
 
+class FromDict < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionFromDict < Dry::Struct
+  attribute :double,    Types::Double.optional
+  attribute :from_dict, FromDict.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, from_dict: nil)
+    end
+    begin
+      value = FromDict.from_dynamic!(d)
+      if schema.key(:from_dict).type.right.valid? value
+        return new(from_dict: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif from_dict != nil
+      from_dict.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class FromJSON < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -9310,6 +9367,63 @@ class UnionMapEntry < Dry::Struct
   end
 end
 
+class MarshalJSON < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionMarshalJSON < Dry::Struct
+  attribute :double,       Types::Double.optional
+  attribute :marshal_json, MarshalJSON.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, marshal_json: nil)
+    end
+    begin
+      value = MarshalJSON.from_dynamic!(d)
+      if schema.key(:marshal_json).type.right.valid? value
+        return new(marshal_json: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif marshal_json != nil
+      marshal_json.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class MetadataPropertyHandling < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -14611,6 +14725,63 @@ class UnionTimeZone < Dry::Struct
   end
 end
 
+class ToDict < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionToDict < Dry::Struct
+  attribute :double,  Types::Double.optional
+  attribute :to_dict, ToDict.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, to_dict: nil)
+    end
+    begin
+      value = ToDict.from_dynamic!(d)
+      if schema.key(:to_dict).type.right.valid? value
+        return new(to_dict: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif to_dict != nil
+      to_dict.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class ToString < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -18145,6 +18316,63 @@ class UnionUnionUnion < Dry::Struct
   end
 end
 
+class UnmarshalJSON < Dry::Struct
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
+class UnionUnmarshalJSON < Dry::Struct
+  attribute :double,         Types::Double.optional
+  attribute :unmarshal_json, UnmarshalJSON.optional
+
+  def self.from_dynamic!(d)
+    if schema.key(:double).type.right.valid? d
+      return new(double: d, unmarshal_json: nil)
+    end
+    begin
+      value = UnmarshalJSON.from_dynamic!(d)
+      if schema.key(:unmarshal_json).type.right.valid? value
+        return new(unmarshal_json: value, double: nil)
+      end
+    rescue
+    end
+    raise "Invalid union"
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    if double != nil
+      double
+    elsif unmarshal_json != nil
+      unmarshal_json.to_dynamic
+    end
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Unowned < Dry::Struct
 
   def self.from_dynamic!(d)
@@ -19408,6 +19636,7 @@ class TopLevel < Dry::Struct
   attribute :format_exception,               Types.Instance(UnionFormatException).optional
   attribute :friend,                         Types.Instance(UnionFriend).optional
   attribute :from,                           Types.Instance(UnionFrom).optional
+  attribute :from_dict,                      Types.Instance(UnionFromDict).optional
   attribute :from_json,                      Types.Instance(UnionFromJSON).optional
   attribute :func,                           Types.Instance(UnionFunc).optional
   attribute :function,                       Types.Instance(UnionFunction).optional
@@ -19469,6 +19698,7 @@ class TopLevel < Dry::Struct
   attribute :long,                           Types.Instance(UnionLong).optional
   attribute :map,                            Types.Instance(UnionMap).optional
   attribute :map_entry,                      Types.Instance(UnionMapEntry).optional
+  attribute :marshal_json,                   Types.Instance(UnionMarshalJSON).optional
   attribute :metadata_property_handling,     Types.Instance(UnionMetadataPropertyHandling).optional
   attribute :top_level_module,               Types.Instance(UnionModule).optional
   attribute :mutable,                        Types.Instance(UnionMutable).optional
@@ -19583,6 +19813,7 @@ class TopLevel < Dry::Struct
   attribute :time_only,                      Types.Instance(UnionTimeOnly).optional
   attribute :time_only_converter,            Types.Instance(UnionTimeOnlyConverter).optional
   attribute :time_zone,                      Types.Instance(UnionTimeZone).optional
+  attribute :to_dict,                        Types.Instance(UnionToDict).optional
   attribute :top_level_to_json,              Types.Instance(UnionToJSON).optional
   attribute :top_level,                      Types.Instance(UnionTopLevel).optional
   attribute :to_string,                      Types.Instance(UnionToString).optional
@@ -19602,6 +19833,7 @@ class TopLevel < Dry::Struct
   attribute :unchecked,                      Types.Instance(UnionUnchecked).optional
   attribute :undefined,                      Types.Instance(UnionUndefined).optional
   attribute :union,                          Types.Instance(UnionUnionUnion).optional
+  attribute :unmarshal_json,                 Types.Instance(UnionUnmarshalJSON).optional
   attribute :unowned,                        Types.Instance(UnionUnowned).optional
   attribute :unsafe,                         Types.Instance(UnionUnsafe).optional
   attribute :unsigned,                       Types.Instance(UnionUnsigned).optional
@@ -19751,6 +19983,7 @@ class TopLevel < Dry::Struct
       format_exception:               d.key?("FormatException") ? UnionFormatException.from_dynamic!(d["FormatException"]) : nil,
       friend:                         d.key?("friend") ? UnionFriend.from_dynamic!(d["friend"]) : nil,
       from:                           d.key?("from") ? UnionFrom.from_dynamic!(d["from"]) : nil,
+      from_dict:                      d.key?("from_dict") ? UnionFromDict.from_dynamic!(d["from_dict"]) : nil,
       from_json:                      d.key?("from_json") ? UnionFromJSON.from_dynamic!(d["from_json"]) : nil,
       func:                           d.key?("func") ? UnionFunc.from_dynamic!(d["func"]) : nil,
       function:                       d.key?("function") ? UnionFunction.from_dynamic!(d["function"]) : nil,
@@ -19812,6 +20045,7 @@ class TopLevel < Dry::Struct
       long:                           d.key?("long") ? UnionLong.from_dynamic!(d["long"]) : nil,
       map:                            d.key?("map") ? UnionMap.from_dynamic!(d["map"]) : nil,
       map_entry:                      d.key?("MapEntry") ? UnionMapEntry.from_dynamic!(d["MapEntry"]) : nil,
+      marshal_json:                   d.key?("MarshalJSON") ? UnionMarshalJSON.from_dynamic!(d["MarshalJSON"]) : nil,
       metadata_property_handling:     d.key?("metadata_property_handling") ? UnionMetadataPropertyHandling.from_dynamic!(d["metadata_property_handling"]) : nil,
       top_level_module:               d.key?("module") ? UnionModule.from_dynamic!(d["module"]) : nil,
       mutable:                        d.key?("mutable") ? UnionMutable.from_dynamic!(d["mutable"]) : nil,
@@ -19926,6 +20160,7 @@ class TopLevel < Dry::Struct
       time_only:                      d.key?("TimeOnly") ? UnionTimeOnly.from_dynamic!(d["TimeOnly"]) : nil,
       time_only_converter:            d.key?("TimeOnlyConverter") ? UnionTimeOnlyConverter.from_dynamic!(d["TimeOnlyConverter"]) : nil,
       time_zone:                      d.key?("TimeZone") ? UnionTimeZone.from_dynamic!(d["TimeZone"]) : nil,
+      to_dict:                        d.key?("to_dict") ? UnionToDict.from_dynamic!(d["to_dict"]) : nil,
       top_level_to_json:              d.key?("to_json") ? UnionToJSON.from_dynamic!(d["to_json"]) : nil,
       top_level:                      d.key?("top_level") ? UnionTopLevel.from_dynamic!(d["top_level"]) : nil,
       to_string:                      d.key?("toString") ? UnionToString.from_dynamic!(d["toString"]) : nil,
@@ -19945,6 +20180,7 @@ class TopLevel < Dry::Struct
       unchecked:                      d.key?("unchecked") ? UnionUnchecked.from_dynamic!(d["unchecked"]) : nil,
       undefined:                      d.key?("undefined") ? UnionUndefined.from_dynamic!(d["undefined"]) : nil,
       union:                          d.key?("union") ? UnionUnionUnion.from_dynamic!(d["union"]) : nil,
+      unmarshal_json:                 d.key?("UnmarshalJSON") ? UnionUnmarshalJSON.from_dynamic!(d["UnmarshalJSON"]) : nil,
       unowned:                        d.key?("unowned") ? UnionUnowned.from_dynamic!(d["unowned"]) : nil,
       unsafe:                         d.key?("unsafe") ? UnionUnsafe.from_dynamic!(d["unsafe"]) : nil,
       unsigned:                       d.key?("unsigned") ? UnionUnsigned.from_dynamic!(d["unsigned"]) : nil,
@@ -20099,6 +20335,7 @@ class TopLevel < Dry::Struct
       "FormatException"            => format_exception&.to_dynamic,
       "friend"                     => friend&.to_dynamic,
       "from"                       => from&.to_dynamic,
+      "from_dict"                  => from_dict&.to_dynamic,
       "from_json"                  => from_json&.to_dynamic,
       "func"                       => func&.to_dynamic,
       "function"                   => function&.to_dynamic,
@@ -20160,6 +20397,7 @@ class TopLevel < Dry::Struct
       "long"                       => long&.to_dynamic,
       "map"                        => map&.to_dynamic,
       "MapEntry"                   => map_entry&.to_dynamic,
+      "MarshalJSON"                => marshal_json&.to_dynamic,
       "metadata_property_handling" => metadata_property_handling&.to_dynamic,
       "module"                     => top_level_module&.to_dynamic,
       "mutable"                    => mutable&.to_dynamic,
@@ -20274,6 +20512,7 @@ class TopLevel < Dry::Struct
       "TimeOnly"                   => time_only&.to_dynamic,
       "TimeOnlyConverter"          => time_only_converter&.to_dynamic,
       "TimeZone"                   => time_zone&.to_dynamic,
+      "to_dict"                    => to_dict&.to_dynamic,
       "to_json"                    => top_level_to_json&.to_dynamic,
       "top_level"                  => top_level&.to_dynamic,
       "toString"                   => to_string&.to_dynamic,
@@ -20293,6 +20532,7 @@ class TopLevel < Dry::Struct
       "unchecked"                  => unchecked&.to_dynamic,
       "undefined"                  => undefined&.to_dynamic,
       "union"                      => union&.to_dynamic,
+      "UnmarshalJSON"              => unmarshal_json&.to_dynamic,
       "unowned"                    => unowned&.to_dynamic,
       "unsafe"                     => unsafe&.to_dynamic,
       "unsigned"                   => unsigned&.to_dynamic,
diff --git a/base/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
index df50a60..58b177f 100644
--- a/base/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
+++ b/head/schema-rust/test/inputs/schema/keyword-enum.schema/default/module_under_test.rs
@@ -305,6 +305,9 @@ pub enum Enum {
 
     From,
 
+    #[serde(rename = "from_dict")]
+    FromDict,
+
     #[serde(rename = "from_json")]
     FromJson,
 
@@ -446,6 +449,9 @@ pub enum Enum {
 
     Map,
 
+    #[serde(rename = "MarshalJSON")]
+    MarshalJson,
+
     #[serde(rename = "MapEntry")]
     MapEntry,
 
@@ -729,6 +735,9 @@ pub enum Enum {
     #[serde(rename = "toString")]
     ToString,
 
+    #[serde(rename = "to_dict")]
+    ToDict,
+
     Transient,
 
     #[serde(rename = "True")]
@@ -765,6 +774,9 @@ pub enum Enum {
 
     Union,
 
+    #[serde(rename = "UnmarshalJSON")]
+    UnmarshalJson,
+
     #[serde(rename = "UseSerializers")]
     UseSerializers,
 
diff --git a/base/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
index 989dbbb..8f4b3cc 100644
--- a/base/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
+++ b/head/schema-rust/test/inputs/schema/keyword-unions.schema/default/module_under_test.rs
@@ -304,6 +304,8 @@ pub struct TopLevel {
 
     pub from: Option<UnionFrom>,
 
+    pub from_dict: Option<UnionFromDict>,
+
     pub from_json: Option<UnionFromJson>,
 
     pub func: Option<UnionFunc>,
@@ -449,6 +451,9 @@ pub struct TopLevel {
     #[serde(rename = "MapEntry")]
     pub map_entry: Option<UnionMapEntry>,
 
+    #[serde(rename = "MarshalJSON")]
+    pub marshal_json: Option<UnionMarshalJson>,
+
     pub metadata_property_handling: Option<UnionMetadataPropertyHandling>,
 
     pub module: Option<UnionModule>,
@@ -715,6 +720,8 @@ pub struct TopLevel {
     #[serde(rename = "TimeZone")]
     pub time_zone: Option<UnionTimeZone>,
 
+    pub to_dict: Option<UnionToDict>,
+
     pub to_json: Option<UnionToJson>,
 
     pub top_level: Option<UnionTopLevel>,
@@ -760,6 +767,9 @@ pub struct TopLevel {
     #[serde(rename = "union")]
     pub top_level_union: Option<UnionUnionUnion>,
 
+    #[serde(rename = "UnmarshalJSON")]
+    pub unmarshal_json: Option<UnionUnmarshalJson>,
+
     pub unowned: Option<UnionUnowned>,
 
     #[serde(rename = "unsafe")]
@@ -2006,6 +2016,18 @@ pub enum UnionFrom {
 pub struct From {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionFromDict {
+    Double(f64),
+
+    FromDict(FromDict),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct FromDict {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionFromJson {
@@ -2714,6 +2736,18 @@ pub enum UnionMapEntry {
 pub struct MapEntry {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionMarshalJson {
+    Double(f64),
+
+    MarshalJson(MarshalJson),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct MarshalJson {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionMetadataPropertyHandling {
@@ -3998,6 +4032,18 @@ pub enum UnionTimeZone {
 pub struct TimeZone {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionToDict {
+    Double(f64),
+
+    ToDict(ToDict),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct ToDict {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionToJson {
@@ -4658,6 +4704,18 @@ pub enum UnionUndefined {
 pub struct Undefined {
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(untagged)]
+pub enum UnionUnmarshalJson {
+    Double(f64),
+
+    UnmarshalJson(UnmarshalJson),
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct UnmarshalJson {
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 #[serde(untagged)]
 pub enum UnionUnowned {
diff --git a/base/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala b/head/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
index 6760fcb..e731bd0 100644
--- a/base/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
+++ b/head/schema-scala3/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
@@ -133,6 +133,7 @@ enum EnumEnum :
     case FormatException
     case Friend
     case From
+    case FromDict
     case FromJSON
     case Func
     case Function
@@ -192,6 +193,7 @@ enum EnumEnum :
     case Lock
     case EnumLong
     case EnumMap
+    case MarshalJSON
     case MapEntry
     case MetadataPropertyHandling
     case Module
@@ -311,6 +313,7 @@ enum EnumEnum :
     case ToJSON
     case TopLevel
     case ToString
+    case ToDict
     case Transient
     case True
     case EnumTrue
@@ -327,6 +330,7 @@ enum EnumEnum :
     case Unchecked
     case Undefined
     case Union
+    case UnmarshalJSON
     case UseSerializers
     case Unowned
     case Unsafe
@@ -474,6 +478,7 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "FormatException" => scala.Right(EnumEnum.FormatException)
     case "friend" => scala.Right(EnumEnum.Friend)
     case "from" => scala.Right(EnumEnum.From)
+    case "from_dict" => scala.Right(EnumEnum.FromDict)
     case "from_json" => scala.Right(EnumEnum.FromJSON)
     case "func" => scala.Right(EnumEnum.Func)
     case "function" => scala.Right(EnumEnum.Function)
@@ -533,6 +538,7 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "lock" => scala.Right(EnumEnum.Lock)
     case "long" => scala.Right(EnumEnum.EnumLong)
     case "map" => scala.Right(EnumEnum.EnumMap)
+    case "MarshalJSON" => scala.Right(EnumEnum.MarshalJSON)
     case "MapEntry" => scala.Right(EnumEnum.MapEntry)
     case "metadata_property_handling" => scala.Right(EnumEnum.MetadataPropertyHandling)
     case "module" => scala.Right(EnumEnum.Module)
@@ -652,6 +658,7 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "to_json" => scala.Right(EnumEnum.ToJSON)
     case "top_level" => scala.Right(EnumEnum.TopLevel)
     case "toString" => scala.Right(EnumEnum.ToString)
+    case "to_dict" => scala.Right(EnumEnum.ToDict)
     case "transient" => scala.Right(EnumEnum.Transient)
     case "True" => scala.Right(EnumEnum.True)
     case "true" => scala.Right(EnumEnum.EnumTrue)
@@ -668,6 +675,7 @@ given Decoder[EnumEnum] = Decoder.decodeString.emap {
     case "unchecked" => scala.Right(EnumEnum.Unchecked)
     case "undefined" => scala.Right(EnumEnum.Undefined)
     case "union" => scala.Right(EnumEnum.Union)
+    case "UnmarshalJSON" => scala.Right(EnumEnum.UnmarshalJSON)
     case "UseSerializers" => scala.Right(EnumEnum.UseSerializers)
     case "unowned" => scala.Right(EnumEnum.Unowned)
     case "unsafe" => scala.Right(EnumEnum.Unsafe)
@@ -816,6 +824,7 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.FormatException => "FormatException"
     case EnumEnum.Friend => "friend"
     case EnumEnum.From => "from"
+    case EnumEnum.FromDict => "from_dict"
     case EnumEnum.FromJSON => "from_json"
     case EnumEnum.Func => "func"
     case EnumEnum.Function => "function"
@@ -875,6 +884,7 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.Lock => "lock"
     case EnumEnum.EnumLong => "long"
     case EnumEnum.EnumMap => "map"
+    case EnumEnum.MarshalJSON => "MarshalJSON"
     case EnumEnum.MapEntry => "MapEntry"
     case EnumEnum.MetadataPropertyHandling => "metadata_property_handling"
     case EnumEnum.Module => "module"
@@ -994,6 +1004,7 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.ToJSON => "to_json"
     case EnumEnum.TopLevel => "top_level"
     case EnumEnum.ToString => "toString"
+    case EnumEnum.ToDict => "to_dict"
     case EnumEnum.Transient => "transient"
     case EnumEnum.True => "True"
     case EnumEnum.EnumTrue => "true"
@@ -1010,6 +1021,7 @@ given Encoder[EnumEnum] = Encoder.encodeString.contramap {
     case EnumEnum.Unchecked => "unchecked"
     case EnumEnum.Undefined => "undefined"
     case EnumEnum.Union => "union"
+    case EnumEnum.UnmarshalJSON => "UnmarshalJSON"
     case EnumEnum.UseSerializers => "UseSerializers"
     case EnumEnum.Unowned => "unowned"
     case EnumEnum.Unsafe => "unsafe"
diff --git a/base/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala b/head/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
index 88b58d2..3ebbc64 100644
--- a/base/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
+++ b/head/schema-scala3-upickle/test/inputs/schema/keyword-enum.schema/default/TopLevel.scala
@@ -204,6 +204,7 @@ enum EnumEnum :
     case FormatException
     case Friend
     case From
+    case FromDict
     case FromJSON
     case Func
     case Function
@@ -263,6 +264,7 @@ enum EnumEnum :
     case Lock
     case EnumLong
     case EnumMap
+    case MarshalJSON
     case MapEntry
     case MetadataPropertyHandling
     case Module
@@ -382,6 +384,7 @@ enum EnumEnum :
     case ToJSON
     case TopLevel
     case ToString
+    case ToDict
     case Transient
     case True
     case EnumTrue
@@ -398,6 +401,7 @@ enum EnumEnum :
     case Unchecked
     case Undefined
     case Union
+    case UnmarshalJSON
     case UseSerializers
     case Unowned
     case Unsafe
@@ -546,6 +550,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.FormatException => "FormatException"
         case EnumEnum.Friend => "friend"
         case EnumEnum.From => "from"
+        case EnumEnum.FromDict => "from_dict"
         case EnumEnum.FromJSON => "from_json"
         case EnumEnum.Func => "func"
         case EnumEnum.Function => "function"
@@ -605,6 +610,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.Lock => "lock"
         case EnumEnum.EnumLong => "long"
         case EnumEnum.EnumMap => "map"
+        case EnumEnum.MarshalJSON => "MarshalJSON"
         case EnumEnum.MapEntry => "MapEntry"
         case EnumEnum.MetadataPropertyHandling => "metadata_property_handling"
         case EnumEnum.Module => "module"
@@ -724,6 +730,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.ToJSON => "to_json"
         case EnumEnum.TopLevel => "top_level"
         case EnumEnum.ToString => "toString"
+        case EnumEnum.ToDict => "to_dict"
         case EnumEnum.Transient => "transient"
         case EnumEnum.True => "True"
         case EnumEnum.EnumTrue => "true"
@@ -740,6 +747,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case EnumEnum.Unchecked => "unchecked"
         case EnumEnum.Undefined => "undefined"
         case EnumEnum.Union => "union"
+        case EnumEnum.UnmarshalJSON => "UnmarshalJSON"
         case EnumEnum.UseSerializers => "UseSerializers"
         case EnumEnum.Unowned => "unowned"
         case EnumEnum.Unsafe => "unsafe"
@@ -887,6 +895,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "FormatException" => EnumEnum.FormatException
         case "friend" => EnumEnum.Friend
         case "from" => EnumEnum.From
+        case "from_dict" => EnumEnum.FromDict
         case "from_json" => EnumEnum.FromJSON
         case "func" => EnumEnum.Func
         case "function" => EnumEnum.Function
@@ -946,6 +955,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "lock" => EnumEnum.Lock
         case "long" => EnumEnum.EnumLong
         case "map" => EnumEnum.EnumMap
+        case "MarshalJSON" => EnumEnum.MarshalJSON
         case "MapEntry" => EnumEnum.MapEntry
         case "metadata_property_handling" => EnumEnum.MetadataPropertyHandling
         case "module" => EnumEnum.Module
@@ -1065,6 +1075,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "to_json" => EnumEnum.ToJSON
         case "top_level" => EnumEnum.TopLevel
         case "toString" => EnumEnum.ToString
+        case "to_dict" => EnumEnum.ToDict
         case "transient" => EnumEnum.Transient
         case "True" => EnumEnum.True
         case "true" => EnumEnum.EnumTrue
@@ -1081,6 +1092,7 @@ given OptionPickler.ReadWriter[EnumEnum] = OptionPickler.readwriter[String].bima
         case "unchecked" => EnumEnum.Unchecked
         case "undefined" => EnumEnum.Undefined
         case "union" => EnumEnum.Union
+        case "UnmarshalJSON" => EnumEnum.UnmarshalJSON
         case "UseSerializers" => EnumEnum.UseSerializers
         case "unowned" => EnumEnum.Unowned
         case "unsafe" => EnumEnum.Unsafe
diff --git a/base/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
index 7067f2d..ef15171 100644
--- a/base/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
+++ b/head/schema-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.schema
@@ -137,6 +137,7 @@
                 "FormatException",
                 "friend",
                 "from",
+                "from_dict",
                 "from_json",
                 "func",
                 "function",
@@ -196,6 +197,7 @@
                 "lock",
                 "long",
                 "map",
+                "MarshalJSON",
                 "MapEntry",
                 "metadata_property_handling",
                 "module",
@@ -315,6 +317,7 @@
                 "to_json",
                 "top_level",
                 "toString",
+                "to_dict",
                 "transient",
                 "True",
                 "true",
@@ -331,6 +334,7 @@
                 "unchecked",
                 "undefined",
                 "union",
+                "UnmarshalJSON",
                 "UseSerializers",
                 "unowned",
                 "unsafe",
diff --git a/base/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
index 8a5ee5e..aa58115 100644
--- a/base/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
+++ b/head/schema-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.schema
@@ -372,6 +372,9 @@
                 "from": {
                     "$ref": "#/definitions/UnionFrom"
                 },
+                "from_dict": {
+                    "$ref": "#/definitions/UnionFromDict"
+                },
                 "from_json": {
                     "$ref": "#/definitions/UnionFromJSON"
                 },
@@ -555,6 +558,9 @@
                 "MapEntry": {
                     "$ref": "#/definitions/UnionMapEntry"
                 },
+                "MarshalJSON": {
+                    "$ref": "#/definitions/UnionMarshalJSON"
+                },
                 "metadata_property_handling": {
                     "$ref": "#/definitions/UnionMetadataPropertyHandling"
                 },
@@ -897,6 +903,9 @@
                 "TimeZone": {
                     "$ref": "#/definitions/UnionTimeZone"
                 },
+                "to_dict": {
+                    "$ref": "#/definitions/UnionToDict"
+                },
                 "to_json": {
                     "$ref": "#/definitions/UnionToJSON"
                 },
@@ -954,6 +963,9 @@
                 "union": {
                     "$ref": "#/definitions/UnionUnionUnion"
                 },
+                "UnmarshalJSON": {
+                    "$ref": "#/definitions/UnionUnmarshalJSON"
+                },
                 "unowned": {
                     "$ref": "#/definitions/UnionUnowned"
                 },
@@ -1217,6 +1229,11 @@
             "additionalProperties": false,
             "title": "MapEntry"
         },
+        "MarshalJSON": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "MarshalJSON"
+        },
         "No": {
             "type": "object",
             "additionalProperties": false,
@@ -1352,6 +1369,11 @@
             "additionalProperties": false,
             "title": "UUID"
         },
+        "UnmarshalJSON": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "UnmarshalJSON"
+        },
         "UseSerializers": {
             "type": "object",
             "additionalProperties": false,
@@ -1877,6 +1899,11 @@
             "additionalProperties": false,
             "title": "From"
         },
+        "FromDict": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "FromDict"
+        },
         "FromJSON": {
             "type": "object",
             "additionalProperties": false,
@@ -2547,6 +2574,11 @@
             "additionalProperties": false,
             "title": "ToString"
         },
+        "ToDict": {
+            "type": "object",
+            "additionalProperties": false,
+            "title": "ToDict"
+        },
         "ToJSON": {
             "type": "object",
             "additionalProperties": false,
@@ -3135,6 +3167,17 @@
             ],
             "title": "UnionMapEntry"
         },
+        "UnionMarshalJSON": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/MarshalJSON"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionMarshalJSON"
+        },
         "UnionNO": {
             "anyOf": [
                 {
@@ -3432,6 +3475,17 @@
             ],
             "title": "UnionUUID"
         },
+        "UnionUnmarshalJSON": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/UnmarshalJSON"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionUnmarshalJSON"
+        },
         "UnionUseSerializers": {
             "anyOf": [
                 {
@@ -4587,6 +4641,17 @@
             ],
             "title": "UnionFrom"
         },
+        "UnionFromDict": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/FromDict"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionFromDict"
+        },
         "UnionFromJSON": {
             "anyOf": [
                 {
@@ -6061,6 +6126,17 @@
             ],
             "title": "UnionToString"
         },
+        "UnionToDict": {
+            "anyOf": [
+                {
+                    "$ref": "#/definitions/ToDict"
+                },
+                {
+                    "type": "number"
+                }
+            ],
+            "title": "UnionToDict"
+        },
         "UnionToJSON": {
             "anyOf": [
                 {
diff --git a/base/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
index 168057e..5c3d052 100644
--- a/base/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
+++ b/head/schema-swift/test/inputs/schema/keyword-enum.schema/default/quicktype.swift
@@ -171,6 +171,7 @@ enum Enum: String, Codable {
     case formatException = "FormatException"
     case friend = "friend"
     case from = "from"
+    case fromDict = "from_dict"
     case fromJSON = "from_json"
     case enumFunc = "func"
     case function = "function"
@@ -230,6 +231,7 @@ enum Enum: String, Codable {
     case lock = "lock"
     case long = "long"
     case map = "map"
+    case marshalJSON = "MarshalJSON"
     case mapEntry = "MapEntry"
     case metadataPropertyHandling = "metadata_property_handling"
     case module = "module"
@@ -349,6 +351,7 @@ enum Enum: String, Codable {
     case toJSON = "to_json"
     case topLevel = "top_level"
     case toString = "toString"
+    case toDict = "to_dict"
     case transient = "transient"
     case enumTrue = "True"
     case purpleTrue = "true"
@@ -365,6 +368,7 @@ enum Enum: String, Codable {
     case unchecked = "unchecked"
     case undefined = "undefined"
     case union = "union"
+    case unmarshalJSON = "UnmarshalJSON"
     case useSerializers = "UseSerializers"
     case enumUnowned = "unowned"
     case unsafe = "unsafe"
diff --git a/base/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
index 5f01860..b620a06 100644
--- a/base/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
+++ b/head/schema-swift/test/inputs/schema/keyword-unions.schema/default/quicktype.swift
@@ -129,6 +129,7 @@ struct TopLevel: Codable {
     let formatException: UnionFormatException?
     let friend: UnionFriend?
     let from: UnionFrom?
+    let fromDict: UnionFromDict?
     let fromJSON: UnionFromJSON?
     let topLevelFunc: UnionFunc?
     let function: UnionFunction?
@@ -190,6 +191,7 @@ struct TopLevel: Codable {
     let long: UnionLong?
     let map: UnionMap?
     let mapEntry: UnionMapEntry?
+    let marshalJSON: UnionMarshalJSON?
     let metadataPropertyHandling: UnionMetadataPropertyHandling?
     let module: UnionModule?
     let mutable: UnionMutable?
@@ -304,6 +306,7 @@ struct TopLevel: Codable {
     let timeOnly: UnionTimeOnly?
     let timeOnlyConverter: UnionTimeOnlyConverter?
     let timeZone: UnionTimeZone?
+    let toDict: UnionToDict?
     let toJSON: UnionToJSON?
     let topLevel: UnionTopLevel?
     let toString: UnionToString?
@@ -323,6 +326,7 @@ struct TopLevel: Codable {
     let unchecked: UnionUnchecked?
     let undefined: UnionUndefined?
     let union: UnionUnionUnion?
+    let unmarshalJSON: UnionUnmarshalJSON?
     let topLevelUnowned: UnionUnowned?
     let unsafe: UnionUnsafe?
     let unsigned: UnionUnsigned?
@@ -470,6 +474,7 @@ struct TopLevel: Codable {
         case formatException = "FormatException"
         case friend = "friend"
         case from = "from"
+        case fromDict = "from_dict"
         case fromJSON = "from_json"
         case topLevelFunc = "func"
         case function = "function"
@@ -531,6 +536,7 @@ struct TopLevel: Codable {
         case long = "long"
         case map = "map"
         case mapEntry = "MapEntry"
+        case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
         case mutable = "mutable"
@@ -645,6 +651,7 @@ struct TopLevel: Codable {
         case timeOnly = "TimeOnly"
         case timeOnlyConverter = "TimeOnlyConverter"
         case timeZone = "TimeZone"
+        case toDict = "to_dict"
         case toJSON = "to_json"
         case topLevel = "top_level"
         case toString = "toString"
@@ -664,6 +671,7 @@ struct TopLevel: Codable {
         case unchecked = "unchecked"
         case undefined = "undefined"
         case union = "union"
+        case unmarshalJSON = "UnmarshalJSON"
         case topLevelUnowned = "unowned"
         case unsafe = "unsafe"
         case unsigned = "unsigned"
@@ -831,6 +839,7 @@ extension TopLevel {
         formatException: UnionFormatException?? = nil,
         friend: UnionFriend?? = nil,
         from: UnionFrom?? = nil,
+        fromDict: UnionFromDict?? = nil,
         fromJSON: UnionFromJSON?? = nil,
         topLevelFunc: UnionFunc?? = nil,
         function: UnionFunction?? = nil,
@@ -892,6 +901,7 @@ extension TopLevel {
         long: UnionLong?? = nil,
         map: UnionMap?? = nil,
         mapEntry: UnionMapEntry?? = nil,
+        marshalJSON: UnionMarshalJSON?? = nil,
         metadataPropertyHandling: UnionMetadataPropertyHandling?? = nil,
         module: UnionModule?? = nil,
         mutable: UnionMutable?? = nil,
@@ -1006,6 +1016,7 @@ extension TopLevel {
         timeOnly: UnionTimeOnly?? = nil,
         timeOnlyConverter: UnionTimeOnlyConverter?? = nil,
         timeZone: UnionTimeZone?? = nil,
+        toDict: UnionToDict?? = nil,
         toJSON: UnionToJSON?? = nil,
         topLevel: UnionTopLevel?? = nil,
         toString: UnionToString?? = nil,
@@ -1025,6 +1036,7 @@ extension TopLevel {
         unchecked: UnionUnchecked?? = nil,
         undefined: UnionUndefined?? = nil,
         union: UnionUnionUnion?? = nil,
+        unmarshalJSON: UnionUnmarshalJSON?? = nil,
         topLevelUnowned: UnionUnowned?? = nil,
         unsafe: UnionUnsafe?? = nil,
         unsigned: UnionUnsigned?? = nil,
@@ -1172,6 +1184,7 @@ extension TopLevel {
             formatException: formatException ?? self.formatException,
             friend: friend ?? self.friend,
             from: from ?? self.from,
+            fromDict: fromDict ?? self.fromDict,
             fromJSON: fromJSON ?? self.fromJSON,
             topLevelFunc: topLevelFunc ?? self.topLevelFunc,
             function: function ?? self.function,
@@ -1233,6 +1246,7 @@ extension TopLevel {
             long: long ?? self.long,
             map: map ?? self.map,
             mapEntry: mapEntry ?? self.mapEntry,
+            marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
             mutable: mutable ?? self.mutable,
@@ -1347,6 +1361,7 @@ extension TopLevel {
             timeOnly: timeOnly ?? self.timeOnly,
             timeOnlyConverter: timeOnlyConverter ?? self.timeOnlyConverter,
             timeZone: timeZone ?? self.timeZone,
+            toDict: toDict ?? self.toDict,
             toJSON: toJSON ?? self.toJSON,
             topLevel: topLevel ?? self.topLevel,
             toString: toString ?? self.toString,
@@ -1366,6 +1381,7 @@ extension TopLevel {
             unchecked: unchecked ?? self.unchecked,
             undefined: undefined ?? self.undefined,
             union: union ?? self.union,
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON,
             topLevelUnowned: topLevelUnowned ?? self.topLevelUnowned,
             unsafe: unsafe ?? self.unsafe,
             unsigned: unsigned ?? self.unsigned,
@@ -7862,6 +7878,77 @@ extension From {
     }
 }
 
+enum UnionFromDict: Codable {
+    case double(Double)
+    case fromDict(FromDict)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FromDict.self) {
+            self = .fromDict(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionFromDict.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionFromDict"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fromDict(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FromDict
+struct FromDict: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: FromDict convenience initializers and mutators
+
+extension FromDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FromDict.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(
+    ) -> FromDict {
+        return FromDict(
+        )
+    }
+
+    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)
+    }
+}
+
 enum UnionFromJSON: Codable {
     case double(Double)
     case fromJSON(FromJSON)
@@ -11128,6 +11215,77 @@ extension MapEntry {
     }
 }
 
+enum UnionMarshalJSON: Codable {
+    case double(Double)
+    case marshalJSON(MarshalJSON)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(MarshalJSON.self) {
+            self = .marshalJSON(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionMarshalJSON.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionMarshalJSON"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .marshalJSON(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MarshalJSON
+struct MarshalJSON: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: MarshalJSON convenience initializers and mutators
+
+extension MarshalJSON {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MarshalJSON.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(
+    ) -> MarshalJSON {
+        return MarshalJSON(
+        )
+    }
+
+    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)
+    }
+}
+
 enum UnionMetadataPropertyHandling: Codable {
     case double(Double)
     case metadataPropertyHandling(MetadataPropertyHandling)
@@ -17447,6 +17605,77 @@ extension TimeZoneClass {
     }
 }
 
+enum UnionToDict: Codable {
+    case double(Double)
+    case toDict(ToDict)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(ToDict.self) {
+            self = .toDict(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionToDict.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionToDict"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .toDict(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - ToDict
+struct ToDict: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: ToDict convenience initializers and mutators
+
+extension ToDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ToDict.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(
+    ) -> ToDict {
+        return ToDict(
+        )
+    }
+
+    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)
+    }
+}
+
 enum UnionToJSON: Codable {
     case double(Double)
     case toJSON(ToJSON)
@@ -24192,6 +24421,77 @@ extension Union {
     }
 }
 
+enum UnionUnmarshalJSON: Codable {
+    case double(Double)
+    case unmarshalJSON(UnmarshalJSON)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(UnmarshalJSON.self) {
+            self = .unmarshalJSON(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnionUnmarshalJSON.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnionUnmarshalJSON"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unmarshalJSON(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnmarshalJSON
+struct UnmarshalJSON: Codable {
+    private enum K: String, CodingKey { case unused }
+    init(from decoder: Decoder) throws {
+        _ = try decoder.container(keyedBy: K.self)
+    }
+    init() {
+    }
+}
+
+// MARK: UnmarshalJSON convenience initializers and mutators
+
+extension UnmarshalJSON {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(UnmarshalJSON.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(
+    ) -> UnmarshalJSON {
+        return UnmarshalJSON(
+        )
+    }
+
+    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)
+    }
+}
+
 enum UnionUnsafe: Codable {
     case double(Double)
     case unsafe(Unsafe)
diff --git a/base/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
index eb5c28b..2ffc755 100644
--- a/base/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
index 3a1e7c3..a318088 100644
--- a/base/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
index 293a64c..ce1f66f 100644
--- a/base/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
index 8604379..7276850 100644
--- a/base/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
index f2945d4..1dc7b4c 100644
--- a/base/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
index 1c2f56a..598a503 100644
--- a/base/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
index dedacb8..2da174c 100644
--- a/base/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
index 15df75c..4bdb945 100644
--- a/base/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/head/schema-typescript/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.ts b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.ts
new file mode 100644
index 0000000..131b04c
--- /dev/null
+++ b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/readonly-true--24da4fc107df/TopLevel.ts
@@ -0,0 +1,212 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    readonly map?: Map;
+}
+
+export interface Map {
+    readonly foo?: number;
+    readonly [property: string]: boolean | number | undefined;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = Object.create(null);
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return Object.setPrototypeOf(result, Object.prototype);
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && (typeof val === "string" || val instanceof Date)) return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "map", js: "map", typ: u(undefined, r("Map")) },
+    ], false),
+    "Map": o([
+        { json: "foo", js: "foo", typ: u(undefined, 3.14) },
+    ], true),
+};
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
index 934c40e..a9e173d 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
index 2a64dc5..d15151f 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
index 504b925..2ed28c8 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
index 7b4e86e..6d078d1 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
index 471597a..32c6e6c 100644
--- a/base/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
index 213c0ae..cc1e318 100644
--- a/base/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
index 4b340a1..6f262d0 100644
--- a/base/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
index f2f2b10..ed3394a 100644
--- a/base/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
index 4427935..6e69353 100644
--- a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
index 3b6063c..2516866 100644
--- a/base/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
index 5fa5b81..7d7c6cb 100644
--- a/base/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
index 239362c..4064599 100644
--- a/base/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -155,7 +155,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
index 7c30718..27d37b3 100644
--- a/base/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
index ad5255b..a2cf17f 100644
--- a/base/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
index 12c52ac..1d3e416 100644
--- a/base/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
index faf205e..8a139dd 100644
--- a/base/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
index 0d0c447..67cc648 100644
--- a/base/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
index 368ac2b..3d7eb73 100644
--- a/base/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
index 8ea70f3..cea7a7f 100644
--- a/base/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
index fc206e1..18c06a9 100644
--- a/base/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
index e07edf0..62ecbf8 100644
--- a/base/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
index 29bc994..d496c7b 100644
--- a/base/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
index 444933f..69718b7 100644
--- a/base/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
index 9d2df90..ec8d8ef 100644
--- a/base/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
index 9f7b670..bf6d536 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
index 887b34d..aca00b7 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
index 8345516..64f6edf 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
index 6e4d1cf..3428eab 100644
--- a/base/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
index 30bbefd..d37525e 100644
--- a/base/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
index f9a36b5..d866dcc 100644
--- a/base/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
index 54caffa..5fc61cc 100644
--- a/base/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
index 2d9a3b2..24b54f7 100644
--- a/base/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
index 29a519e..bb7e04c 100644
--- a/base/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
index 9f9b3d6..70ad9d6 100644
--- a/base/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index a2156ac..0cdb6b1 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -12,7 +12,7 @@ export interface TopLevel {
     [property: string]: unknown;
 }
 
-export type Enum = "_" | "_Bool" | "_Complex" | "_Imaginery" | "abstract" | "alignas" | "alignof" | "and" | "and_eq" | "any" | "Any" | "array" | "as" | "asm" | "assert" | "associatedtype" | "associativity" | "async" | "atomic" | "atomic_cancel" | "atomic_commit" | "atomic_noexcept" | "auto" | "await" | "base" | "bitand" | "bitor" | "BOOL" | "bool" | "boolean" | "break" | "bycopy" | "byref" | "byte" | "Calendar" | "case" | "catch" | "chan" | "char" | "char16_t" | "char32_t" | "checked" | "class" | "Class" | "clone" | "co_await" | "co_return" | "co_yield" | "Codable" | "CodingKey" | "CodingKeys" | "compl" | "concept" | "console" | "const" | "const_cast" | "constexpr" | "constructor" | "continue" | "convenience" | "convert" | "converter" | "CultureInfo" | "date" | "date_parse_handling" | "DateFormatter" | "DateOnly" | "DateOnlyConverter" | "DateTime" | "DateTimeStyles" | "debugger" | "decimal" | "declare" | "decltype" | "decode_string" | "Decoder" | "DecodingError" | "def" | "default" | "defer" | "deinit" | "del" | "delegate" | "delete" | "dict" | "dictionary" | "didSet" | "do" | "double" | "dynamic" | "dynamic_cast" | "elif" | "else" | "encode_quick_type" | "Encoder" | "enum" | "EnumValues" | "Equatable" | "equalityContract" | "event" | "except" | "exception" | "explicit" | "export" | "exposing" | "extends" | "extension" | "extern" | "fallthrough" | "false" | "False" | "fileprivate" | "final" | "finally" | "fixed" | "float" | "for" | "foreach" | "FormatException" | "friend" | "from" | "from_json" | "func" | "function" | "get" | "global" | "go" | "goto" | "guard" | "Hashable" | "hashCode" | "Hasher" | "hasOwnProperty" | "id" | "if" | "IMP" | "implements" | "implicit" | "import" | "in" | "indirect" | "infix" | "init" | "inline" | "inout" | "instanceof" | "int" | "interface" | "internal" | "IsoDateTimeOffsetConverter" | "iterable" | "is" | "jdec" | "jenc" | "jpipe" | "json" | "json_converter" | "json_serializer" | "json_token" | "json_writer" | "JSONAny" | "JSONCodingKey" | "JSONDecoder" | "JSONEncoder" | "JsonException" | "JsonGenerator" | "JsonNode" | "JSONNull" | "JsonParser" | "JsonReader" | "JsonTokenType" | "lambda" | "lazy" | "left" | "let" | "list" | "Locale" | "lock" | "long" | "map" | "MapEntry" | "metadata_property_handling" | "module" | "mutable" | "mutating" | "namespace" | "native" | "new" | "newtonsoft" | "nil" | "NO" | "noexcept" | "nonatomic" | "none" | "None" | "nonlocal" | "nonmutating" | "NSObject" | "noSuchMethod" | "not" | "not_eq" | "NSError" | "NSString" | "NULL" | "null" | "nullptr" | "number" | "object" | "ObjectMapper" | "of" | "oneway" | "open" | "operator" | "optional" | "or" | "or_eq" | "out" | "override" | "package" | "params" | "pass" | "port" | "postfix" | "precedence" | "prefix" | "print" | "printf" | "printMembers" | "private" | "protected" | "Protocol" | "protocol" | "public" | "quicktype" | "raise" | "range" | "readonly" | "ref" | "RegExp" | "register" | "reinterpret_cast" | "repeat" | "require" | "required" | "requires" | "restrict" | "retain" | "rethrows" | "return" | "right" | "runtimeType" | "s" | "sbyte" | "sealed" | "SEL" | "select" | "Self" | "Serializable" | "self" | "Sendable" | "serialize" | "SerialName" | "KSerializer" | "PrimitiveKind" | "SerialDescriptor" | "SerializerProvider" | "set" | "short" | "signed" | "SimpleModule" | "sizeof" | "stackalloc" | "Standards" | "static" | "static_assert" | "static_cast" | "StdDeserializer" | "StdSerializer" | "strictfp" | "string" | "struct" | "subscript" | "super" | "switch" | "symbol" | "synchronized" | "system" | "template" | "then" | "this" | "thread_local" | "throw" | "throws" | "TimeOnly" | "TimeOnlyConverter" | "TimeZone" | "to_json" | "top_level" | "toString" | "transient" | "True" | "true" | "try" | "Type" | "type" | "typealias" | "typedef" | "typeid" | "typename" | "typeof" | "uint" | "ulong" | "unchecked" | "undefined" | "union" | "UseSerializers" | "unowned" | "unsafe" | "unsigned" | "ushort" | "using" | "Utf8JsonReader" | "Utf8JsonWriter" | "UUID" | "var" | "virtual" | "void" | "volatile" | "wchar_t" | "weak" | "where" | "while" | "willSet" | "with" | "xor" | "xor_eq" | "YES" | "yield" | "dummy";
+export type Enum = "_" | "_Bool" | "_Complex" | "_Imaginery" | "abstract" | "alignas" | "alignof" | "and" | "and_eq" | "any" | "Any" | "array" | "as" | "asm" | "assert" | "associatedtype" | "associativity" | "async" | "atomic" | "atomic_cancel" | "atomic_commit" | "atomic_noexcept" | "auto" | "await" | "base" | "bitand" | "bitor" | "BOOL" | "bool" | "boolean" | "break" | "bycopy" | "byref" | "byte" | "Calendar" | "case" | "catch" | "chan" | "char" | "char16_t" | "char32_t" | "checked" | "class" | "Class" | "clone" | "co_await" | "co_return" | "co_yield" | "Codable" | "CodingKey" | "CodingKeys" | "compl" | "concept" | "console" | "const" | "const_cast" | "constexpr" | "constructor" | "continue" | "convenience" | "convert" | "converter" | "CultureInfo" | "date" | "date_parse_handling" | "DateFormatter" | "DateOnly" | "DateOnlyConverter" | "DateTime" | "DateTimeStyles" | "debugger" | "decimal" | "declare" | "decltype" | "decode_string" | "Decoder" | "DecodingError" | "def" | "default" | "defer" | "deinit" | "del" | "delegate" | "delete" | "dict" | "dictionary" | "didSet" | "do" | "double" | "dynamic" | "dynamic_cast" | "elif" | "else" | "encode_quick_type" | "Encoder" | "enum" | "EnumValues" | "Equatable" | "equalityContract" | "event" | "except" | "exception" | "explicit" | "export" | "exposing" | "extends" | "extension" | "extern" | "fallthrough" | "false" | "False" | "fileprivate" | "final" | "finally" | "fixed" | "float" | "for" | "foreach" | "FormatException" | "friend" | "from" | "from_dict" | "from_json" | "func" | "function" | "get" | "global" | "go" | "goto" | "guard" | "Hashable" | "hashCode" | "Hasher" | "hasOwnProperty" | "id" | "if" | "IMP" | "implements" | "implicit" | "import" | "in" | "indirect" | "infix" | "init" | "inline" | "inout" | "instanceof" | "int" | "interface" | "internal" | "IsoDateTimeOffsetConverter" | "iterable" | "is" | "jdec" | "jenc" | "jpipe" | "json" | "json_converter" | "json_serializer" | "json_token" | "json_writer" | "JSONAny" | "JSONCodingKey" | "JSONDecoder" | "JSONEncoder" | "JsonException" | "JsonGenerator" | "JsonNode" | "JSONNull" | "JsonParser" | "JsonReader" | "JsonTokenType" | "lambda" | "lazy" | "left" | "let" | "list" | "Locale" | "lock" | "long" | "map" | "MarshalJSON" | "MapEntry" | "metadata_property_handling" | "module" | "mutable" | "mutating" | "namespace" | "native" | "new" | "newtonsoft" | "nil" | "NO" | "noexcept" | "nonatomic" | "none" | "None" | "nonlocal" | "nonmutating" | "NSObject" | "noSuchMethod" | "not" | "not_eq" | "NSError" | "NSString" | "NULL" | "null" | "nullptr" | "number" | "object" | "ObjectMapper" | "of" | "oneway" | "open" | "operator" | "optional" | "or" | "or_eq" | "out" | "override" | "package" | "params" | "pass" | "port" | "postfix" | "precedence" | "prefix" | "print" | "printf" | "printMembers" | "private" | "protected" | "Protocol" | "protocol" | "public" | "quicktype" | "raise" | "range" | "readonly" | "ref" | "RegExp" | "register" | "reinterpret_cast" | "repeat" | "require" | "required" | "requires" | "restrict" | "retain" | "rethrows" | "return" | "right" | "runtimeType" | "s" | "sbyte" | "sealed" | "SEL" | "select" | "Self" | "Serializable" | "self" | "Sendable" | "serialize" | "SerialName" | "KSerializer" | "PrimitiveKind" | "SerialDescriptor" | "SerializerProvider" | "set" | "short" | "signed" | "SimpleModule" | "sizeof" | "stackalloc" | "Standards" | "static" | "static_assert" | "static_cast" | "StdDeserializer" | "StdSerializer" | "strictfp" | "string" | "struct" | "subscript" | "super" | "switch" | "symbol" | "synchronized" | "system" | "template" | "then" | "this" | "thread_local" | "throw" | "throws" | "TimeOnly" | "TimeOnlyConverter" | "TimeZone" | "to_json" | "top_level" | "toString" | "to_dict" | "transient" | "True" | "true" | "try" | "Type" | "type" | "typealias" | "typedef" | "typeid" | "typename" | "typeof" | "uint" | "ulong" | "unchecked" | "undefined" | "union" | "UnmarshalJSON" | "UseSerializers" | "unowned" | "unsafe" | "unsigned" | "ushort" | "using" | "Utf8JsonReader" | "Utf8JsonWriter" | "UUID" | "var" | "virtual" | "void" | "volatile" | "wchar_t" | "weak" | "where" | "while" | "willSet" | "with" | "xor" | "xor_eq" | "YES" | "yield" | "dummy";
 
 // Converts JSON strings to/from your types
 // and asserts the results of JSON.parse at runtime
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -326,6 +326,7 @@ const typeMap: any = {
         "FormatException",
         "friend",
         "from",
+        "from_dict",
         "from_json",
         "func",
         "function",
@@ -385,6 +386,7 @@ const typeMap: any = {
         "lock",
         "long",
         "map",
+        "MarshalJSON",
         "MapEntry",
         "metadata_property_handling",
         "module",
@@ -504,6 +506,7 @@ const typeMap: any = {
         "to_json",
         "top_level",
         "toString",
+        "to_dict",
         "transient",
         "True",
         "true",
@@ -520,6 +523,7 @@ const typeMap: any = {
         "unchecked",
         "undefined",
         "union",
+        "UnmarshalJSON",
         "UseSerializers",
         "unowned",
         "unsafe",
diff --git a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 0674cc9..ac99b38 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -130,6 +130,7 @@ export interface TopLevel {
     FormatException?:            UnionFormatException;
     friend?:                     UnionFriend;
     from?:                       UnionFrom;
+    from_dict?:                  UnionFromDict;
     from_json?:                  UnionFromJSON;
     func?:                       UnionFunc;
     function?:                   UnionFunction;
@@ -191,6 +192,7 @@ export interface TopLevel {
     long?:                       UnionLong;
     map?:                        UnionMap;
     MapEntry?:                   UnionMapEntry;
+    MarshalJSON?:                UnionMarshalJSON;
     metadata_property_handling?: UnionMetadataPropertyHandling;
     module?:                     UnionModule;
     mutable?:                    UnionMutable;
@@ -305,6 +307,7 @@ export interface TopLevel {
     TimeOnly?:                   UnionTimeOnly;
     TimeOnlyConverter?:          UnionTimeOnlyConverter;
     TimeZone?:                   UnionTimeZone;
+    to_dict?:                    UnionToDict;
     to_json?:                    UnionToJSON;
     top_level?:                  UnionTopLevel;
     toString?:                   UnionToString;
@@ -324,6 +327,7 @@ export interface TopLevel {
     unchecked?:                  UnionUnchecked;
     undefined?:                  UnionUndefined;
     union?:                      UnionUnionUnion;
+    UnmarshalJSON?:              UnionUnmarshalJSON;
     unowned?:                    UnionUnowned;
     unsafe?:                     UnionUnsafe;
     unsigned?:                   UnionUnsigned;
@@ -426,6 +430,8 @@ export type UnionLocale = object | number;
 
 export type UnionMapEntry = object | number;
 
+export type UnionMarshalJSON = object | number;
+
 export type UnionNO = object | number;
 
 export type UnionNSError = object | number;
@@ -480,6 +486,8 @@ export type UnionType = object | number;
 
 export type UnionUUID = object | number;
 
+export type UnionUnmarshalJSON = object | number;
+
 export type UnionUseSerializers = object | number;
 
 export type UnionUtf8JSONReader = object | number;
@@ -690,6 +698,8 @@ export type UnionFriend = object | number;
 
 export type UnionFrom = object | number;
 
+export type UnionFromDict = object | number;
+
 export type UnionFromJSON = object | number;
 
 export type UnionFunc = object | number;
@@ -958,6 +968,8 @@ export type UnionThrows = object | number;
 
 export type UnionToString = object | number;
 
+export type UnionToDict = object | number;
+
 export type UnionToJSON = object | number;
 
 export type UnionTopLevel = object | number;
@@ -1122,7 +1134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -1133,7 +1145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -1336,6 +1348,7 @@ const typeMap: any = {
         { json: "FormatException", js: "FormatException", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "friend", js: "friend", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "from", js: "from", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "from_dict", js: "from_dict", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "from_json", js: "from_json", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "func", js: "func", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "function", js: "function", typ: u(undefined, u(m("any"), 3.14)) },
@@ -1397,6 +1410,7 @@ const typeMap: any = {
         { json: "long", js: "long", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "map", js: "map", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "MapEntry", js: "MapEntry", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "metadata_property_handling", js: "metadata_property_handling", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "module", js: "module", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "mutable", js: "mutable", typ: u(undefined, u(m("any"), 3.14)) },
@@ -1511,6 +1525,7 @@ const typeMap: any = {
         { json: "TimeOnly", js: "TimeOnly", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "TimeOnlyConverter", js: "TimeOnlyConverter", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "TimeZone", js: "TimeZone", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "to_dict", js: "to_dict", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "to_json", js: "to_json", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "top_level", js: "top_level", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "toString", js: "toString", typ: u(undefined, u(m("any"), 3.14)) },
@@ -1530,6 +1545,7 @@ const typeMap: any = {
         { json: "unchecked", js: "unchecked", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "undefined", js: "undefined", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "union", js: "union", typ: u(undefined, u(m("any"), 3.14)) },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "unowned", js: "unowned", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "unsafe", js: "unsafe", typ: u(undefined, u(m("any"), 3.14)) },
         { json: "unsigned", js: "unsigned", typ: u(undefined, u(m("any"), 3.14)) },
diff --git a/base/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
index a84e1b1..0d4a93d 100644
--- a/base/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
index a3e9b2b..92968e7 100644
--- a/base/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
index a88d16b..f32ee7c 100644
--- a/base/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
index 4d15bf4..38ea1e9 100644
--- a/base/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
index 74eb204..382c552 100644
--- a/base/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
index ce21e9c..e389dd2 100644
--- a/base/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
index 2ac8eea..8467878 100644
--- a/base/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
index 332f39c..447c0f4 100644
--- a/base/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
index 8501247..e688320 100644
--- a/base/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
index 9dd48da..f4b2d0b 100644
--- a/base/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
index d59ca93..a97ff6f 100644
--- a/base/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
index 8a93edc..ddfe1a6 100644
--- a/base/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
index 21f335b..639c5c1 100644
--- a/base/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
index 1d6ca31..a0dc627 100644
--- a/base/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
index 8cf1679..9fedd98 100644
--- a/base/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
index c6d057f..27c7955 100644
--- a/base/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
index 0f2ad1e..ae1ddaf 100644
--- a/base/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts
index 5d84647..a7d5b12 100644
--- a/base/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
index f596bff..fcd4454 100644
--- a/base/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
index 34dfb4e..42b7441 100644
--- a/base/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -129,7 +129,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
index ee2e5bf..7d62a6f 100644
--- a/base/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
index 3fc7608..357bc8c 100644
--- a/base/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
index 4b340a1..6f262d0 100644
--- a/base/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
index a3e9b2b..92968e7 100644
--- a/base/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
index f2841a1..3fde61d 100644
--- a/base/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
@@ -195,7 +195,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
index 5d752aa..d576a4d 100644
--- a/base/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
index b5a3f4a..6684755 100644
--- a/base/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
index 5d752aa..d576a4d 100644
--- a/base/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
index b76a76b..708768a 100644
--- a/base/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
index 80dbe26..03e0bee 100644
--- a/base/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
index a3e9b2b..92968e7 100644
--- a/base/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
index 208356c..04e082f 100644
--- a/base/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
index bfa6424..7fc1106 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
index 26d77b6..4f1e7f3 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
index eb865a8..cafbb2e 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
index e37cbbe..1a5b401 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
index d90f7f5..7cf3f1c 100644
--- a/base/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
index 90b3f3e..a0dc1d4 100644
--- a/base/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.ts
index 3da4931..717ebd4 100644
--- a/base/schema-typescript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/unicode-codepoint-length.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
index bcd40b1..0eae11d 100644
--- a/base/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
index 3cfb51f..50f99f3 100644
--- a/base/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
index 1ba82fe..0d94449 100644
--- a/base/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
index 052065c..4ac6473 100644
--- a/base/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
index 0ada8e0..b75e56c 100644
--- a/base/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
@@ -5956,7 +5956,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -5967,7 +5967,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index a65db38..12d2acf 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -123,6 +123,7 @@ export const Enum = S.Literal(
     "FormatException",
     "friend",
     "from",
+    "from_dict",
     "from_json",
     "func",
     "function",
@@ -182,6 +183,7 @@ export const Enum = S.Literal(
     "lock",
     "long",
     "map",
+    "MarshalJSON",
     "MapEntry",
     "metadata_property_handling",
     "module",
@@ -301,6 +303,7 @@ export const Enum = S.Literal(
     "to_json",
     "top_level",
     "toString",
+    "to_dict",
     "transient",
     "True",
     "true",
@@ -317,6 +320,7 @@ export const Enum = S.Literal(
     "unchecked",
     "undefined",
     "union",
+    "UnmarshalJSON",
     "UseSerializers",
     "unowned",
     "unsafe",
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index a740754..abf26b4 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -70,6 +70,9 @@ export class Unsafe extends S.Class<Unsafe>("Unsafe")(S.Struct({}).pipe(S.filter
 export class Unowned extends S.Class<Unowned>("Unowned")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class UnmarshalJson extends S.Class<UnmarshalJson>("UnmarshalJson")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class Union extends S.Class<Union>("Union")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -151,6 +154,9 @@ export class ToString extends S.Class<ToString>("ToString")(S.Struct({}).pipe(S.
 export class ToJson extends S.Class<ToJson>("ToJson")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class ToDict extends S.Class<ToDict>("ToDict")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class TimeZone extends S.Class<TimeZone>("TimeZone")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -484,6 +490,9 @@ export class Module extends S.Class<Module>("Module")(S.Struct({}).pipe(S.filter
 export class MetadataPropertyHandling extends S.Class<MetadataPropertyHandling>("MetadataPropertyHandling")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class MarshalJson extends S.Class<MarshalJson>("MarshalJson")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class MapEntry extends S.Class<MapEntry>("MapEntry")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -670,6 +679,9 @@ export class Func extends S.Class<Func>("Func")(S.Struct({}).pipe(S.filter(value
 export class FromJson extends S.Class<FromJson>("FromJson")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
+export class FromDict extends S.Class<FromDict>("FromDict")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
+) {}
+
 export class From extends S.Class<From>("From")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
 ) {}
 
@@ -1138,6 +1150,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "FormatException": S.optional(S.Union(S.Number, FormatException)),
     "friend": S.optional(S.Union(S.Number, Friend)),
     "from": S.optional(S.Union(S.Number, From)),
+    "from_dict": S.optional(S.Union(S.Number, FromDict)),
     "from_json": S.optional(S.Union(S.Number, FromJson)),
     "func": S.optional(S.Union(S.Number, Func)),
     "function": S.optional(S.Union(S.Number, Function)),
@@ -1199,6 +1212,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "long": S.optional(S.Union(S.Number, Long)),
     "map": S.optional(S.Union(S.Number, Map)),
     "MapEntry": S.optional(S.Union(S.Number, MapEntry)),
+    "MarshalJSON": S.optional(S.Union(S.Number, MarshalJson)),
     "metadata_property_handling": S.optional(S.Union(S.Number, MetadataPropertyHandling)),
     "module": S.optional(S.Union(S.Number, Module)),
     "mutable": S.optional(S.Union(S.Number, Mutable)),
@@ -1313,6 +1327,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "TimeOnly": S.optional(S.Union(S.Number, TimeOnly)),
     "TimeOnlyConverter": S.optional(S.Union(S.Number, TimeOnlyConverter)),
     "TimeZone": S.optional(S.Union(S.Number, TimeZone)),
+    "to_dict": S.optional(S.Union(S.Number, ToDict)),
     "to_json": S.optional(S.Union(S.Number, ToJson)),
     "top_level": S.optional(S.Union(S.Number, TopLevelClass)),
     "toString": S.optional(S.Union(S.Number, ToString)),
@@ -1332,6 +1347,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "unchecked": S.optional(S.Union(S.Number, Unchecked)),
     "undefined": S.optional(S.Union(S.Number, Undefined)),
     "union": S.optional(S.Union(S.Number, Union)),
+    "UnmarshalJSON": S.optional(S.Union(S.Number, UnmarshalJson)),
     "unowned": S.optional(S.Union(S.Number, Unowned)),
     "unsafe": S.optional(S.Union(S.Number, Unsafe)),
     "unsigned": S.optional(S.Union(S.Number, Unsigned)),
diff --git a/base/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index 32cbf29..84b7d91 100644
--- a/base/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -123,6 +123,7 @@ export const EnumSchema = z.enum([
     "FormatException",
     "friend",
     "from",
+    "from_dict",
     "from_json",
     "func",
     "function",
@@ -182,6 +183,7 @@ export const EnumSchema = z.enum([
     "lock",
     "long",
     "map",
+    "MarshalJSON",
     "MapEntry",
     "metadata_property_handling",
     "module",
@@ -301,6 +303,7 @@ export const EnumSchema = z.enum([
     "to_json",
     "top_level",
     "toString",
+    "to_dict",
     "transient",
     "True",
     "true",
@@ -317,6 +320,7 @@ export const EnumSchema = z.enum([
     "unchecked",
     "undefined",
     "union",
+    "UnmarshalJSON",
     "UseSerializers",
     "unowned",
     "unsafe",
diff --git a/base/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 7da5fbe..43bb528 100644
--- a/base/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -461,6 +461,10 @@ export const FromSchema = z.object({
 });
 export type From = z.infer<typeof FromSchema>;
 
+export const FromDictSchema = z.object({
+});
+export type FromDict = z.infer<typeof FromDictSchema>;
+
 export const FromJsonSchema = z.object({
 });
 export type FromJson = z.infer<typeof FromJsonSchema>;
@@ -709,6 +713,10 @@ export const MapEntrySchema = z.object({
 });
 export type MapEntry = z.infer<typeof MapEntrySchema>;
 
+export const MarshalJsonSchema = z.object({
+});
+export type MarshalJson = z.infer<typeof MarshalJsonSchema>;
+
 export const MetadataPropertyHandlingSchema = z.object({
 });
 export type MetadataPropertyHandling = z.infer<typeof MetadataPropertyHandlingSchema>;
@@ -1153,6 +1161,10 @@ export const TimeZoneSchema = z.object({
 });
 export type TimeZone = z.infer<typeof TimeZoneSchema>;
 
+export const ToDictSchema = z.object({
+});
+export type ToDict = z.infer<typeof ToDictSchema>;
+
 export const ToJsonSchema = z.object({
 });
 export type ToJson = z.infer<typeof ToJsonSchema>;
@@ -1261,6 +1273,10 @@ export const UnionSchema = z.object({
 });
 export type Union = z.infer<typeof UnionSchema>;
 
+export const UnmarshalJsonSchema = z.object({
+});
+export type UnmarshalJson = z.infer<typeof UnmarshalJsonSchema>;
+
 export const UnownedSchema = z.object({
 });
 export type Unowned = z.infer<typeof UnownedSchema>;
@@ -1476,6 +1492,7 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "FormatException": z.union([FormatExceptionSchema, z.number()]).optional(),
     "friend": z.union([FriendSchema, z.number()]).optional(),
     "from": z.union([FromSchema, z.number()]).optional(),
+    "from_dict": z.union([FromDictSchema, z.number()]).optional(),
     "from_json": z.union([FromJsonSchema, z.number()]).optional(),
     "func": z.union([FuncSchema, z.number()]).optional(),
     "function": z.union([FunctionSchema, z.number()]).optional(),
@@ -1537,6 +1554,7 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "long": z.union([LongSchema, z.number()]).optional(),
     "map": z.union([MapSchema, z.number()]).optional(),
     "MapEntry": z.union([MapEntrySchema, z.number()]).optional(),
+    "MarshalJSON": z.union([MarshalJsonSchema, z.number()]).optional(),
     "metadata_property_handling": z.union([MetadataPropertyHandlingSchema, z.number()]).optional(),
     "module": z.union([ModuleSchema, z.number()]).optional(),
     "mutable": z.union([MutableSchema, z.number()]).optional(),
@@ -1651,6 +1669,7 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "TimeOnly": z.union([TimeOnlySchema, z.number()]).optional(),
     "TimeOnlyConverter": z.union([TimeOnlyConverterSchema, z.number()]).optional(),
     "TimeZone": z.union([TimeZoneSchema, z.number()]).optional(),
+    "to_dict": z.union([ToDictSchema, z.number()]).optional(),
     "to_json": z.union([ToJsonSchema, z.number()]).optional(),
     "top_level": z.union([TopLevelClassSchema, z.number()]).optional(),
     "toString": z.union([ToStringSchema, z.number()]).optional(),
@@ -1670,6 +1689,7 @@ export const TopLevelSchema = z.preprocess(value => typeof value === "object" &&
     "unchecked": z.union([UncheckedSchema, z.number()]).optional(),
     "undefined": z.union([UndefinedSchema, z.number()]).optional(),
     "union": z.union([UnionSchema, z.number()]).optional(),
+    "UnmarshalJSON": z.union([UnmarshalJsonSchema, z.number()]).optional(),
     "unowned": z.union([UnownedSchema, z.number()]).optional(),
     "unsafe": z.union([UnsafeSchema, z.number()]).optional(),
     "unsigned": z.union([UnsignedSchema, z.number()]).optional(),
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 00d6aeb..7bbce26 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
@@ -3234,11 +3234,11 @@ struct Obj2: Codable {
     let formatException: FormatException
     let friend: Friend
     let from: From
+    let fromDict: FromDict
     let fromJSON: FromJSON
     let function: Function
     let global: Global
     let go: Go
-    let goto: Goto
     let obj2Default: Default
     let obj2Defer: Defer
     let obj2Deinit: Deinit
@@ -3301,11 +3301,11 @@ struct Obj2: Codable {
         case formatException = "FormatException"
         case friend = "friend"
         case from = "from"
+        case fromDict = "from_dict"
         case fromJSON = "from_json"
         case function = "function"
         case global = "global"
         case go = "go"
-        case goto = "goto"
         case obj2Default = "default"
         case obj2Defer = "defer"
         case obj2Deinit = "deinit"
@@ -3388,11 +3388,11 @@ extension Obj2 {
         formatException: FormatException? = nil,
         friend: Friend? = nil,
         from: From? = nil,
+        fromDict: FromDict? = nil,
         fromJSON: FromJSON? = nil,
         function: Function? = nil,
         global: Global? = nil,
         go: Go? = nil,
-        goto: Goto? = nil,
         obj2Default: Default? = nil,
         obj2Defer: Defer? = nil,
         obj2Deinit: Deinit? = nil,
@@ -3455,11 +3455,11 @@ extension Obj2 {
             formatException: formatException ?? self.formatException,
             friend: friend ?? self.friend,
             from: from ?? self.from,
+            fromDict: fromDict ?? self.fromDict,
             fromJSON: fromJSON ?? self.fromJSON,
             function: function ?? self.function,
             global: global ?? self.global,
             go: go ?? self.go,
-            goto: goto ?? self.goto,
             obj2Default: obj2Default ?? self.obj2Default,
             obj2Defer: obj2Defer ?? self.obj2Defer,
             obj2Deinit: obj2Deinit ?? self.obj2Deinit,
@@ -5342,6 +5342,50 @@ extension From {
     }
 }
 
+// MARK: - FromDict
+struct FromDict: Codable {
+    let fromDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case fromDict = "from_dict"
+    }
+}
+
+// MARK: FromDict convenience initializers and mutators
+
+extension FromDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FromDict.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(
+        fromDict: Int? = nil
+    ) -> FromDict {
+        return FromDict(
+            fromDict: fromDict ?? self.fromDict
+        )
+    }
+
+    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: - FromJSON
 struct FromJSON: Codable {
     let fromJSON: Int
@@ -5518,50 +5562,6 @@ extension Go {
     }
 }
 
-// MARK: - Goto
-struct Goto: Codable {
-    let goto: Int
-
-    enum CodingKeys: String, CodingKey {
-        case goto = "goto"
-    }
-}
-
-// MARK: Goto convenience initializers and mutators
-
-extension Goto {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Goto.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(
-        goto: Int? = nil
-    ) -> Goto {
-        return Goto(
-            goto: goto ?? self.goto
-        )
-    }
-
-    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: - Default
 struct Default: Codable {
     let defaultDefault: Int
@@ -6313,6 +6313,7 @@ extension FalseClass {
 // MARK: - Obj3
 struct Obj3: Codable {
     let dummy: Int
+    let goto: Goto
     let hasOwnProperty: HasOwnProperty
     let hashCode: HashCode
     let hashable: HashableClass
@@ -6352,6 +6353,7 @@ struct Obj3: Codable {
     let long: Long
     let map: Map
     let mapEntry: MapEntry
+    let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
     let mutable: Mutable
@@ -6360,7 +6362,6 @@ struct Obj3: Codable {
     let new: New
     let newtonsoft: Newtonsoft
     let no: No
-    let noexcept: Noexcept
     let obj3Guard: Guard
     let obj3If: If
     let obj3Import: Import
@@ -6380,6 +6381,7 @@ struct Obj3: Codable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case goto = "goto"
         case hasOwnProperty = "hasOwnProperty"
         case hashCode = "hashCode"
         case hashable = "Hashable"
@@ -6419,6 +6421,7 @@ struct Obj3: Codable {
         case long = "long"
         case map = "map"
         case mapEntry = "MapEntry"
+        case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
         case mutable = "mutable"
@@ -6427,7 +6430,6 @@ struct Obj3: Codable {
         case new = "new"
         case newtonsoft = "newtonsoft"
         case no = "NO"
-        case noexcept = "noexcept"
         case obj3Guard = "guard"
         case obj3If = "if"
         case obj3Import = "import"
@@ -6467,6 +6469,7 @@ extension Obj3 {
 
     func with(
         dummy: Int? = nil,
+        goto: Goto? = nil,
         hasOwnProperty: HasOwnProperty? = nil,
         hashCode: HashCode? = nil,
         hashable: HashableClass? = nil,
@@ -6506,6 +6509,7 @@ extension Obj3 {
         long: Long? = nil,
         map: Map? = nil,
         mapEntry: MapEntry? = nil,
+        marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
         mutable: Mutable? = nil,
@@ -6514,7 +6518,6 @@ extension Obj3 {
         new: New? = nil,
         newtonsoft: Newtonsoft? = nil,
         no: No? = nil,
-        noexcept: Noexcept? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
         obj3Import: Import? = nil,
@@ -6534,6 +6537,7 @@ extension Obj3 {
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
+            goto: goto ?? self.goto,
             hasOwnProperty: hasOwnProperty ?? self.hasOwnProperty,
             hashCode: hashCode ?? self.hashCode,
             hashable: hashable ?? self.hashable,
@@ -6573,6 +6577,7 @@ extension Obj3 {
             long: long ?? self.long,
             map: map ?? self.map,
             mapEntry: mapEntry ?? self.mapEntry,
+            marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
             mutable: mutable ?? self.mutable,
@@ -6581,7 +6586,6 @@ extension Obj3 {
             new: new ?? self.new,
             newtonsoft: newtonsoft ?? self.newtonsoft,
             no: no ?? self.no,
-            noexcept: noexcept ?? self.noexcept,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
             obj3Import: obj3Import ?? self.obj3Import,
@@ -6610,6 +6614,50 @@ extension Obj3 {
     }
 }
 
+// MARK: - Goto
+struct Goto: Codable {
+    let goto: Int
+
+    enum CodingKeys: String, CodingKey {
+        case goto = "goto"
+    }
+}
+
+// MARK: Goto convenience initializers and mutators
+
+extension Goto {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Goto.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(
+        goto: Int? = nil
+    ) -> Goto {
+        return Goto(
+            goto: goto ?? self.goto
+        )
+    }
+
+    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: - HasOwnProperty
 struct HasOwnProperty: Codable {
     let hasOwnProperty: Int
@@ -8326,6 +8374,50 @@ extension MapEntry {
     }
 }
 
+// MARK: - MarshalJSON
+struct MarshalJSON: Codable {
+    let marshalJSON: Int
+
+    enum CodingKeys: String, CodingKey {
+        case marshalJSON = "MarshalJSON"
+    }
+}
+
+// MARK: MarshalJSON convenience initializers and mutators
+
+extension MarshalJSON {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MarshalJSON.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(
+        marshalJSON: Int? = nil
+    ) -> MarshalJSON {
+        return MarshalJSON(
+            marshalJSON: marshalJSON ?? self.marshalJSON
+        )
+    }
+
+    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: - MetadataPropertyHandling
 struct MetadataPropertyHandling: Codable {
     let metadataPropertyHandling: Int
@@ -8678,50 +8770,6 @@ extension No {
     }
 }
 
-// MARK: - Noexcept
-struct Noexcept: Codable {
-    let noexcept: Int
-
-    enum CodingKeys: String, CodingKey {
-        case noexcept = "noexcept"
-    }
-}
-
-// MARK: Noexcept convenience initializers and mutators
-
-extension Noexcept {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Noexcept.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(
-        noexcept: Int? = nil
-    ) -> Noexcept {
-        return Noexcept(
-            noexcept: noexcept ?? self.noexcept
-        )
-    }
-
-    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: - Guard
 struct Guard: Codable {
     let guardGuard: Int
@@ -9430,6 +9478,7 @@ extension Nil {
 struct Obj4: Codable {
     let dummy: Int
     let noSuchMethod: NoSuchMethod
+    let noexcept: Noexcept
     let nonatomic: Nonatomic
     let none: None
     let nonlocal: Nonlocal
@@ -9492,11 +9541,11 @@ struct Obj4: Codable {
     let sbyte: Sbyte
     let sealed: Sealed
     let sel: Sel
-    let select: Select
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case noSuchMethod = "noSuchMethod"
+        case noexcept = "noexcept"
         case nonatomic = "nonatomic"
         case none = "None"
         case nonlocal = "nonlocal"
@@ -9559,7 +9608,6 @@ struct Obj4: Codable {
         case sbyte = "sbyte"
         case sealed = "sealed"
         case sel = "SEL"
-        case select = "select"
     }
 }
 
@@ -9584,6 +9632,7 @@ extension Obj4 {
     func with(
         dummy: Int? = nil,
         noSuchMethod: NoSuchMethod? = nil,
+        noexcept: Noexcept? = nil,
         nonatomic: Nonatomic? = nil,
         none: None? = nil,
         nonlocal: Nonlocal? = nil,
@@ -9645,12 +9694,12 @@ extension Obj4 {
         s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
-        sel: Sel? = nil,
-        select: Select? = nil
+        sel: Sel? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
             noSuchMethod: noSuchMethod ?? self.noSuchMethod,
+            noexcept: noexcept ?? self.noexcept,
             nonatomic: nonatomic ?? self.nonatomic,
             none: none ?? self.none,
             nonlocal: nonlocal ?? self.nonlocal,
@@ -9712,8 +9761,7 @@ extension Obj4 {
             s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
-            sel: sel ?? self.sel,
-            select: select ?? self.select
+            sel: sel ?? self.sel
         )
     }
 
@@ -9770,20 +9818,20 @@ extension NoSuchMethod {
     }
 }
 
-// MARK: - Nonatomic
-struct Nonatomic: Codable {
-    let nonatomic: Int
+// MARK: - Noexcept
+struct Noexcept: Codable {
+    let noexcept: Int
 
     enum CodingKeys: String, CodingKey {
-        case nonatomic = "nonatomic"
+        case noexcept = "noexcept"
     }
 }
 
-// MARK: Nonatomic convenience initializers and mutators
+// MARK: Noexcept convenience initializers and mutators
 
-extension Nonatomic {
+extension Noexcept {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Nonatomic.self, from: data)
+        self = try newJSONDecoder().decode(Noexcept.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -9798,10 +9846,10 @@ extension Nonatomic {
     }
 
     func with(
-        nonatomic: Int? = nil
-    ) -> Nonatomic {
-        return Nonatomic(
-            nonatomic: nonatomic ?? self.nonatomic
+        noexcept: Int? = nil
+    ) -> Noexcept {
+        return Noexcept(
+            noexcept: noexcept ?? self.noexcept
         )
     }
 
@@ -9814,20 +9862,20 @@ extension Nonatomic {
     }
 }
 
-// MARK: - None
-struct None: Codable {
-    let none: Int
+// MARK: - Nonatomic
+struct Nonatomic: Codable {
+    let nonatomic: Int
 
     enum CodingKeys: String, CodingKey {
-        case none = "None"
+        case nonatomic = "nonatomic"
     }
 }
 
-// MARK: None convenience initializers and mutators
+// MARK: Nonatomic convenience initializers and mutators
 
-extension None {
+extension Nonatomic {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(None.self, from: data)
+        self = try newJSONDecoder().decode(Nonatomic.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -9842,8 +9890,52 @@ extension None {
     }
 
     func with(
-        none: Int? = nil
-    ) -> None {
+        nonatomic: Int? = nil
+    ) -> Nonatomic {
+        return Nonatomic(
+            nonatomic: nonatomic ?? self.nonatomic
+        )
+    }
+
+    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: - None
+struct None: Codable {
+    let none: Int
+
+    enum CodingKeys: String, CodingKey {
+        case none = "None"
+    }
+}
+
+// MARK: None convenience initializers and mutators
+
+extension None {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(None.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(
+        none: Int? = nil
+    ) -> None {
         return None(
             none: none ?? self.none
         )
@@ -12498,50 +12590,6 @@ extension Sel {
     }
 }
 
-// MARK: - Select
-struct Select: Codable {
-    let select: Int
-
-    enum CodingKeys: String, CodingKey {
-        case select = "select"
-    }
-}
-
-// MARK: Select convenience initializers and mutators
-
-extension Select {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Select.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(
-        select: Int? = nil
-    ) -> Select {
-        return Select(
-            select: select ?? self.select
-        )
-    }
-
-    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: - Obj5
 struct Obj5: Codable {
     let dummy: Int
@@ -12563,6 +12611,7 @@ struct Obj5: Codable {
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let select: Select
     let sendable: Sendable
     let serialDescriptor: SerialDescriptor
     let serialName: SerialName
@@ -12591,6 +12640,7 @@ struct Obj5: Codable {
     let timeOnly: TimeOnly
     let timeOnlyConverter: TimeOnlyConverter
     let timeZone: TimeZoneClass
+    let toDict: ToDict
     let toJSON: ToJSON
     let toString: ToString
     let topLevel: TopLevelClass
@@ -12605,10 +12655,9 @@ struct Obj5: Codable {
     let unchecked: Unchecked
     let undefined: Undefined
     let union: Union
+    let unmarshalJSON: UnmarshalJSON
     let unsafe: Unsafe
-    let unsigned: Unsigned
     let useSerializers: UseSerializers
-    let ushort: Ushort
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -12630,6 +12679,7 @@ struct Obj5: Codable {
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case select = "select"
         case sendable = "Sendable"
         case serialDescriptor = "SerialDescriptor"
         case serialName = "SerialName"
@@ -12658,6 +12708,7 @@ struct Obj5: Codable {
         case timeOnly = "TimeOnly"
         case timeOnlyConverter = "TimeOnlyConverter"
         case timeZone = "TimeZone"
+        case toDict = "to_dict"
         case toJSON = "to_json"
         case toString = "toString"
         case topLevel = "top_level"
@@ -12672,10 +12723,9 @@ struct Obj5: Codable {
         case unchecked = "unchecked"
         case undefined = "undefined"
         case union = "union"
+        case unmarshalJSON = "UnmarshalJSON"
         case unsafe = "unsafe"
-        case unsigned = "unsigned"
         case useSerializers = "UseSerializers"
-        case ushort = "ushort"
     }
 }
 
@@ -12717,6 +12767,7 @@ extension Obj5 {
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        select: Select? = nil,
         sendable: Sendable? = nil,
         serialDescriptor: SerialDescriptor? = nil,
         serialName: SerialName? = nil,
@@ -12745,6 +12796,7 @@ extension Obj5 {
         timeOnly: TimeOnly? = nil,
         timeOnlyConverter: TimeOnlyConverter? = nil,
         timeZone: TimeZoneClass? = nil,
+        toDict: ToDict? = nil,
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
@@ -12759,10 +12811,9 @@ extension Obj5 {
         unchecked: Unchecked? = nil,
         undefined: Undefined? = nil,
         union: Union? = nil,
+        unmarshalJSON: UnmarshalJSON? = nil,
         unsafe: Unsafe? = nil,
-        unsigned: Unsigned? = nil,
-        useSerializers: UseSerializers? = nil,
-        ushort: Ushort? = nil
+        useSerializers: UseSerializers? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
@@ -12784,6 +12835,7 @@ extension Obj5 {
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            select: select ?? self.select,
             sendable: sendable ?? self.sendable,
             serialDescriptor: serialDescriptor ?? self.serialDescriptor,
             serialName: serialName ?? self.serialName,
@@ -12812,6 +12864,7 @@ extension Obj5 {
             timeOnly: timeOnly ?? self.timeOnly,
             timeOnlyConverter: timeOnlyConverter ?? self.timeOnlyConverter,
             timeZone: timeZone ?? self.timeZone,
+            toDict: toDict ?? self.toDict,
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
@@ -12826,10 +12879,9 @@ extension Obj5 {
             unchecked: unchecked ?? self.unchecked,
             undefined: undefined ?? self.undefined,
             union: union ?? self.union,
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON,
             unsafe: unsafe ?? self.unsafe,
-            unsigned: unsigned ?? self.unsigned,
-            useSerializers: useSerializers ?? self.useSerializers,
-            ushort: ushort ?? self.ushort
+            useSerializers: useSerializers ?? self.useSerializers
         )
     }
 
@@ -13634,6 +13686,50 @@ extension TrueClass {
     }
 }
 
+// MARK: - Select
+struct Select: Codable {
+    let select: Int
+
+    enum CodingKeys: String, CodingKey {
+        case select = "select"
+    }
+}
+
+// MARK: Select convenience initializers and mutators
+
+extension Select {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Select.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(
+        select: Int? = nil
+    ) -> Select {
+        return Select(
+            select: select ?? self.select
+        )
+    }
+
+    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: - Sendable
 struct Sendable: Codable {
     let sendable: Int
@@ -14866,6 +14962,50 @@ extension TimeZoneClass {
     }
 }
 
+// MARK: - ToDict
+struct ToDict: Codable {
+    let toDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case toDict = "to_dict"
+    }
+}
+
+// MARK: ToDict convenience initializers and mutators
+
+extension ToDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ToDict.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(
+        toDict: Int? = nil
+    ) -> ToDict {
+        return ToDict(
+            toDict: toDict ?? self.toDict
+        )
+    }
+
+    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: - ToJSON
 struct ToJSON: Codable {
     let toJSON: Int
@@ -15482,20 +15622,20 @@ extension Union {
     }
 }
 
-// MARK: - Unsafe
-struct Unsafe: Codable {
-    let unsafe: Int
+// MARK: - UnmarshalJSON
+struct UnmarshalJSON: Codable {
+    let unmarshalJSON: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsafe = "unsafe"
+        case unmarshalJSON = "UnmarshalJSON"
     }
 }
 
-// MARK: Unsafe convenience initializers and mutators
+// MARK: UnmarshalJSON convenience initializers and mutators
 
-extension Unsafe {
+extension UnmarshalJSON {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsafe.self, from: data)
+        self = try newJSONDecoder().decode(UnmarshalJSON.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15510,10 +15650,10 @@ extension Unsafe {
     }
 
     func with(
-        unsafe: Int? = nil
-    ) -> Unsafe {
-        return Unsafe(
-            unsafe: unsafe ?? self.unsafe
+        unmarshalJSON: Int? = nil
+    ) -> UnmarshalJSON {
+        return UnmarshalJSON(
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON
         )
     }
 
@@ -15526,20 +15666,20 @@ extension Unsafe {
     }
 }
 
-// MARK: - Unsigned
-struct Unsigned: Codable {
-    let unsigned: Int
+// MARK: - Unsafe
+struct Unsafe: Codable {
+    let unsafe: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsigned = "unsigned"
+        case unsafe = "unsafe"
     }
 }
 
-// MARK: Unsigned convenience initializers and mutators
+// MARK: Unsafe convenience initializers and mutators
 
-extension Unsigned {
+extension Unsafe {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsigned.self, from: data)
+        self = try newJSONDecoder().decode(Unsafe.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15554,10 +15694,10 @@ extension Unsigned {
     }
 
     func with(
-        unsigned: Int? = nil
-    ) -> Unsigned {
-        return Unsigned(
-            unsigned: unsigned ?? self.unsigned
+        unsafe: Int? = nil
+    ) -> Unsafe {
+        return Unsafe(
+            unsafe: unsafe ?? self.unsafe
         )
     }
 
@@ -15614,50 +15754,6 @@ extension UseSerializers {
     }
 }
 
-// MARK: - Ushort
-struct Ushort: Codable {
-    let ushort: Int
-
-    enum CodingKeys: String, CodingKey {
-        case ushort = "ushort"
-    }
-}
-
-// MARK: Ushort convenience initializers and mutators
-
-extension Ushort {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Ushort.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(
-        ushort: Int? = nil
-    ) -> Ushort {
-        return Ushort(
-            ushort: ushort ?? self.ushort
-        )
-    }
-
-    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: - Obj6
 struct Obj6: Codable {
     let dummy: Int
@@ -15666,6 +15762,8 @@ struct Obj6: Codable {
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let unsigned: Unsigned
+    let ushort: Ushort
     let using: Using
     let utf8JSONReader: Utf8JSONReader
     let utf8JSONWriter: Utf8JSONWriter
@@ -15687,6 +15785,8 @@ struct Obj6: Codable {
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case unsigned = "unsigned"
+        case ushort = "ushort"
         case using = "using"
         case utf8JSONReader = "Utf8JsonReader"
         case utf8JSONWriter = "Utf8JsonWriter"
@@ -15728,6 +15828,8 @@ extension Obj6 {
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        unsigned: Unsigned? = nil,
+        ushort: Ushort? = nil,
         using: Using? = nil,
         utf8JSONReader: Utf8JSONReader? = nil,
         utf8JSONWriter: Utf8JSONWriter? = nil,
@@ -15749,6 +15851,8 @@ extension Obj6 {
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            unsigned: unsigned ?? self.unsigned,
+            ushort: ushort ?? self.ushort,
             using: using ?? self.using,
             utf8JSONReader: utf8JSONReader ?? self.utf8JSONReader,
             utf8JSONWriter: utf8JSONWriter ?? self.utf8JSONWriter,
@@ -15994,6 +16098,94 @@ extension WillSet {
     }
 }
 
+// MARK: - Unsigned
+struct Unsigned: Codable {
+    let unsigned: Int
+
+    enum CodingKeys: String, CodingKey {
+        case unsigned = "unsigned"
+    }
+}
+
+// MARK: Unsigned convenience initializers and mutators
+
+extension Unsigned {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Unsigned.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(
+        unsigned: Int? = nil
+    ) -> Unsigned {
+        return Unsigned(
+            unsigned: unsigned ?? self.unsigned
+        )
+    }
+
+    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: - Ushort
+struct Ushort: Codable {
+    let ushort: Int
+
+    enum CodingKeys: String, CodingKey {
+        case ushort = "ushort"
+    }
+}
+
+// MARK: Ushort convenience initializers and mutators
+
+extension Ushort {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Ushort.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(
+        ushort: Int? = nil
+    ) -> Ushort {
+        return Ushort(
+            ushort: ushort ?? self.ushort
+        )
+    }
+
+    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: - Using
 struct Using: Codable {
     let using: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
index f443a99..f67bb25 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/objective-c-support-true__struct-or-class-class--f14372afa3e4/quicktype.swift
@@ -3634,11 +3634,11 @@ extension ClassClass {
     let formatException: FormatException
     let friend: Friend
     let from: From
+    let fromDict: FromDict
     let fromJSON: FromJSON
     let function: Function
     let global: Global
     let go: Go
-    let goto: Goto
     let obj2Default: Default
     let obj2Defer: Defer
     let obj2Deinit: Deinit
@@ -3701,11 +3701,11 @@ extension ClassClass {
         case formatException = "FormatException"
         case friend = "friend"
         case from = "from"
+        case fromDict = "from_dict"
         case fromJSON = "from_json"
         case function = "function"
         case global = "global"
         case go = "go"
-        case goto = "goto"
         case obj2Default = "default"
         case obj2Defer = "defer"
         case obj2Deinit = "deinit"
@@ -3725,7 +3725,7 @@ extension ClassClass {
         case purpleFalse = "false"
     }
 
-    init(dateFormatter: DateFormatterClass, dateOnly: DateOnly, dateOnlyConverter: DateOnlyConverter, dateParseHandling: DateParseHandling, dateTime: DateTime, dateTimeStyles: DateTimeStyles, debugger: Debugger, decimal: Decimal, declare: Declare, decltype: Decltype, decodeString: DecodeString, decoder: DecoderClass, decodingError: DecodingErrorClass, def: Def, del: Del, delegate: Delegate, delete: Delete, dict: Dict, dictionary: Dictionary, double: DoubleClass, dummy: Int, dynamicCast: DynamicCast, elif: Elif, encodeQuickType: EncodeQuickType, encoder: EncoderClass, enumValues: EnumValues, equalityContract: EqualityContract, equatable: Equatable, event: Event, except: Except, exception: Exception, explicit: Explicit, export: Export, exposing: Exposing, extends: Extends, extern: Extern, finally: Finally, fixed: Fixed, float: Float, foreach: Foreach, formatException: FormatException, friend: Friend, from: From, fromJSON: FromJSON, function: Function, global: Global, go: Go, goto: Goto, obj2Default: Default, obj2Defer: Defer, obj2Deinit: Deinit, obj2DidSet: DidSet, obj2Do: Do, obj2Dynamic: Dynamic, obj2Else: Else, obj2Enum: Enum, obj2Extension: Extension, obj2Fallthrough: Fallthrough, obj2False: False, obj2Fileprivate: Fileprivate, obj2Final: Final, obj2For: For, obj2Func: Func, obj2Get: Get, purpleFalse: FalseClass) {
+    init(dateFormatter: DateFormatterClass, dateOnly: DateOnly, dateOnlyConverter: DateOnlyConverter, dateParseHandling: DateParseHandling, dateTime: DateTime, dateTimeStyles: DateTimeStyles, debugger: Debugger, decimal: Decimal, declare: Declare, decltype: Decltype, decodeString: DecodeString, decoder: DecoderClass, decodingError: DecodingErrorClass, def: Def, del: Del, delegate: Delegate, delete: Delete, dict: Dict, dictionary: Dictionary, double: DoubleClass, dummy: Int, dynamicCast: DynamicCast, elif: Elif, encodeQuickType: EncodeQuickType, encoder: EncoderClass, enumValues: EnumValues, equalityContract: EqualityContract, equatable: Equatable, event: Event, except: Except, exception: Exception, explicit: Explicit, export: Export, exposing: Exposing, extends: Extends, extern: Extern, finally: Finally, fixed: Fixed, float: Float, foreach: Foreach, formatException: FormatException, friend: Friend, from: From, fromDict: FromDict, fromJSON: FromJSON, function: Function, global: Global, go: Go, obj2Default: Default, obj2Defer: Defer, obj2Deinit: Deinit, obj2DidSet: DidSet, obj2Do: Do, obj2Dynamic: Dynamic, obj2Else: Else, obj2Enum: Enum, obj2Extension: Extension, obj2Fallthrough: Fallthrough, obj2False: False, obj2Fileprivate: Fileprivate, obj2Final: Final, obj2For: For, obj2Func: Func, obj2Get: Get, purpleFalse: FalseClass) {
         self.dateFormatter = dateFormatter
         self.dateOnly = dateOnly
         self.dateOnlyConverter = dateOnlyConverter
@@ -3769,11 +3769,11 @@ extension ClassClass {
         self.formatException = formatException
         self.friend = friend
         self.from = from
+        self.fromDict = fromDict
         self.fromJSON = fromJSON
         self.function = function
         self.global = global
         self.go = go
-        self.goto = goto
         self.obj2Default = obj2Default
         self.obj2Defer = obj2Defer
         self.obj2Deinit = obj2Deinit
@@ -3799,7 +3799,7 @@ extension ClassClass {
 extension Obj2 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj2.self, from: data)
-        self.init(dateFormatter: me.dateFormatter, dateOnly: me.dateOnly, dateOnlyConverter: me.dateOnlyConverter, dateParseHandling: me.dateParseHandling, dateTime: me.dateTime, dateTimeStyles: me.dateTimeStyles, debugger: me.debugger, decimal: me.decimal, declare: me.declare, decltype: me.decltype, decodeString: me.decodeString, decoder: me.decoder, decodingError: me.decodingError, def: me.def, del: me.del, delegate: me.delegate, delete: me.delete, dict: me.dict, dictionary: me.dictionary, double: me.double, dummy: me.dummy, dynamicCast: me.dynamicCast, elif: me.elif, encodeQuickType: me.encodeQuickType, encoder: me.encoder, enumValues: me.enumValues, equalityContract: me.equalityContract, equatable: me.equatable, event: me.event, except: me.except, exception: me.exception, explicit: me.explicit, export: me.export, exposing: me.exposing, extends: me.extends, extern: me.extern, finally: me.finally, fixed: me.fixed, float: me.float, foreach: me.foreach, formatException: me.formatException, friend: me.friend, from: me.from, fromJSON: me.fromJSON, function: me.function, global: me.global, go: me.go, goto: me.goto, obj2Default: me.obj2Default, obj2Defer: me.obj2Defer, obj2Deinit: me.obj2Deinit, obj2DidSet: me.obj2DidSet, obj2Do: me.obj2Do, obj2Dynamic: me.obj2Dynamic, obj2Else: me.obj2Else, obj2Enum: me.obj2Enum, obj2Extension: me.obj2Extension, obj2Fallthrough: me.obj2Fallthrough, obj2False: me.obj2False, obj2Fileprivate: me.obj2Fileprivate, obj2Final: me.obj2Final, obj2For: me.obj2For, obj2Func: me.obj2Func, obj2Get: me.obj2Get, purpleFalse: me.purpleFalse)
+        self.init(dateFormatter: me.dateFormatter, dateOnly: me.dateOnly, dateOnlyConverter: me.dateOnlyConverter, dateParseHandling: me.dateParseHandling, dateTime: me.dateTime, dateTimeStyles: me.dateTimeStyles, debugger: me.debugger, decimal: me.decimal, declare: me.declare, decltype: me.decltype, decodeString: me.decodeString, decoder: me.decoder, decodingError: me.decodingError, def: me.def, del: me.del, delegate: me.delegate, delete: me.delete, dict: me.dict, dictionary: me.dictionary, double: me.double, dummy: me.dummy, dynamicCast: me.dynamicCast, elif: me.elif, encodeQuickType: me.encodeQuickType, encoder: me.encoder, enumValues: me.enumValues, equalityContract: me.equalityContract, equatable: me.equatable, event: me.event, except: me.except, exception: me.exception, explicit: me.explicit, export: me.export, exposing: me.exposing, extends: me.extends, extern: me.extern, finally: me.finally, fixed: me.fixed, float: me.float, foreach: me.foreach, formatException: me.formatException, friend: me.friend, from: me.from, fromDict: me.fromDict, fromJSON: me.fromJSON, function: me.function, global: me.global, go: me.go, obj2Default: me.obj2Default, obj2Defer: me.obj2Defer, obj2Deinit: me.obj2Deinit, obj2DidSet: me.obj2DidSet, obj2Do: me.obj2Do, obj2Dynamic: me.obj2Dynamic, obj2Else: me.obj2Else, obj2Enum: me.obj2Enum, obj2Extension: me.obj2Extension, obj2Fallthrough: me.obj2Fallthrough, obj2False: me.obj2False, obj2Fileprivate: me.obj2Fileprivate, obj2Final: me.obj2Final, obj2For: me.obj2For, obj2Func: me.obj2Func, obj2Get: me.obj2Get, purpleFalse: me.purpleFalse)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -3857,11 +3857,11 @@ extension Obj2 {
         formatException: FormatException? = nil,
         friend: Friend? = nil,
         from: From? = nil,
+        fromDict: FromDict? = nil,
         fromJSON: FromJSON? = nil,
         function: Function? = nil,
         global: Global? = nil,
         go: Go? = nil,
-        goto: Goto? = nil,
         obj2Default: Default? = nil,
         obj2Defer: Defer? = nil,
         obj2Deinit: Deinit? = nil,
@@ -3924,11 +3924,11 @@ extension Obj2 {
             formatException: formatException ?? self.formatException,
             friend: friend ?? self.friend,
             from: from ?? self.from,
+            fromDict: fromDict ?? self.fromDict,
             fromJSON: fromJSON ?? self.fromJSON,
             function: function ?? self.function,
             global: global ?? self.global,
             go: go ?? self.go,
-            goto: goto ?? self.goto,
             obj2Default: obj2Default ?? self.obj2Default,
             obj2Defer: obj2Defer ?? self.obj2Defer,
             obj2Deinit: obj2Deinit ?? self.obj2Deinit,
@@ -6021,6 +6021,55 @@ extension From {
     }
 }
 
+// MARK: - FromDict
+@objcMembers class FromDict: NSObject, Codable {
+    let fromDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case fromDict = "from_dict"
+    }
+
+    init(fromDict: Int) {
+        self.fromDict = fromDict
+    }
+}
+
+// MARK: FromDict convenience initializers and mutators
+
+extension FromDict {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FromDict.self, from: data)
+        self.init(fromDict: me.fromDict)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        fromDict: Int? = nil
+    ) -> FromDict {
+        return FromDict(
+            fromDict: fromDict ?? self.fromDict
+        )
+    }
+
+    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: - FromJSON
 @objcMembers class FromJSON: NSObject, Codable {
     let fromJSON: Int
@@ -6217,55 +6266,6 @@ extension Go {
     }
 }
 
-// MARK: - Goto
-@objcMembers class Goto: NSObject, Codable {
-    let goto: Int
-
-    enum CodingKeys: String, CodingKey {
-        case goto = "goto"
-    }
-
-    init(goto: Int) {
-        self.goto = goto
-    }
-}
-
-// MARK: Goto convenience initializers and mutators
-
-extension Goto {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Goto.self, from: data)
-        self.init(goto: me.goto)
-    }
-
-    convenience 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)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        goto: Int? = nil
-    ) -> Goto {
-        return Goto(
-            goto: goto ?? self.goto
-        )
-    }
-
-    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: - Default
 @objcMembers class Default: NSObject, Codable {
     let defaultDefault: Int
@@ -7102,6 +7102,7 @@ extension FalseClass {
 // MARK: - Obj3
 @objcMembers class Obj3: NSObject, Codable {
     let dummy: Int
+    let goto: Goto
     let hasOwnProperty: HasOwnProperty
     let hashCode: HashCode
     let hashable: HashableClass
@@ -7141,6 +7142,7 @@ extension FalseClass {
     let long: Long
     let map: Map
     let mapEntry: MapEntry
+    let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
     let mutable: Mutable
@@ -7149,7 +7151,6 @@ extension FalseClass {
     let new: New
     let newtonsoft: Newtonsoft
     let no: No
-    let noexcept: Noexcept
     let obj3Guard: Guard
     let obj3If: If
     let obj3Import: Import
@@ -7169,6 +7170,7 @@ extension FalseClass {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case goto = "goto"
         case hasOwnProperty = "hasOwnProperty"
         case hashCode = "hashCode"
         case hashable = "Hashable"
@@ -7208,6 +7210,7 @@ extension FalseClass {
         case long = "long"
         case map = "map"
         case mapEntry = "MapEntry"
+        case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
         case mutable = "mutable"
@@ -7216,7 +7219,6 @@ extension FalseClass {
         case new = "new"
         case newtonsoft = "newtonsoft"
         case no = "NO"
-        case noexcept = "noexcept"
         case obj3Guard = "guard"
         case obj3If = "if"
         case obj3Import = "import"
@@ -7235,8 +7237,9 @@ extension FalseClass {
         case obj3Nil = "nil"
     }
 
-    init(dummy: Int, hasOwnProperty: HasOwnProperty, hashCode: HashCode, hashable: HashableClass, hasher: HasherClass, id: ID, imp: Imp, implements: Implements, implicit: Implicit, inline: Inline, instanceof: Instanceof, int: IntClass, interface: Interface, isoDateTimeOffsetConverter: ISODateTimeOffsetConverter, iterable: Iterable, jdec: Jdec, jenc: Jenc, jpipe: Jpipe, jsonAny: JSONAnyClass, jsonCodingKey: JSONCodingKeyClass, jsonConverter: JSONConverter, jsonDecoder: JSONDecoderClass, jsonEncoder: JSONEncoderClass, jsonException: JSONException, jsonGenerator: JSONGenerator, jsonNode: JSONNode, jsonNull: JSONNullClass, jsonParser: JSONParser, jsonReader: JSONReader, jsonSerializer: JSONSerializer, jsonToken: JSONToken, jsonTokenType: JSONTokenType, jsonWriter: JSONWriter, lambda: Lambda, list: List, locale: LocaleClass, lock: Lock, long: Long, map: Map, mapEntry: MapEntry, metadataPropertyHandling: MetadataPropertyHandling, module: Module, mutable: Mutable, namespace: Namespace, native: Native, new: New, newtonsoft: Newtonsoft, no: No, noexcept: Noexcept, obj3Guard: Guard, obj3If: If, obj3Import: Import, obj3In: In, obj3Indirect: Indirect, obj3Infix: Infix, obj3Init: Init, obj3Inout: Inout, obj3Internal: Internal, obj3Is: Is, obj3JSON: JSON, obj3Lazy: Lazy, obj3Left: Left, obj3Let: Let, obj3Mutating: Mutating, obj3Nil: Nil) {
+    init(dummy: Int, goto: Goto, hasOwnProperty: HasOwnProperty, hashCode: HashCode, hashable: HashableClass, hasher: HasherClass, id: ID, imp: Imp, implements: Implements, implicit: Implicit, inline: Inline, instanceof: Instanceof, int: IntClass, interface: Interface, isoDateTimeOffsetConverter: ISODateTimeOffsetConverter, iterable: Iterable, jdec: Jdec, jenc: Jenc, jpipe: Jpipe, jsonAny: JSONAnyClass, jsonCodingKey: JSONCodingKeyClass, jsonConverter: JSONConverter, jsonDecoder: JSONDecoderClass, jsonEncoder: JSONEncoderClass, jsonException: JSONException, jsonGenerator: JSONGenerator, jsonNode: JSONNode, jsonNull: JSONNullClass, jsonParser: JSONParser, jsonReader: JSONReader, jsonSerializer: JSONSerializer, jsonToken: JSONToken, jsonTokenType: JSONTokenType, jsonWriter: JSONWriter, lambda: Lambda, list: List, locale: LocaleClass, lock: Lock, long: Long, map: Map, mapEntry: MapEntry, marshalJSON: MarshalJSON, metadataPropertyHandling: MetadataPropertyHandling, module: Module, mutable: Mutable, namespace: Namespace, native: Native, new: New, newtonsoft: Newtonsoft, no: No, obj3Guard: Guard, obj3If: If, obj3Import: Import, obj3In: In, obj3Indirect: Indirect, obj3Infix: Infix, obj3Init: Init, obj3Inout: Inout, obj3Internal: Internal, obj3Is: Is, obj3JSON: JSON, obj3Lazy: Lazy, obj3Left: Left, obj3Let: Let, obj3Mutating: Mutating, obj3Nil: Nil) {
         self.dummy = dummy
+        self.goto = goto
         self.hasOwnProperty = hasOwnProperty
         self.hashCode = hashCode
         self.hashable = hashable
@@ -7276,6 +7279,7 @@ extension FalseClass {
         self.long = long
         self.map = map
         self.mapEntry = mapEntry
+        self.marshalJSON = marshalJSON
         self.metadataPropertyHandling = metadataPropertyHandling
         self.module = module
         self.mutable = mutable
@@ -7284,7 +7288,6 @@ extension FalseClass {
         self.new = new
         self.newtonsoft = newtonsoft
         self.no = no
-        self.noexcept = noexcept
         self.obj3Guard = obj3Guard
         self.obj3If = obj3If
         self.obj3Import = obj3Import
@@ -7309,7 +7312,7 @@ extension FalseClass {
 extension Obj3 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj3.self, from: data)
-        self.init(dummy: me.dummy, hasOwnProperty: me.hasOwnProperty, hashCode: me.hashCode, hashable: me.hashable, hasher: me.hasher, id: me.id, imp: me.imp, implements: me.implements, implicit: me.implicit, inline: me.inline, instanceof: me.instanceof, int: me.int, interface: me.interface, isoDateTimeOffsetConverter: me.isoDateTimeOffsetConverter, iterable: me.iterable, jdec: me.jdec, jenc: me.jenc, jpipe: me.jpipe, jsonAny: me.jsonAny, jsonCodingKey: me.jsonCodingKey, jsonConverter: me.jsonConverter, jsonDecoder: me.jsonDecoder, jsonEncoder: me.jsonEncoder, jsonException: me.jsonException, jsonGenerator: me.jsonGenerator, jsonNode: me.jsonNode, jsonNull: me.jsonNull, jsonParser: me.jsonParser, jsonReader: me.jsonReader, jsonSerializer: me.jsonSerializer, jsonToken: me.jsonToken, jsonTokenType: me.jsonTokenType, jsonWriter: me.jsonWriter, lambda: me.lambda, list: me.list, locale: me.locale, lock: me.lock, long: me.long, map: me.map, mapEntry: me.mapEntry, metadataPropertyHandling: me.metadataPropertyHandling, module: me.module, mutable: me.mutable, namespace: me.namespace, native: me.native, new: me.new, newtonsoft: me.newtonsoft, no: me.no, noexcept: me.noexcept, obj3Guard: me.obj3Guard, obj3If: me.obj3If, obj3Import: me.obj3Import, obj3In: me.obj3In, obj3Indirect: me.obj3Indirect, obj3Infix: me.obj3Infix, obj3Init: me.obj3Init, obj3Inout: me.obj3Inout, obj3Internal: me.obj3Internal, obj3Is: me.obj3Is, obj3JSON: me.obj3JSON, obj3Lazy: me.obj3Lazy, obj3Left: me.obj3Left, obj3Let: me.obj3Let, obj3Mutating: me.obj3Mutating, obj3Nil: me.obj3Nil)
+        self.init(dummy: me.dummy, goto: me.goto, hasOwnProperty: me.hasOwnProperty, hashCode: me.hashCode, hashable: me.hashable, hasher: me.hasher, id: me.id, imp: me.imp, implements: me.implements, implicit: me.implicit, inline: me.inline, instanceof: me.instanceof, int: me.int, interface: me.interface, isoDateTimeOffsetConverter: me.isoDateTimeOffsetConverter, iterable: me.iterable, jdec: me.jdec, jenc: me.jenc, jpipe: me.jpipe, jsonAny: me.jsonAny, jsonCodingKey: me.jsonCodingKey, jsonConverter: me.jsonConverter, jsonDecoder: me.jsonDecoder, jsonEncoder: me.jsonEncoder, jsonException: me.jsonException, jsonGenerator: me.jsonGenerator, jsonNode: me.jsonNode, jsonNull: me.jsonNull, jsonParser: me.jsonParser, jsonReader: me.jsonReader, jsonSerializer: me.jsonSerializer, jsonToken: me.jsonToken, jsonTokenType: me.jsonTokenType, jsonWriter: me.jsonWriter, lambda: me.lambda, list: me.list, locale: me.locale, lock: me.lock, long: me.long, map: me.map, mapEntry: me.mapEntry, marshalJSON: me.marshalJSON, metadataPropertyHandling: me.metadataPropertyHandling, module: me.module, mutable: me.mutable, namespace: me.namespace, native: me.native, new: me.new, newtonsoft: me.newtonsoft, no: me.no, obj3Guard: me.obj3Guard, obj3If: me.obj3If, obj3Import: me.obj3Import, obj3In: me.obj3In, obj3Indirect: me.obj3Indirect, obj3Infix: me.obj3Infix, obj3Init: me.obj3Init, obj3Inout: me.obj3Inout, obj3Internal: me.obj3Internal, obj3Is: me.obj3Is, obj3JSON: me.obj3JSON, obj3Lazy: me.obj3Lazy, obj3Left: me.obj3Left, obj3Let: me.obj3Let, obj3Mutating: me.obj3Mutating, obj3Nil: me.obj3Nil)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -7325,6 +7328,7 @@ extension Obj3 {
 
     func with(
         dummy: Int? = nil,
+        goto: Goto? = nil,
         hasOwnProperty: HasOwnProperty? = nil,
         hashCode: HashCode? = nil,
         hashable: HashableClass? = nil,
@@ -7364,6 +7368,7 @@ extension Obj3 {
         long: Long? = nil,
         map: Map? = nil,
         mapEntry: MapEntry? = nil,
+        marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
         mutable: Mutable? = nil,
@@ -7372,7 +7377,6 @@ extension Obj3 {
         new: New? = nil,
         newtonsoft: Newtonsoft? = nil,
         no: No? = nil,
-        noexcept: Noexcept? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
         obj3Import: Import? = nil,
@@ -7392,6 +7396,7 @@ extension Obj3 {
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
+            goto: goto ?? self.goto,
             hasOwnProperty: hasOwnProperty ?? self.hasOwnProperty,
             hashCode: hashCode ?? self.hashCode,
             hashable: hashable ?? self.hashable,
@@ -7431,6 +7436,7 @@ extension Obj3 {
             long: long ?? self.long,
             map: map ?? self.map,
             mapEntry: mapEntry ?? self.mapEntry,
+            marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
             mutable: mutable ?? self.mutable,
@@ -7439,7 +7445,6 @@ extension Obj3 {
             new: new ?? self.new,
             newtonsoft: newtonsoft ?? self.newtonsoft,
             no: no ?? self.no,
-            noexcept: noexcept ?? self.noexcept,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
             obj3Import: obj3Import ?? self.obj3Import,
@@ -7468,6 +7473,55 @@ extension Obj3 {
     }
 }
 
+// MARK: - Goto
+@objcMembers class Goto: NSObject, Codable {
+    let goto: Int
+
+    enum CodingKeys: String, CodingKey {
+        case goto = "goto"
+    }
+
+    init(goto: Int) {
+        self.goto = goto
+    }
+}
+
+// MARK: Goto convenience initializers and mutators
+
+extension Goto {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Goto.self, from: data)
+        self.init(goto: me.goto)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        goto: Int? = nil
+    ) -> Goto {
+        return Goto(
+            goto: goto ?? self.goto
+        )
+    }
+
+    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: - HasOwnProperty
 @objcMembers class HasOwnProperty: NSObject, Codable {
     let hasOwnProperty: Int
@@ -9379,6 +9433,55 @@ extension MapEntry {
     }
 }
 
+// MARK: - MarshalJSON
+@objcMembers class MarshalJSON: NSObject, Codable {
+    let marshalJSON: Int
+
+    enum CodingKeys: String, CodingKey {
+        case marshalJSON = "MarshalJSON"
+    }
+
+    init(marshalJSON: Int) {
+        self.marshalJSON = marshalJSON
+    }
+}
+
+// MARK: MarshalJSON convenience initializers and mutators
+
+extension MarshalJSON {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(MarshalJSON.self, from: data)
+        self.init(marshalJSON: me.marshalJSON)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        marshalJSON: Int? = nil
+    ) -> MarshalJSON {
+        return MarshalJSON(
+            marshalJSON: marshalJSON ?? self.marshalJSON
+        )
+    }
+
+    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: - MetadataPropertyHandling
 @objcMembers class MetadataPropertyHandling: NSObject, Codable {
     let metadataPropertyHandling: Int
@@ -9771,55 +9874,6 @@ extension No {
     }
 }
 
-// MARK: - Noexcept
-@objcMembers class Noexcept: NSObject, Codable {
-    let noexcept: Int
-
-    enum CodingKeys: String, CodingKey {
-        case noexcept = "noexcept"
-    }
-
-    init(noexcept: Int) {
-        self.noexcept = noexcept
-    }
-}
-
-// MARK: Noexcept convenience initializers and mutators
-
-extension Noexcept {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Noexcept.self, from: data)
-        self.init(noexcept: me.noexcept)
-    }
-
-    convenience 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)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        noexcept: Int? = nil
-    ) -> Noexcept {
-        return Noexcept(
-            noexcept: noexcept ?? self.noexcept
-        )
-    }
-
-    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: - Guard
 @objcMembers class Guard: NSObject, Codable {
     let guardGuard: Int
@@ -10608,6 +10662,7 @@ extension Nil {
 @objcMembers class Obj4: NSObject, Codable {
     let dummy: Int
     let noSuchMethod: NoSuchMethod
+    let noexcept: Noexcept
     let nonatomic: Nonatomic
     let none: None
     let nonlocal: Nonlocal
@@ -10670,11 +10725,11 @@ extension Nil {
     let sbyte: Sbyte
     let sealed: Sealed
     let sel: Sel
-    let select: Select
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case noSuchMethod = "noSuchMethod"
+        case noexcept = "noexcept"
         case nonatomic = "nonatomic"
         case none = "None"
         case nonlocal = "nonlocal"
@@ -10737,12 +10792,12 @@ extension Nil {
         case sbyte = "sbyte"
         case sealed = "sealed"
         case sel = "SEL"
-        case select = "select"
     }
 
-    init(dummy: Int, noSuchMethod: NoSuchMethod, nonatomic: Nonatomic, none: None, nonlocal: Nonlocal, not: Not, notEq: NotEq, nsError: NSErrorClass, nsObject: NSObjectClass, nsString: NSString, null: Null, nullptr: Nullptr, number: Number, obj4None: NoneClass, obj4Nonmutating: Nonmutating, obj4Null: NullClass, obj4Open: Open, obj4Operator: Operator, obj4Optional: Optional, obj4Override: Override, obj4Postfix: Postfix, obj4Precedence: Precedence, obj4Prefix: Prefix, obj4Private: Private, obj4Protocol: ProtocolClass, obj4Public: Public, obj4Repeat: Repeat, obj4Required: Required, obj4Retain: Retain, obj4Rethrows: Rethrows, obj4Return: Return, obj4Right: Right, object: Object, objectMapper: ObjectMapper, of: Of, oneway: Oneway, or: Or, orEq: OrEq, out: Out, package: Package, params: Params, pass: Pass, port: Port, print: Print, printMembers: PrintMembers, printf: Printf, protected: Protected, purpleProtocol: Obj4Protocol, quicktype: Quicktype, raise: Raise, range: Range, readonly: Readonly, ref: Ref, regExp: RegExp, register: Register, reinterpretCast: ReinterpretCast, require: Require, requires: Requires, restrict: Restrict, runtimeType: RuntimeType, s: S, sbyte: Sbyte, sealed: Sealed, sel: Sel, select: Select) {
+    init(dummy: Int, noSuchMethod: NoSuchMethod, noexcept: Noexcept, nonatomic: Nonatomic, none: None, nonlocal: Nonlocal, not: Not, notEq: NotEq, nsError: NSErrorClass, nsObject: NSObjectClass, nsString: NSString, null: Null, nullptr: Nullptr, number: Number, obj4None: NoneClass, obj4Nonmutating: Nonmutating, obj4Null: NullClass, obj4Open: Open, obj4Operator: Operator, obj4Optional: Optional, obj4Override: Override, obj4Postfix: Postfix, obj4Precedence: Precedence, obj4Prefix: Prefix, obj4Private: Private, obj4Protocol: ProtocolClass, obj4Public: Public, obj4Repeat: Repeat, obj4Required: Required, obj4Retain: Retain, obj4Rethrows: Rethrows, obj4Return: Return, obj4Right: Right, object: Object, objectMapper: ObjectMapper, of: Of, oneway: Oneway, or: Or, orEq: OrEq, out: Out, package: Package, params: Params, pass: Pass, port: Port, print: Print, printMembers: PrintMembers, printf: Printf, protected: Protected, purpleProtocol: Obj4Protocol, quicktype: Quicktype, raise: Raise, range: Range, readonly: Readonly, ref: Ref, regExp: RegExp, register: Register, reinterpretCast: ReinterpretCast, require: Require, requires: Requires, restrict: Restrict, runtimeType: RuntimeType, s: S, sbyte: Sbyte, sealed: Sealed, sel: Sel) {
         self.dummy = dummy
         self.noSuchMethod = noSuchMethod
+        self.noexcept = noexcept
         self.nonatomic = nonatomic
         self.none = none
         self.nonlocal = nonlocal
@@ -10805,7 +10860,6 @@ extension Nil {
         self.sbyte = sbyte
         self.sealed = sealed
         self.sel = sel
-        self.select = select
     }
 }
 
@@ -10814,7 +10868,7 @@ extension Nil {
 extension Obj4 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj4.self, from: data)
-        self.init(dummy: me.dummy, noSuchMethod: me.noSuchMethod, nonatomic: me.nonatomic, none: me.none, nonlocal: me.nonlocal, not: me.not, notEq: me.notEq, nsError: me.nsError, nsObject: me.nsObject, nsString: me.nsString, null: me.null, nullptr: me.nullptr, number: me.number, obj4None: me.obj4None, obj4Nonmutating: me.obj4Nonmutating, obj4Null: me.obj4Null, obj4Open: me.obj4Open, obj4Operator: me.obj4Operator, obj4Optional: me.obj4Optional, obj4Override: me.obj4Override, obj4Postfix: me.obj4Postfix, obj4Precedence: me.obj4Precedence, obj4Prefix: me.obj4Prefix, obj4Private: me.obj4Private, obj4Protocol: me.obj4Protocol, obj4Public: me.obj4Public, obj4Repeat: me.obj4Repeat, obj4Required: me.obj4Required, obj4Retain: me.obj4Retain, obj4Rethrows: me.obj4Rethrows, obj4Return: me.obj4Return, obj4Right: me.obj4Right, object: me.object, objectMapper: me.objectMapper, of: me.of, oneway: me.oneway, or: me.or, orEq: me.orEq, out: me.out, package: me.package, params: me.params, pass: me.pass, port: me.port, print: me.print, printMembers: me.printMembers, printf: me.printf, protected: me.protected, purpleProtocol: me.purpleProtocol, quicktype: me.quicktype, raise: me.raise, range: me.range, readonly: me.readonly, ref: me.ref, regExp: me.regExp, register: me.register, reinterpretCast: me.reinterpretCast, require: me.require, requires: me.requires, restrict: me.restrict, runtimeType: me.runtimeType, s: me.s, sbyte: me.sbyte, sealed: me.sealed, sel: me.sel, select: me.select)
+        self.init(dummy: me.dummy, noSuchMethod: me.noSuchMethod, noexcept: me.noexcept, nonatomic: me.nonatomic, none: me.none, nonlocal: me.nonlocal, not: me.not, notEq: me.notEq, nsError: me.nsError, nsObject: me.nsObject, nsString: me.nsString, null: me.null, nullptr: me.nullptr, number: me.number, obj4None: me.obj4None, obj4Nonmutating: me.obj4Nonmutating, obj4Null: me.obj4Null, obj4Open: me.obj4Open, obj4Operator: me.obj4Operator, obj4Optional: me.obj4Optional, obj4Override: me.obj4Override, obj4Postfix: me.obj4Postfix, obj4Precedence: me.obj4Precedence, obj4Prefix: me.obj4Prefix, obj4Private: me.obj4Private, obj4Protocol: me.obj4Protocol, obj4Public: me.obj4Public, obj4Repeat: me.obj4Repeat, obj4Required: me.obj4Required, obj4Retain: me.obj4Retain, obj4Rethrows: me.obj4Rethrows, obj4Return: me.obj4Return, obj4Right: me.obj4Right, object: me.object, objectMapper: me.objectMapper, of: me.of, oneway: me.oneway, or: me.or, orEq: me.orEq, out: me.out, package: me.package, params: me.params, pass: me.pass, port: me.port, print: me.print, printMembers: me.printMembers, printf: me.printf, protected: me.protected, purpleProtocol: me.purpleProtocol, quicktype: me.quicktype, raise: me.raise, range: me.range, readonly: me.readonly, ref: me.ref, regExp: me.regExp, register: me.register, reinterpretCast: me.reinterpretCast, require: me.require, requires: me.requires, restrict: me.restrict, runtimeType: me.runtimeType, s: me.s, sbyte: me.sbyte, sealed: me.sealed, sel: me.sel)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -10831,6 +10885,7 @@ extension Obj4 {
     func with(
         dummy: Int? = nil,
         noSuchMethod: NoSuchMethod? = nil,
+        noexcept: Noexcept? = nil,
         nonatomic: Nonatomic? = nil,
         none: None? = nil,
         nonlocal: Nonlocal? = nil,
@@ -10892,12 +10947,12 @@ extension Obj4 {
         s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
-        sel: Sel? = nil,
-        select: Select? = nil
+        sel: Sel? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
             noSuchMethod: noSuchMethod ?? self.noSuchMethod,
+            noexcept: noexcept ?? self.noexcept,
             nonatomic: nonatomic ?? self.nonatomic,
             none: none ?? self.none,
             nonlocal: nonlocal ?? self.nonlocal,
@@ -10959,8 +11014,7 @@ extension Obj4 {
             s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
-            sel: sel ?? self.sel,
-            select: select ?? self.select
+            sel: sel ?? self.sel
         )
     }
 
@@ -11022,20 +11076,69 @@ extension NoSuchMethod {
     }
 }
 
-// MARK: - Nonatomic
-@objcMembers class Nonatomic: NSObject, Codable {
-    let nonatomic: Int
+// MARK: - Noexcept
+@objcMembers class Noexcept: NSObject, Codable {
+    let noexcept: Int
 
     enum CodingKeys: String, CodingKey {
-        case nonatomic = "nonatomic"
+        case noexcept = "noexcept"
     }
 
-    init(nonatomic: Int) {
-        self.nonatomic = nonatomic
+    init(noexcept: Int) {
+        self.noexcept = noexcept
     }
 }
 
-// MARK: Nonatomic convenience initializers and mutators
+// MARK: Noexcept convenience initializers and mutators
+
+extension Noexcept {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Noexcept.self, from: data)
+        self.init(noexcept: me.noexcept)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        noexcept: Int? = nil
+    ) -> Noexcept {
+        return Noexcept(
+            noexcept: noexcept ?? self.noexcept
+        )
+    }
+
+    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: - Nonatomic
+@objcMembers class Nonatomic: NSObject, Codable {
+    let nonatomic: Int
+
+    enum CodingKeys: String, CodingKey {
+        case nonatomic = "nonatomic"
+    }
+
+    init(nonatomic: Int) {
+        self.nonatomic = nonatomic
+    }
+}
+
+// MARK: Nonatomic convenience initializers and mutators
 
 extension Nonatomic {
     convenience init(data: Data) throws {
@@ -14060,55 +14163,6 @@ extension Sel {
     }
 }
 
-// MARK: - Select
-@objcMembers class Select: NSObject, Codable {
-    let select: Int
-
-    enum CodingKeys: String, CodingKey {
-        case select = "select"
-    }
-
-    init(select: Int) {
-        self.select = select
-    }
-}
-
-// MARK: Select convenience initializers and mutators
-
-extension Select {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Select.self, from: data)
-        self.init(select: me.select)
-    }
-
-    convenience 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)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        select: Int? = nil
-    ) -> Select {
-        return Select(
-            select: select ?? self.select
-        )
-    }
-
-    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: - Obj5
 @objcMembers class Obj5: NSObject, Codable {
     let dummy: Int
@@ -14130,6 +14184,7 @@ extension Select {
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let select: Select
     let sendable: Sendable
     let serialDescriptor: SerialDescriptor
     let serialName: SerialName
@@ -14158,6 +14213,7 @@ extension Select {
     let timeOnly: TimeOnly
     let timeOnlyConverter: TimeOnlyConverter
     let timeZone: TimeZoneClass
+    let toDict: ToDict
     let toJSON: ToJSON
     let toString: ToString
     let topLevel: TopLevelClass
@@ -14172,10 +14228,9 @@ extension Select {
     let unchecked: Unchecked
     let undefined: Undefined
     let union: Union
+    let unmarshalJSON: UnmarshalJSON
     let unsafe: Unsafe
-    let unsigned: Unsigned
     let useSerializers: UseSerializers
-    let ushort: Ushort
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -14197,6 +14252,7 @@ extension Select {
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case select = "select"
         case sendable = "Sendable"
         case serialDescriptor = "SerialDescriptor"
         case serialName = "SerialName"
@@ -14225,6 +14281,7 @@ extension Select {
         case timeOnly = "TimeOnly"
         case timeOnlyConverter = "TimeOnlyConverter"
         case timeZone = "TimeZone"
+        case toDict = "to_dict"
         case toJSON = "to_json"
         case toString = "toString"
         case topLevel = "top_level"
@@ -14239,13 +14296,12 @@ extension Select {
         case unchecked = "unchecked"
         case undefined = "undefined"
         case union = "union"
+        case unmarshalJSON = "UnmarshalJSON"
         case unsafe = "unsafe"
-        case unsigned = "unsigned"
         case useSerializers = "UseSerializers"
-        case ushort = "ushort"
     }
 
-    init(dummy: Int, kSerializer: KSerializer, obj5Self: SelfClass, obj5Set: Set, obj5Static: Static, obj5Struct: Struct, obj5Subscript: Subscript, obj5Super: Super, obj5Switch: Switch, obj5Throw: Throw, obj5Throws: Throws, obj5True: True, obj5Try: Try, obj5Type: Obj5Type, obj5Typealias: Typealias, obj5Unowned: Unowned, primitiveKind: PrimitiveKind, purpleSelf: Obj5Self, purpleTrue: TrueClass, sendable: Sendable, serialDescriptor: SerialDescriptor, serialName: SerialName, serializable: Serializable, serialize: Serialize, serializerProvider: SerializerProvider, short: Short, signed: Signed, simpleModule: SimpleModule, sizeof: Sizeof, stackalloc: Stackalloc, standards: Standards, staticAssert: StaticAssert, staticCast: StaticCast, stdDeserializer: StdDeserializer, stdSerializer: StdSerializer, strictfp: Strictfp, string: StringClass, symbol: Symbol, synchronized: Synchronized, system: System, template: Template, then: Then, this: This, threadLocal: ThreadLocal, timeOnly: TimeOnly, timeOnlyConverter: TimeOnlyConverter, timeZone: TimeZoneClass, toJSON: ToJSON, toString: ToString, topLevel: TopLevelClass, transient: Transient, type: TypeClass, typedef: Typedef, typeid: Typeid, typename: Typename, typeof: Typeof, uint: Uint, ulong: Ulong, unchecked: Unchecked, undefined: Undefined, union: Union, unsafe: Unsafe, unsigned: Unsigned, useSerializers: UseSerializers, ushort: Ushort) {
+    init(dummy: Int, kSerializer: KSerializer, obj5Self: SelfClass, obj5Set: Set, obj5Static: Static, obj5Struct: Struct, obj5Subscript: Subscript, obj5Super: Super, obj5Switch: Switch, obj5Throw: Throw, obj5Throws: Throws, obj5True: True, obj5Try: Try, obj5Type: Obj5Type, obj5Typealias: Typealias, obj5Unowned: Unowned, primitiveKind: PrimitiveKind, purpleSelf: Obj5Self, purpleTrue: TrueClass, select: Select, sendable: Sendable, serialDescriptor: SerialDescriptor, serialName: SerialName, serializable: Serializable, serialize: Serialize, serializerProvider: SerializerProvider, short: Short, signed: Signed, simpleModule: SimpleModule, sizeof: Sizeof, stackalloc: Stackalloc, standards: Standards, staticAssert: StaticAssert, staticCast: StaticCast, stdDeserializer: StdDeserializer, stdSerializer: StdSerializer, strictfp: Strictfp, string: StringClass, symbol: Symbol, synchronized: Synchronized, system: System, template: Template, then: Then, this: This, threadLocal: ThreadLocal, timeOnly: TimeOnly, timeOnlyConverter: TimeOnlyConverter, timeZone: TimeZoneClass, toDict: ToDict, toJSON: ToJSON, toString: ToString, topLevel: TopLevelClass, transient: Transient, type: TypeClass, typedef: Typedef, typeid: Typeid, typename: Typename, typeof: Typeof, uint: Uint, ulong: Ulong, unchecked: Unchecked, undefined: Undefined, union: Union, unmarshalJSON: UnmarshalJSON, unsafe: Unsafe, useSerializers: UseSerializers) {
         self.dummy = dummy
         self.kSerializer = kSerializer
         self.obj5Self = obj5Self
@@ -14265,6 +14321,7 @@ extension Select {
         self.primitiveKind = primitiveKind
         self.purpleSelf = purpleSelf
         self.purpleTrue = purpleTrue
+        self.select = select
         self.sendable = sendable
         self.serialDescriptor = serialDescriptor
         self.serialName = serialName
@@ -14293,6 +14350,7 @@ extension Select {
         self.timeOnly = timeOnly
         self.timeOnlyConverter = timeOnlyConverter
         self.timeZone = timeZone
+        self.toDict = toDict
         self.toJSON = toJSON
         self.toString = toString
         self.topLevel = topLevel
@@ -14307,10 +14365,9 @@ extension Select {
         self.unchecked = unchecked
         self.undefined = undefined
         self.union = union
+        self.unmarshalJSON = unmarshalJSON
         self.unsafe = unsafe
-        self.unsigned = unsigned
         self.useSerializers = useSerializers
-        self.ushort = ushort
     }
 }
 
@@ -14319,7 +14376,7 @@ extension Select {
 extension Obj5 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj5.self, from: data)
-        self.init(dummy: me.dummy, kSerializer: me.kSerializer, obj5Self: me.obj5Self, obj5Set: me.obj5Set, obj5Static: me.obj5Static, obj5Struct: me.obj5Struct, obj5Subscript: me.obj5Subscript, obj5Super: me.obj5Super, obj5Switch: me.obj5Switch, obj5Throw: me.obj5Throw, obj5Throws: me.obj5Throws, obj5True: me.obj5True, obj5Try: me.obj5Try, obj5Type: me.obj5Type, obj5Typealias: me.obj5Typealias, obj5Unowned: me.obj5Unowned, primitiveKind: me.primitiveKind, purpleSelf: me.purpleSelf, purpleTrue: me.purpleTrue, sendable: me.sendable, serialDescriptor: me.serialDescriptor, serialName: me.serialName, serializable: me.serializable, serialize: me.serialize, serializerProvider: me.serializerProvider, short: me.short, signed: me.signed, simpleModule: me.simpleModule, sizeof: me.sizeof, stackalloc: me.stackalloc, standards: me.standards, staticAssert: me.staticAssert, staticCast: me.staticCast, stdDeserializer: me.stdDeserializer, stdSerializer: me.stdSerializer, strictfp: me.strictfp, string: me.string, symbol: me.symbol, synchronized: me.synchronized, system: me.system, template: me.template, then: me.then, this: me.this, threadLocal: me.threadLocal, timeOnly: me.timeOnly, timeOnlyConverter: me.timeOnlyConverter, timeZone: me.timeZone, toJSON: me.toJSON, toString: me.toString, topLevel: me.topLevel, transient: me.transient, type: me.type, typedef: me.typedef, typeid: me.typeid, typename: me.typename, typeof: me.typeof, uint: me.uint, ulong: me.ulong, unchecked: me.unchecked, undefined: me.undefined, union: me.union, unsafe: me.unsafe, unsigned: me.unsigned, useSerializers: me.useSerializers, ushort: me.ushort)
+        self.init(dummy: me.dummy, kSerializer: me.kSerializer, obj5Self: me.obj5Self, obj5Set: me.obj5Set, obj5Static: me.obj5Static, obj5Struct: me.obj5Struct, obj5Subscript: me.obj5Subscript, obj5Super: me.obj5Super, obj5Switch: me.obj5Switch, obj5Throw: me.obj5Throw, obj5Throws: me.obj5Throws, obj5True: me.obj5True, obj5Try: me.obj5Try, obj5Type: me.obj5Type, obj5Typealias: me.obj5Typealias, obj5Unowned: me.obj5Unowned, primitiveKind: me.primitiveKind, purpleSelf: me.purpleSelf, purpleTrue: me.purpleTrue, select: me.select, sendable: me.sendable, serialDescriptor: me.serialDescriptor, serialName: me.serialName, serializable: me.serializable, serialize: me.serialize, serializerProvider: me.serializerProvider, short: me.short, signed: me.signed, simpleModule: me.simpleModule, sizeof: me.sizeof, stackalloc: me.stackalloc, standards: me.standards, staticAssert: me.staticAssert, staticCast: me.staticCast, stdDeserializer: me.stdDeserializer, stdSerializer: me.stdSerializer, strictfp: me.strictfp, string: me.string, symbol: me.symbol, synchronized: me.synchronized, system: me.system, template: me.template, then: me.then, this: me.this, threadLocal: me.threadLocal, timeOnly: me.timeOnly, timeOnlyConverter: me.timeOnlyConverter, timeZone: me.timeZone, toDict: me.toDict, toJSON: me.toJSON, toString: me.toString, topLevel: me.topLevel, transient: me.transient, type: me.type, typedef: me.typedef, typeid: me.typeid, typename: me.typename, typeof: me.typeof, uint: me.uint, ulong: me.ulong, unchecked: me.unchecked, undefined: me.undefined, union: me.union, unmarshalJSON: me.unmarshalJSON, unsafe: me.unsafe, useSerializers: me.useSerializers)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -14353,6 +14410,7 @@ extension Obj5 {
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        select: Select? = nil,
         sendable: Sendable? = nil,
         serialDescriptor: SerialDescriptor? = nil,
         serialName: SerialName? = nil,
@@ -14381,6 +14439,7 @@ extension Obj5 {
         timeOnly: TimeOnly? = nil,
         timeOnlyConverter: TimeOnlyConverter? = nil,
         timeZone: TimeZoneClass? = nil,
+        toDict: ToDict? = nil,
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
@@ -14395,10 +14454,9 @@ extension Obj5 {
         unchecked: Unchecked? = nil,
         undefined: Undefined? = nil,
         union: Union? = nil,
+        unmarshalJSON: UnmarshalJSON? = nil,
         unsafe: Unsafe? = nil,
-        unsigned: Unsigned? = nil,
-        useSerializers: UseSerializers? = nil,
-        ushort: Ushort? = nil
+        useSerializers: UseSerializers? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
@@ -14420,6 +14478,7 @@ extension Obj5 {
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            select: select ?? self.select,
             sendable: sendable ?? self.sendable,
             serialDescriptor: serialDescriptor ?? self.serialDescriptor,
             serialName: serialName ?? self.serialName,
@@ -14448,6 +14507,7 @@ extension Obj5 {
             timeOnly: timeOnly ?? self.timeOnly,
             timeOnlyConverter: timeOnlyConverter ?? self.timeOnlyConverter,
             timeZone: timeZone ?? self.timeZone,
+            toDict: toDict ?? self.toDict,
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
@@ -14462,10 +14522,9 @@ extension Obj5 {
             unchecked: unchecked ?? self.unchecked,
             undefined: undefined ?? self.undefined,
             union: union ?? self.union,
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON,
             unsafe: unsafe ?? self.unsafe,
-            unsigned: unsigned ?? self.unsigned,
-            useSerializers: useSerializers ?? self.useSerializers,
-            ushort: ushort ?? self.ushort
+            useSerializers: useSerializers ?? self.useSerializers
         )
     }
 
@@ -15360,6 +15419,55 @@ extension TrueClass {
     }
 }
 
+// MARK: - Select
+@objcMembers class Select: NSObject, Codable {
+    let select: Int
+
+    enum CodingKeys: String, CodingKey {
+        case select = "select"
+    }
+
+    init(select: Int) {
+        self.select = select
+    }
+}
+
+// MARK: Select convenience initializers and mutators
+
+extension Select {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Select.self, from: data)
+        self.init(select: me.select)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        select: Int? = nil
+    ) -> Select {
+        return Select(
+            select: select ?? self.select
+        )
+    }
+
+    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: - Sendable
 @objcMembers class Sendable: NSObject, Codable {
     let sendable: Int
@@ -16732,6 +16840,55 @@ extension TimeZoneClass {
     }
 }
 
+// MARK: - ToDict
+@objcMembers class ToDict: NSObject, Codable {
+    let toDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case toDict = "to_dict"
+    }
+
+    init(toDict: Int) {
+        self.toDict = toDict
+    }
+}
+
+// MARK: ToDict convenience initializers and mutators
+
+extension ToDict {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ToDict.self, from: data)
+        self.init(toDict: me.toDict)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        toDict: Int? = nil
+    ) -> ToDict {
+        return ToDict(
+            toDict: toDict ?? self.toDict
+        )
+    }
+
+    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: - ToJSON
 @objcMembers class ToJSON: NSObject, Codable {
     let toJSON: Int
@@ -17418,25 +17575,25 @@ extension Union {
     }
 }
 
-// MARK: - Unsafe
-@objcMembers class Unsafe: NSObject, Codable {
-    let unsafe: Int
+// MARK: - UnmarshalJSON
+@objcMembers class UnmarshalJSON: NSObject, Codable {
+    let unmarshalJSON: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsafe = "unsafe"
+        case unmarshalJSON = "UnmarshalJSON"
     }
 
-    init(unsafe: Int) {
-        self.unsafe = unsafe
+    init(unmarshalJSON: Int) {
+        self.unmarshalJSON = unmarshalJSON
     }
 }
 
-// MARK: Unsafe convenience initializers and mutators
+// MARK: UnmarshalJSON convenience initializers and mutators
 
-extension Unsafe {
+extension UnmarshalJSON {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Unsafe.self, from: data)
-        self.init(unsafe: me.unsafe)
+        let me = try newJSONDecoder().decode(UnmarshalJSON.self, from: data)
+        self.init(unmarshalJSON: me.unmarshalJSON)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17451,10 +17608,10 @@ extension Unsafe {
     }
 
     func with(
-        unsafe: Int? = nil
-    ) -> Unsafe {
-        return Unsafe(
-            unsafe: unsafe ?? self.unsafe
+        unmarshalJSON: Int? = nil
+    ) -> UnmarshalJSON {
+        return UnmarshalJSON(
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON
         )
     }
 
@@ -17467,25 +17624,25 @@ extension Unsafe {
     }
 }
 
-// MARK: - Unsigned
-@objcMembers class Unsigned: NSObject, Codable {
-    let unsigned: Int
+// MARK: - Unsafe
+@objcMembers class Unsafe: NSObject, Codable {
+    let unsafe: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsigned = "unsigned"
+        case unsafe = "unsafe"
     }
 
-    init(unsigned: Int) {
-        self.unsigned = unsigned
+    init(unsafe: Int) {
+        self.unsafe = unsafe
     }
 }
 
-// MARK: Unsigned convenience initializers and mutators
+// MARK: Unsafe convenience initializers and mutators
 
-extension Unsigned {
+extension Unsafe {
     convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Unsigned.self, from: data)
-        self.init(unsigned: me.unsigned)
+        let me = try newJSONDecoder().decode(Unsafe.self, from: data)
+        self.init(unsafe: me.unsafe)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17500,10 +17657,10 @@ extension Unsigned {
     }
 
     func with(
-        unsigned: Int? = nil
-    ) -> Unsigned {
-        return Unsigned(
-            unsigned: unsigned ?? self.unsigned
+        unsafe: Int? = nil
+    ) -> Unsafe {
+        return Unsafe(
+            unsafe: unsafe ?? self.unsafe
         )
     }
 
@@ -17565,55 +17722,6 @@ extension UseSerializers {
     }
 }
 
-// MARK: - Ushort
-@objcMembers class Ushort: NSObject, Codable {
-    let ushort: Int
-
-    enum CodingKeys: String, CodingKey {
-        case ushort = "ushort"
-    }
-
-    init(ushort: Int) {
-        self.ushort = ushort
-    }
-}
-
-// MARK: Ushort convenience initializers and mutators
-
-extension Ushort {
-    convenience init(data: Data) throws {
-        let me = try newJSONDecoder().decode(Ushort.self, from: data)
-        self.init(ushort: me.ushort)
-    }
-
-    convenience 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)
-    }
-
-    convenience init(fromURL url: URL) throws {
-        try self.init(data: try Data(contentsOf: url))
-    }
-
-    func with(
-        ushort: Int? = nil
-    ) -> Ushort {
-        return Ushort(
-            ushort: ushort ?? self.ushort
-        )
-    }
-
-    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: - Obj6
 @objcMembers class Obj6: NSObject, Codable {
     let dummy: Int
@@ -17622,6 +17730,8 @@ extension Ushort {
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let unsigned: Unsigned
+    let ushort: Ushort
     let using: Using
     let utf8JSONReader: Utf8JSONReader
     let utf8JSONWriter: Utf8JSONWriter
@@ -17643,6 +17753,8 @@ extension Ushort {
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case unsigned = "unsigned"
+        case ushort = "ushort"
         case using = "using"
         case utf8JSONReader = "Utf8JsonReader"
         case utf8JSONWriter = "Utf8JsonWriter"
@@ -17658,13 +17770,15 @@ extension Ushort {
         case yield = "yield"
     }
 
-    init(dummy: Int, obj6Var: Var, obj6Weak: Weak, obj6Where: Where, obj6While: While, obj6WillSet: WillSet, using: Using, utf8JSONReader: Utf8JSONReader, utf8JSONWriter: Utf8JSONWriter, uuid: UUIDClass, virtual: Virtual, void: Void, volatile: Volatile, wcharT: WcharT, with: With, xor: Xor, xorEq: XorEq, yes: Yes, yield: Yield) {
+    init(dummy: Int, obj6Var: Var, obj6Weak: Weak, obj6Where: Where, obj6While: While, obj6WillSet: WillSet, unsigned: Unsigned, ushort: Ushort, using: Using, utf8JSONReader: Utf8JSONReader, utf8JSONWriter: Utf8JSONWriter, uuid: UUIDClass, virtual: Virtual, void: Void, volatile: Volatile, wcharT: WcharT, with: With, xor: Xor, xorEq: XorEq, yes: Yes, yield: Yield) {
         self.dummy = dummy
         self.obj6Var = obj6Var
         self.obj6Weak = obj6Weak
         self.obj6Where = obj6Where
         self.obj6While = obj6While
         self.obj6WillSet = obj6WillSet
+        self.unsigned = unsigned
+        self.ushort = ushort
         self.using = using
         self.utf8JSONReader = utf8JSONReader
         self.utf8JSONWriter = utf8JSONWriter
@@ -17686,7 +17800,7 @@ extension Ushort {
 extension Obj6 {
     convenience init(data: Data) throws {
         let me = try newJSONDecoder().decode(Obj6.self, from: data)
-        self.init(dummy: me.dummy, obj6Var: me.obj6Var, obj6Weak: me.obj6Weak, obj6Where: me.obj6Where, obj6While: me.obj6While, obj6WillSet: me.obj6WillSet, using: me.using, utf8JSONReader: me.utf8JSONReader, utf8JSONWriter: me.utf8JSONWriter, uuid: me.uuid, virtual: me.virtual, void: me.void, volatile: me.volatile, wcharT: me.wcharT, with: me.with, xor: me.xor, xorEq: me.xorEq, yes: me.yes, yield: me.yield)
+        self.init(dummy: me.dummy, obj6Var: me.obj6Var, obj6Weak: me.obj6Weak, obj6Where: me.obj6Where, obj6While: me.obj6While, obj6WillSet: me.obj6WillSet, unsigned: me.unsigned, ushort: me.ushort, using: me.using, utf8JSONReader: me.utf8JSONReader, utf8JSONWriter: me.utf8JSONWriter, uuid: me.uuid, virtual: me.virtual, void: me.void, volatile: me.volatile, wcharT: me.wcharT, with: me.with, xor: me.xor, xorEq: me.xorEq, yes: me.yes, yield: me.yield)
     }
 
     convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17707,6 +17821,8 @@ extension Obj6 {
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        unsigned: Unsigned? = nil,
+        ushort: Ushort? = nil,
         using: Using? = nil,
         utf8JSONReader: Utf8JSONReader? = nil,
         utf8JSONWriter: Utf8JSONWriter? = nil,
@@ -17728,6 +17844,8 @@ extension Obj6 {
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            unsigned: unsigned ?? self.unsigned,
+            ushort: ushort ?? self.ushort,
             using: using ?? self.using,
             utf8JSONReader: utf8JSONReader ?? self.utf8JSONReader,
             utf8JSONWriter: utf8JSONWriter ?? self.utf8JSONWriter,
@@ -17998,6 +18116,104 @@ extension WillSet {
     }
 }
 
+// MARK: - Unsigned
+@objcMembers class Unsigned: NSObject, Codable {
+    let unsigned: Int
+
+    enum CodingKeys: String, CodingKey {
+        case unsigned = "unsigned"
+    }
+
+    init(unsigned: Int) {
+        self.unsigned = unsigned
+    }
+}
+
+// MARK: Unsigned convenience initializers and mutators
+
+extension Unsigned {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Unsigned.self, from: data)
+        self.init(unsigned: me.unsigned)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        unsigned: Int? = nil
+    ) -> Unsigned {
+        return Unsigned(
+            unsigned: unsigned ?? self.unsigned
+        )
+    }
+
+    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: - Ushort
+@objcMembers class Ushort: NSObject, Codable {
+    let ushort: Int
+
+    enum CodingKeys: String, CodingKey {
+        case ushort = "ushort"
+    }
+
+    init(ushort: Int) {
+        self.ushort = ushort
+    }
+}
+
+// MARK: Ushort convenience initializers and mutators
+
+extension Ushort {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Ushort.self, from: data)
+        self.init(ushort: me.ushort)
+    }
+
+    convenience 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)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ushort: Int? = nil
+    ) -> Ushort {
+        return Ushort(
+            ushort: ushort ?? self.ushort
+        )
+    }
+
+    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: - Using
 @objcMembers class Using: NSObject, Codable {
     let using: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
index c98348b..97ff92d 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/protocol-equatable--bd9068f466c1/quicktype.swift
@@ -3636,11 +3636,11 @@ struct Obj2: Codable, Equatable {
     let formatException: FormatException
     let friend: Friend
     let from: From
+    let fromDict: FromDict
     let fromJSON: FromJSON
     let function: Function
     let global: Global
     let go: Go
-    let goto: Goto
     let obj2Default: Default
     let obj2Defer: Defer
     let obj2Deinit: Deinit
@@ -3703,11 +3703,11 @@ struct Obj2: Codable, Equatable {
         case formatException = "FormatException"
         case friend = "friend"
         case from = "from"
+        case fromDict = "from_dict"
         case fromJSON = "from_json"
         case function = "function"
         case global = "global"
         case go = "go"
-        case goto = "goto"
         case obj2Default = "default"
         case obj2Defer = "defer"
         case obj2Deinit = "deinit"
@@ -3790,11 +3790,11 @@ extension Obj2 {
         formatException: FormatException? = nil,
         friend: Friend? = nil,
         from: From? = nil,
+        fromDict: FromDict? = nil,
         fromJSON: FromJSON? = nil,
         function: Function? = nil,
         global: Global? = nil,
         go: Go? = nil,
-        goto: Goto? = nil,
         obj2Default: Default? = nil,
         obj2Defer: Defer? = nil,
         obj2Deinit: Deinit? = nil,
@@ -3857,11 +3857,11 @@ extension Obj2 {
             formatException: formatException ?? self.formatException,
             friend: friend ?? self.friend,
             from: from ?? self.from,
+            fromDict: fromDict ?? self.fromDict,
             fromJSON: fromJSON ?? self.fromJSON,
             function: function ?? self.function,
             global: global ?? self.global,
             go: go ?? self.go,
-            goto: goto ?? self.goto,
             obj2Default: obj2Default ?? self.obj2Default,
             obj2Defer: obj2Defer ?? self.obj2Defer,
             obj2Deinit: obj2Deinit ?? self.obj2Deinit,
@@ -6002,6 +6002,56 @@ extension From {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - FromDict
+struct FromDict: Codable, Equatable {
+    let fromDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case fromDict = "from_dict"
+    }
+}
+
+// MARK: FromDict convenience initializers and mutators
+
+extension FromDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FromDict.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(
+        fromDict: Int? = nil
+    ) -> FromDict {
+        return FromDict(
+            fromDict: fromDict ?? self.fromDict
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - FromJSON
 struct FromJSON: Codable, Equatable {
     let fromJSON: Int
@@ -6202,56 +6252,6 @@ extension Go {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Goto
-struct Goto: Codable, Equatable {
-    let goto: Int
-
-    enum CodingKeys: String, CodingKey {
-        case goto = "goto"
-    }
-}
-
-// MARK: Goto convenience initializers and mutators
-
-extension Goto {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Goto.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(
-        goto: Int? = nil
-    ) -> Goto {
-        return Goto(
-            goto: goto ?? self.goto
-        )
-    }
-
-    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)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Default
 struct Default: Codable, Equatable {
     let defaultDefault: Int
@@ -7105,6 +7105,7 @@ extension FalseClass {
 // MARK: - Obj3
 struct Obj3: Codable, Equatable {
     let dummy: Int
+    let goto: Goto
     let hasOwnProperty: HasOwnProperty
     let hashCode: HashCode
     let hashable: HashableClass
@@ -7144,6 +7145,7 @@ struct Obj3: Codable, Equatable {
     let long: Long
     let map: Map
     let mapEntry: MapEntry
+    let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
     let mutable: Mutable
@@ -7152,7 +7154,6 @@ struct Obj3: Codable, Equatable {
     let new: New
     let newtonsoft: Newtonsoft
     let no: No
-    let noexcept: Noexcept
     let obj3Guard: Guard
     let obj3If: If
     let obj3Import: Import
@@ -7172,6 +7173,7 @@ struct Obj3: Codable, Equatable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case goto = "goto"
         case hasOwnProperty = "hasOwnProperty"
         case hashCode = "hashCode"
         case hashable = "Hashable"
@@ -7211,6 +7213,7 @@ struct Obj3: Codable, Equatable {
         case long = "long"
         case map = "map"
         case mapEntry = "MapEntry"
+        case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
         case mutable = "mutable"
@@ -7219,7 +7222,6 @@ struct Obj3: Codable, Equatable {
         case new = "new"
         case newtonsoft = "newtonsoft"
         case no = "NO"
-        case noexcept = "noexcept"
         case obj3Guard = "guard"
         case obj3If = "if"
         case obj3Import = "import"
@@ -7259,6 +7261,7 @@ extension Obj3 {
 
     func with(
         dummy: Int? = nil,
+        goto: Goto? = nil,
         hasOwnProperty: HasOwnProperty? = nil,
         hashCode: HashCode? = nil,
         hashable: HashableClass? = nil,
@@ -7298,6 +7301,7 @@ extension Obj3 {
         long: Long? = nil,
         map: Map? = nil,
         mapEntry: MapEntry? = nil,
+        marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
         mutable: Mutable? = nil,
@@ -7306,7 +7310,6 @@ extension Obj3 {
         new: New? = nil,
         newtonsoft: Newtonsoft? = nil,
         no: No? = nil,
-        noexcept: Noexcept? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
         obj3Import: Import? = nil,
@@ -7326,6 +7329,7 @@ extension Obj3 {
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
+            goto: goto ?? self.goto,
             hasOwnProperty: hasOwnProperty ?? self.hasOwnProperty,
             hashCode: hashCode ?? self.hashCode,
             hashable: hashable ?? self.hashable,
@@ -7365,6 +7369,7 @@ extension Obj3 {
             long: long ?? self.long,
             map: map ?? self.map,
             mapEntry: mapEntry ?? self.mapEntry,
+            marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
             mutable: mutable ?? self.mutable,
@@ -7373,7 +7378,6 @@ extension Obj3 {
             new: new ?? self.new,
             newtonsoft: newtonsoft ?? self.newtonsoft,
             no: no ?? self.no,
-            noexcept: noexcept ?? self.noexcept,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
             obj3Import: obj3Import ?? self.obj3Import,
@@ -7408,6 +7412,56 @@ extension Obj3 {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Goto
+struct Goto: Codable, Equatable {
+    let goto: Int
+
+    enum CodingKeys: String, CodingKey {
+        case goto = "goto"
+    }
+}
+
+// MARK: Goto convenience initializers and mutators
+
+extension Goto {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Goto.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(
+        goto: Int? = nil
+    ) -> Goto {
+        return Goto(
+            goto: goto ?? self.goto
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - HasOwnProperty
 struct HasOwnProperty: Codable, Equatable {
     let hasOwnProperty: Int
@@ -9358,6 +9412,56 @@ extension MapEntry {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - MarshalJSON
+struct MarshalJSON: Codable, Equatable {
+    let marshalJSON: Int
+
+    enum CodingKeys: String, CodingKey {
+        case marshalJSON = "MarshalJSON"
+    }
+}
+
+// MARK: MarshalJSON convenience initializers and mutators
+
+extension MarshalJSON {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MarshalJSON.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(
+        marshalJSON: Int? = nil
+    ) -> MarshalJSON {
+        return MarshalJSON(
+            marshalJSON: marshalJSON ?? self.marshalJSON
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - MetadataPropertyHandling
 struct MetadataPropertyHandling: Codable, Equatable {
     let metadataPropertyHandling: Int
@@ -9758,56 +9862,6 @@ extension No {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Noexcept
-struct Noexcept: Codable, Equatable {
-    let noexcept: Int
-
-    enum CodingKeys: String, CodingKey {
-        case noexcept = "noexcept"
-    }
-}
-
-// MARK: Noexcept convenience initializers and mutators
-
-extension Noexcept {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Noexcept.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(
-        noexcept: Int? = nil
-    ) -> Noexcept {
-        return Noexcept(
-            noexcept: noexcept ?? self.noexcept
-        )
-    }
-
-    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)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Guard
 struct Guard: Codable, Equatable {
     let guardGuard: Int
@@ -10612,6 +10666,7 @@ extension Nil {
 struct Obj4: Codable, Equatable {
     let dummy: Int
     let noSuchMethod: NoSuchMethod
+    let noexcept: Noexcept
     let nonatomic: Nonatomic
     let none: None
     let nonlocal: Nonlocal
@@ -10674,11 +10729,11 @@ struct Obj4: Codable, Equatable {
     let sbyte: Sbyte
     let sealed: Sealed
     let sel: Sel
-    let select: Select
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case noSuchMethod = "noSuchMethod"
+        case noexcept = "noexcept"
         case nonatomic = "nonatomic"
         case none = "None"
         case nonlocal = "nonlocal"
@@ -10741,7 +10796,6 @@ struct Obj4: Codable, Equatable {
         case sbyte = "sbyte"
         case sealed = "sealed"
         case sel = "SEL"
-        case select = "select"
     }
 }
 
@@ -10766,6 +10820,7 @@ extension Obj4 {
     func with(
         dummy: Int? = nil,
         noSuchMethod: NoSuchMethod? = nil,
+        noexcept: Noexcept? = nil,
         nonatomic: Nonatomic? = nil,
         none: None? = nil,
         nonlocal: Nonlocal? = nil,
@@ -10827,12 +10882,12 @@ extension Obj4 {
         s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
-        sel: Sel? = nil,
-        select: Select? = nil
+        sel: Sel? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
             noSuchMethod: noSuchMethod ?? self.noSuchMethod,
+            noexcept: noexcept ?? self.noexcept,
             nonatomic: nonatomic ?? self.nonatomic,
             none: none ?? self.none,
             nonlocal: nonlocal ?? self.nonlocal,
@@ -10894,8 +10949,7 @@ extension Obj4 {
             s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
-            sel: sel ?? self.sel,
-            select: select ?? self.select
+            sel: sel ?? self.sel
         )
     }
 
@@ -10964,12 +11018,62 @@ extension NoSuchMethod {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Nonatomic
-struct Nonatomic: Codable, Equatable {
-    let nonatomic: Int
+// MARK: - Noexcept
+struct Noexcept: Codable, Equatable {
+    let noexcept: Int
 
     enum CodingKeys: String, CodingKey {
-        case nonatomic = "nonatomic"
+        case noexcept = "noexcept"
+    }
+}
+
+// MARK: Noexcept convenience initializers and mutators
+
+extension Noexcept {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Noexcept.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(
+        noexcept: Int? = nil
+    ) -> Noexcept {
+        return Noexcept(
+            noexcept: noexcept ?? self.noexcept
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Nonatomic
+struct Nonatomic: Codable, Equatable {
+    let nonatomic: Int
+
+    enum CodingKeys: String, CodingKey {
+        case nonatomic = "nonatomic"
     }
 }
 
@@ -14064,56 +14168,6 @@ extension Sel {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Select
-struct Select: Codable, Equatable {
-    let select: Int
-
-    enum CodingKeys: String, CodingKey {
-        case select = "select"
-    }
-}
-
-// MARK: Select convenience initializers and mutators
-
-extension Select {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Select.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(
-        select: Int? = nil
-    ) -> Select {
-        return Select(
-            select: select ?? self.select
-        )
-    }
-
-    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)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Obj5
 struct Obj5: Codable, Equatable {
     let dummy: Int
@@ -14135,6 +14189,7 @@ struct Obj5: Codable, Equatable {
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let select: Select
     let sendable: Sendable
     let serialDescriptor: SerialDescriptor
     let serialName: SerialName
@@ -14163,6 +14218,7 @@ struct Obj5: Codable, Equatable {
     let timeOnly: TimeOnly
     let timeOnlyConverter: TimeOnlyConverter
     let timeZone: TimeZoneClass
+    let toDict: ToDict
     let toJSON: ToJSON
     let toString: ToString
     let topLevel: TopLevelClass
@@ -14177,10 +14233,9 @@ struct Obj5: Codable, Equatable {
     let unchecked: Unchecked
     let undefined: Undefined
     let union: Union
+    let unmarshalJSON: UnmarshalJSON
     let unsafe: Unsafe
-    let unsigned: Unsigned
     let useSerializers: UseSerializers
-    let ushort: Ushort
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -14202,6 +14257,7 @@ struct Obj5: Codable, Equatable {
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case select = "select"
         case sendable = "Sendable"
         case serialDescriptor = "SerialDescriptor"
         case serialName = "SerialName"
@@ -14230,6 +14286,7 @@ struct Obj5: Codable, Equatable {
         case timeOnly = "TimeOnly"
         case timeOnlyConverter = "TimeOnlyConverter"
         case timeZone = "TimeZone"
+        case toDict = "to_dict"
         case toJSON = "to_json"
         case toString = "toString"
         case topLevel = "top_level"
@@ -14244,10 +14301,9 @@ struct Obj5: Codable, Equatable {
         case unchecked = "unchecked"
         case undefined = "undefined"
         case union = "union"
+        case unmarshalJSON = "UnmarshalJSON"
         case unsafe = "unsafe"
-        case unsigned = "unsigned"
         case useSerializers = "UseSerializers"
-        case ushort = "ushort"
     }
 }
 
@@ -14289,6 +14345,7 @@ extension Obj5 {
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        select: Select? = nil,
         sendable: Sendable? = nil,
         serialDescriptor: SerialDescriptor? = nil,
         serialName: SerialName? = nil,
@@ -14317,6 +14374,7 @@ extension Obj5 {
         timeOnly: TimeOnly? = nil,
         timeOnlyConverter: TimeOnlyConverter? = nil,
         timeZone: TimeZoneClass? = nil,
+        toDict: ToDict? = nil,
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
@@ -14331,10 +14389,9 @@ extension Obj5 {
         unchecked: Unchecked? = nil,
         undefined: Undefined? = nil,
         union: Union? = nil,
+        unmarshalJSON: UnmarshalJSON? = nil,
         unsafe: Unsafe? = nil,
-        unsigned: Unsigned? = nil,
-        useSerializers: UseSerializers? = nil,
-        ushort: Ushort? = nil
+        useSerializers: UseSerializers? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
@@ -14356,6 +14413,7 @@ extension Obj5 {
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            select: select ?? self.select,
             sendable: sendable ?? self.sendable,
             serialDescriptor: serialDescriptor ?? self.serialDescriptor,
             serialName: serialName ?? self.serialName,
@@ -14384,6 +14442,7 @@ extension Obj5 {
             timeOnly: timeOnly ?? self.timeOnly,
             timeOnlyConverter: timeOnlyConverter ?? self.timeOnlyConverter,
             timeZone: timeZone ?? self.timeZone,
+            toDict: toDict ?? self.toDict,
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
@@ -14398,10 +14457,9 @@ extension Obj5 {
             unchecked: unchecked ?? self.unchecked,
             undefined: undefined ?? self.undefined,
             union: union ?? self.union,
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON,
             unsafe: unsafe ?? self.unsafe,
-            unsigned: unsigned ?? self.unsigned,
-            useSerializers: useSerializers ?? self.useSerializers,
-            ushort: ushort ?? self.ushort
+            useSerializers: useSerializers ?? self.useSerializers
         )
     }
 
@@ -15320,6 +15378,56 @@ extension TrueClass {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Select
+struct Select: Codable, Equatable {
+    let select: Int
+
+    enum CodingKeys: String, CodingKey {
+        case select = "select"
+    }
+}
+
+// MARK: Select convenience initializers and mutators
+
+extension Select {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Select.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(
+        select: Int? = nil
+    ) -> Select {
+        return Select(
+            select: select ?? self.select
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Sendable
 struct Sendable: Codable, Equatable {
     let sendable: Int
@@ -16720,6 +16828,56 @@ extension TimeZoneClass {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - ToDict
+struct ToDict: Codable, Equatable {
+    let toDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case toDict = "to_dict"
+    }
+}
+
+// MARK: ToDict convenience initializers and mutators
+
+extension ToDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ToDict.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(
+        toDict: Int? = nil
+    ) -> ToDict {
+        return ToDict(
+            toDict: toDict ?? self.toDict
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - ToJSON
 struct ToJSON: Codable, Equatable {
     let toJSON: Int
@@ -17420,20 +17578,20 @@ extension Union {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Unsafe
-struct Unsafe: Codable, Equatable {
-    let unsafe: Int
+// MARK: - UnmarshalJSON
+struct UnmarshalJSON: Codable, Equatable {
+    let unmarshalJSON: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsafe = "unsafe"
+        case unmarshalJSON = "UnmarshalJSON"
     }
 }
 
-// MARK: Unsafe convenience initializers and mutators
+// MARK: UnmarshalJSON convenience initializers and mutators
 
-extension Unsafe {
+extension UnmarshalJSON {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsafe.self, from: data)
+        self = try newJSONDecoder().decode(UnmarshalJSON.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17448,10 +17606,10 @@ extension Unsafe {
     }
 
     func with(
-        unsafe: Int? = nil
-    ) -> Unsafe {
-        return Unsafe(
-            unsafe: unsafe ?? self.unsafe
+        unmarshalJSON: Int? = nil
+    ) -> UnmarshalJSON {
+        return UnmarshalJSON(
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON
         )
     }
 
@@ -17470,20 +17628,20 @@ extension Unsafe {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Unsigned
-struct Unsigned: Codable, Equatable {
-    let unsigned: Int
+// MARK: - Unsafe
+struct Unsafe: Codable, Equatable {
+    let unsafe: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsigned = "unsigned"
+        case unsafe = "unsafe"
     }
 }
 
-// MARK: Unsigned convenience initializers and mutators
+// MARK: Unsafe convenience initializers and mutators
 
-extension Unsigned {
+extension Unsafe {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsigned.self, from: data)
+        self = try newJSONDecoder().decode(Unsafe.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -17498,10 +17656,10 @@ extension Unsigned {
     }
 
     func with(
-        unsigned: Int? = nil
-    ) -> Unsigned {
-        return Unsigned(
-            unsigned: unsigned ?? self.unsigned
+        unsafe: Int? = nil
+    ) -> Unsafe {
+        return Unsafe(
+            unsafe: unsafe ?? self.unsafe
         )
     }
 
@@ -17570,56 +17728,6 @@ extension UseSerializers {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
-// MARK: - Ushort
-struct Ushort: Codable, Equatable {
-    let ushort: Int
-
-    enum CodingKeys: String, CodingKey {
-        case ushort = "ushort"
-    }
-}
-
-// MARK: Ushort convenience initializers and mutators
-
-extension Ushort {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Ushort.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(
-        ushort: Int? = nil
-    ) -> Ushort {
-        return Ushort(
-            ushort: ushort ?? self.ushort
-        )
-    }
-
-    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)
-    }
-}
-
-//
-// Hashable or Equatable:
-// The compiler will not be able to synthesize the implementation of Hashable or Equatable
-// for types that require the use of JSONAny, nor will the implementation of Hashable be
-// synthesized for types that have collections (such as arrays or dictionaries).
-
 // MARK: - Obj6
 struct Obj6: Codable, Equatable {
     let dummy: Int
@@ -17628,6 +17736,8 @@ struct Obj6: Codable, Equatable {
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let unsigned: Unsigned
+    let ushort: Ushort
     let using: Using
     let utf8JSONReader: Utf8JSONReader
     let utf8JSONWriter: Utf8JSONWriter
@@ -17649,6 +17759,8 @@ struct Obj6: Codable, Equatable {
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case unsigned = "unsigned"
+        case ushort = "ushort"
         case using = "using"
         case utf8JSONReader = "Utf8JsonReader"
         case utf8JSONWriter = "Utf8JsonWriter"
@@ -17690,6 +17802,8 @@ extension Obj6 {
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        unsigned: Unsigned? = nil,
+        ushort: Ushort? = nil,
         using: Using? = nil,
         utf8JSONReader: Utf8JSONReader? = nil,
         utf8JSONWriter: Utf8JSONWriter? = nil,
@@ -17711,6 +17825,8 @@ extension Obj6 {
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            unsigned: unsigned ?? self.unsigned,
+            ushort: ushort ?? self.ushort,
             using: using ?? self.using,
             utf8JSONReader: utf8JSONReader ?? self.utf8JSONReader,
             utf8JSONWriter: utf8JSONWriter ?? self.utf8JSONWriter,
@@ -17992,6 +18108,106 @@ extension WillSet {
 // for types that require the use of JSONAny, nor will the implementation of Hashable be
 // synthesized for types that have collections (such as arrays or dictionaries).
 
+// MARK: - Unsigned
+struct Unsigned: Codable, Equatable {
+    let unsigned: Int
+
+    enum CodingKeys: String, CodingKey {
+        case unsigned = "unsigned"
+    }
+}
+
+// MARK: Unsigned convenience initializers and mutators
+
+extension Unsigned {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Unsigned.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(
+        unsigned: Int? = nil
+    ) -> Unsigned {
+        return Unsigned(
+            unsigned: unsigned ?? self.unsigned
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Ushort
+struct Ushort: Codable, Equatable {
+    let ushort: Int
+
+    enum CodingKeys: String, CodingKey {
+        case ushort = "ushort"
+    }
+}
+
+// MARK: Ushort convenience initializers and mutators
+
+extension Ushort {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Ushort.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(
+        ushort: Int? = nil
+    ) -> Ushort {
+        return Ushort(
+            ushort: ushort ?? self.ushort
+        )
+    }
+
+    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)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
 // MARK: - Using
 struct Using: Codable, Equatable {
     let using: Int
diff --git a/base/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
index 6194419..5302f45 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/sendable-true--1c3982c78639/quicktype.swift
@@ -3234,11 +3234,11 @@ struct Obj2: Codable, Sendable {
     let formatException: FormatException
     let friend: Friend
     let from: From
+    let fromDict: FromDict
     let fromJSON: FromJSON
     let function: Function
     let global: Global
     let go: Go
-    let goto: Goto
     let obj2Default: Default
     let obj2Defer: Defer
     let obj2Deinit: Deinit
@@ -3301,11 +3301,11 @@ struct Obj2: Codable, Sendable {
         case formatException = "FormatException"
         case friend = "friend"
         case from = "from"
+        case fromDict = "from_dict"
         case fromJSON = "from_json"
         case function = "function"
         case global = "global"
         case go = "go"
-        case goto = "goto"
         case obj2Default = "default"
         case obj2Defer = "defer"
         case obj2Deinit = "deinit"
@@ -3388,11 +3388,11 @@ extension Obj2 {
         formatException: FormatException? = nil,
         friend: Friend? = nil,
         from: From? = nil,
+        fromDict: FromDict? = nil,
         fromJSON: FromJSON? = nil,
         function: Function? = nil,
         global: Global? = nil,
         go: Go? = nil,
-        goto: Goto? = nil,
         obj2Default: Default? = nil,
         obj2Defer: Defer? = nil,
         obj2Deinit: Deinit? = nil,
@@ -3455,11 +3455,11 @@ extension Obj2 {
             formatException: formatException ?? self.formatException,
             friend: friend ?? self.friend,
             from: from ?? self.from,
+            fromDict: fromDict ?? self.fromDict,
             fromJSON: fromJSON ?? self.fromJSON,
             function: function ?? self.function,
             global: global ?? self.global,
             go: go ?? self.go,
-            goto: goto ?? self.goto,
             obj2Default: obj2Default ?? self.obj2Default,
             obj2Defer: obj2Defer ?? self.obj2Defer,
             obj2Deinit: obj2Deinit ?? self.obj2Deinit,
@@ -5342,6 +5342,50 @@ extension From {
     }
 }
 
+// MARK: - FromDict
+struct FromDict: Codable, Sendable {
+    let fromDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case fromDict = "from_dict"
+    }
+}
+
+// MARK: FromDict convenience initializers and mutators
+
+extension FromDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FromDict.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(
+        fromDict: Int? = nil
+    ) -> FromDict {
+        return FromDict(
+            fromDict: fromDict ?? self.fromDict
+        )
+    }
+
+    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: - FromJSON
 struct FromJSON: Codable, Sendable {
     let fromJSON: Int
@@ -5518,50 +5562,6 @@ extension Go {
     }
 }
 
-// MARK: - Goto
-struct Goto: Codable, Sendable {
-    let goto: Int
-
-    enum CodingKeys: String, CodingKey {
-        case goto = "goto"
-    }
-}
-
-// MARK: Goto convenience initializers and mutators
-
-extension Goto {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Goto.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(
-        goto: Int? = nil
-    ) -> Goto {
-        return Goto(
-            goto: goto ?? self.goto
-        )
-    }
-
-    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: - Default
 struct Default: Codable, Sendable {
     let defaultDefault: Int
@@ -6313,6 +6313,7 @@ extension FalseClass {
 // MARK: - Obj3
 struct Obj3: Codable, Sendable {
     let dummy: Int
+    let goto: Goto
     let hasOwnProperty: HasOwnProperty
     let hashCode: HashCode
     let hashable: HashableClass
@@ -6352,6 +6353,7 @@ struct Obj3: Codable, Sendable {
     let long: Long
     let map: Map
     let mapEntry: MapEntry
+    let marshalJSON: MarshalJSON
     let metadataPropertyHandling: MetadataPropertyHandling
     let module: Module
     let mutable: Mutable
@@ -6360,7 +6362,6 @@ struct Obj3: Codable, Sendable {
     let new: New
     let newtonsoft: Newtonsoft
     let no: No
-    let noexcept: Noexcept
     let obj3Guard: Guard
     let obj3If: If
     let obj3Import: Import
@@ -6380,6 +6381,7 @@ struct Obj3: Codable, Sendable {
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
+        case goto = "goto"
         case hasOwnProperty = "hasOwnProperty"
         case hashCode = "hashCode"
         case hashable = "Hashable"
@@ -6419,6 +6421,7 @@ struct Obj3: Codable, Sendable {
         case long = "long"
         case map = "map"
         case mapEntry = "MapEntry"
+        case marshalJSON = "MarshalJSON"
         case metadataPropertyHandling = "metadata_property_handling"
         case module = "module"
         case mutable = "mutable"
@@ -6427,7 +6430,6 @@ struct Obj3: Codable, Sendable {
         case new = "new"
         case newtonsoft = "newtonsoft"
         case no = "NO"
-        case noexcept = "noexcept"
         case obj3Guard = "guard"
         case obj3If = "if"
         case obj3Import = "import"
@@ -6467,6 +6469,7 @@ extension Obj3 {
 
     func with(
         dummy: Int? = nil,
+        goto: Goto? = nil,
         hasOwnProperty: HasOwnProperty? = nil,
         hashCode: HashCode? = nil,
         hashable: HashableClass? = nil,
@@ -6506,6 +6509,7 @@ extension Obj3 {
         long: Long? = nil,
         map: Map? = nil,
         mapEntry: MapEntry? = nil,
+        marshalJSON: MarshalJSON? = nil,
         metadataPropertyHandling: MetadataPropertyHandling? = nil,
         module: Module? = nil,
         mutable: Mutable? = nil,
@@ -6514,7 +6518,6 @@ extension Obj3 {
         new: New? = nil,
         newtonsoft: Newtonsoft? = nil,
         no: No? = nil,
-        noexcept: Noexcept? = nil,
         obj3Guard: Guard? = nil,
         obj3If: If? = nil,
         obj3Import: Import? = nil,
@@ -6534,6 +6537,7 @@ extension Obj3 {
     ) -> Obj3 {
         return Obj3(
             dummy: dummy ?? self.dummy,
+            goto: goto ?? self.goto,
             hasOwnProperty: hasOwnProperty ?? self.hasOwnProperty,
             hashCode: hashCode ?? self.hashCode,
             hashable: hashable ?? self.hashable,
@@ -6573,6 +6577,7 @@ extension Obj3 {
             long: long ?? self.long,
             map: map ?? self.map,
             mapEntry: mapEntry ?? self.mapEntry,
+            marshalJSON: marshalJSON ?? self.marshalJSON,
             metadataPropertyHandling: metadataPropertyHandling ?? self.metadataPropertyHandling,
             module: module ?? self.module,
             mutable: mutable ?? self.mutable,
@@ -6581,7 +6586,6 @@ extension Obj3 {
             new: new ?? self.new,
             newtonsoft: newtonsoft ?? self.newtonsoft,
             no: no ?? self.no,
-            noexcept: noexcept ?? self.noexcept,
             obj3Guard: obj3Guard ?? self.obj3Guard,
             obj3If: obj3If ?? self.obj3If,
             obj3Import: obj3Import ?? self.obj3Import,
@@ -6610,6 +6614,50 @@ extension Obj3 {
     }
 }
 
+// MARK: - Goto
+struct Goto: Codable, Sendable {
+    let goto: Int
+
+    enum CodingKeys: String, CodingKey {
+        case goto = "goto"
+    }
+}
+
+// MARK: Goto convenience initializers and mutators
+
+extension Goto {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Goto.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(
+        goto: Int? = nil
+    ) -> Goto {
+        return Goto(
+            goto: goto ?? self.goto
+        )
+    }
+
+    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: - HasOwnProperty
 struct HasOwnProperty: Codable, Sendable {
     let hasOwnProperty: Int
@@ -8326,6 +8374,50 @@ extension MapEntry {
     }
 }
 
+// MARK: - MarshalJSON
+struct MarshalJSON: Codable, Sendable {
+    let marshalJSON: Int
+
+    enum CodingKeys: String, CodingKey {
+        case marshalJSON = "MarshalJSON"
+    }
+}
+
+// MARK: MarshalJSON convenience initializers and mutators
+
+extension MarshalJSON {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MarshalJSON.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(
+        marshalJSON: Int? = nil
+    ) -> MarshalJSON {
+        return MarshalJSON(
+            marshalJSON: marshalJSON ?? self.marshalJSON
+        )
+    }
+
+    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: - MetadataPropertyHandling
 struct MetadataPropertyHandling: Codable, Sendable {
     let metadataPropertyHandling: Int
@@ -8678,50 +8770,6 @@ extension No {
     }
 }
 
-// MARK: - Noexcept
-struct Noexcept: Codable, Sendable {
-    let noexcept: Int
-
-    enum CodingKeys: String, CodingKey {
-        case noexcept = "noexcept"
-    }
-}
-
-// MARK: Noexcept convenience initializers and mutators
-
-extension Noexcept {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Noexcept.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(
-        noexcept: Int? = nil
-    ) -> Noexcept {
-        return Noexcept(
-            noexcept: noexcept ?? self.noexcept
-        )
-    }
-
-    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: - Guard
 struct Guard: Codable, Sendable {
     let guardGuard: Int
@@ -9430,6 +9478,7 @@ extension Nil {
 struct Obj4: Codable, Sendable {
     let dummy: Int
     let noSuchMethod: NoSuchMethod
+    let noexcept: Noexcept
     let nonatomic: Nonatomic
     let none: None
     let nonlocal: Nonlocal
@@ -9492,11 +9541,11 @@ struct Obj4: Codable, Sendable {
     let sbyte: Sbyte
     let sealed: Sealed
     let sel: Sel
-    let select: Select
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
         case noSuchMethod = "noSuchMethod"
+        case noexcept = "noexcept"
         case nonatomic = "nonatomic"
         case none = "None"
         case nonlocal = "nonlocal"
@@ -9559,7 +9608,6 @@ struct Obj4: Codable, Sendable {
         case sbyte = "sbyte"
         case sealed = "sealed"
         case sel = "SEL"
-        case select = "select"
     }
 }
 
@@ -9584,6 +9632,7 @@ extension Obj4 {
     func with(
         dummy: Int? = nil,
         noSuchMethod: NoSuchMethod? = nil,
+        noexcept: Noexcept? = nil,
         nonatomic: Nonatomic? = nil,
         none: None? = nil,
         nonlocal: Nonlocal? = nil,
@@ -9645,12 +9694,12 @@ extension Obj4 {
         s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
-        sel: Sel? = nil,
-        select: Select? = nil
+        sel: Sel? = nil
     ) -> Obj4 {
         return Obj4(
             dummy: dummy ?? self.dummy,
             noSuchMethod: noSuchMethod ?? self.noSuchMethod,
+            noexcept: noexcept ?? self.noexcept,
             nonatomic: nonatomic ?? self.nonatomic,
             none: none ?? self.none,
             nonlocal: nonlocal ?? self.nonlocal,
@@ -9712,8 +9761,7 @@ extension Obj4 {
             s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
-            sel: sel ?? self.sel,
-            select: select ?? self.select
+            sel: sel ?? self.sel
         )
     }
 
@@ -9770,20 +9818,20 @@ extension NoSuchMethod {
     }
 }
 
-// MARK: - Nonatomic
-struct Nonatomic: Codable, Sendable {
-    let nonatomic: Int
+// MARK: - Noexcept
+struct Noexcept: Codable, Sendable {
+    let noexcept: Int
 
     enum CodingKeys: String, CodingKey {
-        case nonatomic = "nonatomic"
+        case noexcept = "noexcept"
     }
 }
 
-// MARK: Nonatomic convenience initializers and mutators
+// MARK: Noexcept convenience initializers and mutators
 
-extension Nonatomic {
+extension Noexcept {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Nonatomic.self, from: data)
+        self = try newJSONDecoder().decode(Noexcept.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -9798,10 +9846,10 @@ extension Nonatomic {
     }
 
     func with(
-        nonatomic: Int? = nil
-    ) -> Nonatomic {
-        return Nonatomic(
-            nonatomic: nonatomic ?? self.nonatomic
+        noexcept: Int? = nil
+    ) -> Noexcept {
+        return Noexcept(
+            noexcept: noexcept ?? self.noexcept
         )
     }
 
@@ -9814,20 +9862,20 @@ extension Nonatomic {
     }
 }
 
-// MARK: - None
-struct None: Codable, Sendable {
-    let none: Int
+// MARK: - Nonatomic
+struct Nonatomic: Codable, Sendable {
+    let nonatomic: Int
 
     enum CodingKeys: String, CodingKey {
-        case none = "None"
+        case nonatomic = "nonatomic"
     }
 }
 
-// MARK: None convenience initializers and mutators
+// MARK: Nonatomic convenience initializers and mutators
 
-extension None {
+extension Nonatomic {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(None.self, from: data)
+        self = try newJSONDecoder().decode(Nonatomic.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -9842,8 +9890,52 @@ extension None {
     }
 
     func with(
-        none: Int? = nil
-    ) -> None {
+        nonatomic: Int? = nil
+    ) -> Nonatomic {
+        return Nonatomic(
+            nonatomic: nonatomic ?? self.nonatomic
+        )
+    }
+
+    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: - None
+struct None: Codable, Sendable {
+    let none: Int
+
+    enum CodingKeys: String, CodingKey {
+        case none = "None"
+    }
+}
+
+// MARK: None convenience initializers and mutators
+
+extension None {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(None.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(
+        none: Int? = nil
+    ) -> None {
         return None(
             none: none ?? self.none
         )
@@ -12498,50 +12590,6 @@ extension Sel {
     }
 }
 
-// MARK: - Select
-struct Select: Codable, Sendable {
-    let select: Int
-
-    enum CodingKeys: String, CodingKey {
-        case select = "select"
-    }
-}
-
-// MARK: Select convenience initializers and mutators
-
-extension Select {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Select.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(
-        select: Int? = nil
-    ) -> Select {
-        return Select(
-            select: select ?? self.select
-        )
-    }
-
-    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: - Obj5
 struct Obj5: Codable, Sendable {
     let dummy: Int
@@ -12563,6 +12611,7 @@ struct Obj5: Codable, Sendable {
     let primitiveKind: PrimitiveKind
     let purpleSelf: Obj5Self
     let purpleTrue: TrueClass
+    let select: Select
     let sendable: SendableClass
     let serialDescriptor: SerialDescriptor
     let serialName: SerialName
@@ -12591,6 +12640,7 @@ struct Obj5: Codable, Sendable {
     let timeOnly: TimeOnly
     let timeOnlyConverter: TimeOnlyConverter
     let timeZone: TimeZoneClass
+    let toDict: ToDict
     let toJSON: ToJSON
     let toString: ToString
     let topLevel: TopLevelClass
@@ -12605,10 +12655,9 @@ struct Obj5: Codable, Sendable {
     let unchecked: Unchecked
     let undefined: Undefined
     let union: Union
+    let unmarshalJSON: UnmarshalJSON
     let unsafe: Unsafe
-    let unsigned: Unsigned
     let useSerializers: UseSerializers
-    let ushort: Ushort
 
     enum CodingKeys: String, CodingKey {
         case dummy = "dummy"
@@ -12630,6 +12679,7 @@ struct Obj5: Codable, Sendable {
         case primitiveKind = "PrimitiveKind"
         case purpleSelf = "self"
         case purpleTrue = "true"
+        case select = "select"
         case sendable = "Sendable"
         case serialDescriptor = "SerialDescriptor"
         case serialName = "SerialName"
@@ -12658,6 +12708,7 @@ struct Obj5: Codable, Sendable {
         case timeOnly = "TimeOnly"
         case timeOnlyConverter = "TimeOnlyConverter"
         case timeZone = "TimeZone"
+        case toDict = "to_dict"
         case toJSON = "to_json"
         case toString = "toString"
         case topLevel = "top_level"
@@ -12672,10 +12723,9 @@ struct Obj5: Codable, Sendable {
         case unchecked = "unchecked"
         case undefined = "undefined"
         case union = "union"
+        case unmarshalJSON = "UnmarshalJSON"
         case unsafe = "unsafe"
-        case unsigned = "unsigned"
         case useSerializers = "UseSerializers"
-        case ushort = "ushort"
     }
 }
 
@@ -12717,6 +12767,7 @@ extension Obj5 {
         primitiveKind: PrimitiveKind? = nil,
         purpleSelf: Obj5Self? = nil,
         purpleTrue: TrueClass? = nil,
+        select: Select? = nil,
         sendable: SendableClass? = nil,
         serialDescriptor: SerialDescriptor? = nil,
         serialName: SerialName? = nil,
@@ -12745,6 +12796,7 @@ extension Obj5 {
         timeOnly: TimeOnly? = nil,
         timeOnlyConverter: TimeOnlyConverter? = nil,
         timeZone: TimeZoneClass? = nil,
+        toDict: ToDict? = nil,
         toJSON: ToJSON? = nil,
         toString: ToString? = nil,
         topLevel: TopLevelClass? = nil,
@@ -12759,10 +12811,9 @@ extension Obj5 {
         unchecked: Unchecked? = nil,
         undefined: Undefined? = nil,
         union: Union? = nil,
+        unmarshalJSON: UnmarshalJSON? = nil,
         unsafe: Unsafe? = nil,
-        unsigned: Unsigned? = nil,
-        useSerializers: UseSerializers? = nil,
-        ushort: Ushort? = nil
+        useSerializers: UseSerializers? = nil
     ) -> Obj5 {
         return Obj5(
             dummy: dummy ?? self.dummy,
@@ -12784,6 +12835,7 @@ extension Obj5 {
             primitiveKind: primitiveKind ?? self.primitiveKind,
             purpleSelf: purpleSelf ?? self.purpleSelf,
             purpleTrue: purpleTrue ?? self.purpleTrue,
+            select: select ?? self.select,
             sendable: sendable ?? self.sendable,
             serialDescriptor: serialDescriptor ?? self.serialDescriptor,
             serialName: serialName ?? self.serialName,
@@ -12812,6 +12864,7 @@ extension Obj5 {
             timeOnly: timeOnly ?? self.timeOnly,
             timeOnlyConverter: timeOnlyConverter ?? self.timeOnlyConverter,
             timeZone: timeZone ?? self.timeZone,
+            toDict: toDict ?? self.toDict,
             toJSON: toJSON ?? self.toJSON,
             toString: toString ?? self.toString,
             topLevel: topLevel ?? self.topLevel,
@@ -12826,10 +12879,9 @@ extension Obj5 {
             unchecked: unchecked ?? self.unchecked,
             undefined: undefined ?? self.undefined,
             union: union ?? self.union,
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON,
             unsafe: unsafe ?? self.unsafe,
-            unsigned: unsigned ?? self.unsigned,
-            useSerializers: useSerializers ?? self.useSerializers,
-            ushort: ushort ?? self.ushort
+            useSerializers: useSerializers ?? self.useSerializers
         )
     }
 
@@ -13634,6 +13686,50 @@ extension TrueClass {
     }
 }
 
+// MARK: - Select
+struct Select: Codable, Sendable {
+    let select: Int
+
+    enum CodingKeys: String, CodingKey {
+        case select = "select"
+    }
+}
+
+// MARK: Select convenience initializers and mutators
+
+extension Select {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Select.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(
+        select: Int? = nil
+    ) -> Select {
+        return Select(
+            select: select ?? self.select
+        )
+    }
+
+    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: - SendableClass
 struct SendableClass: Codable, Sendable {
     let sendable: Int
@@ -14866,6 +14962,50 @@ extension TimeZoneClass {
     }
 }
 
+// MARK: - ToDict
+struct ToDict: Codable, Sendable {
+    let toDict: Int
+
+    enum CodingKeys: String, CodingKey {
+        case toDict = "to_dict"
+    }
+}
+
+// MARK: ToDict convenience initializers and mutators
+
+extension ToDict {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ToDict.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(
+        toDict: Int? = nil
+    ) -> ToDict {
+        return ToDict(
+            toDict: toDict ?? self.toDict
+        )
+    }
+
+    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: - ToJSON
 struct ToJSON: Codable, Sendable {
     let toJSON: Int
@@ -15482,20 +15622,20 @@ extension Union {
     }
 }
 
-// MARK: - Unsafe
-struct Unsafe: Codable, Sendable {
-    let unsafe: Int
+// MARK: - UnmarshalJSON
+struct UnmarshalJSON: Codable, Sendable {
+    let unmarshalJSON: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsafe = "unsafe"
+        case unmarshalJSON = "UnmarshalJSON"
     }
 }
 
-// MARK: Unsafe convenience initializers and mutators
+// MARK: UnmarshalJSON convenience initializers and mutators
 
-extension Unsafe {
+extension UnmarshalJSON {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsafe.self, from: data)
+        self = try newJSONDecoder().decode(UnmarshalJSON.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15510,10 +15650,10 @@ extension Unsafe {
     }
 
     func with(
-        unsafe: Int? = nil
-    ) -> Unsafe {
-        return Unsafe(
-            unsafe: unsafe ?? self.unsafe
+        unmarshalJSON: Int? = nil
+    ) -> UnmarshalJSON {
+        return UnmarshalJSON(
+            unmarshalJSON: unmarshalJSON ?? self.unmarshalJSON
         )
     }
 
@@ -15526,20 +15666,20 @@ extension Unsafe {
     }
 }
 
-// MARK: - Unsigned
-struct Unsigned: Codable, Sendable {
-    let unsigned: Int
+// MARK: - Unsafe
+struct Unsafe: Codable, Sendable {
+    let unsafe: Int
 
     enum CodingKeys: String, CodingKey {
-        case unsigned = "unsigned"
+        case unsafe = "unsafe"
     }
 }
 
-// MARK: Unsigned convenience initializers and mutators
+// MARK: Unsafe convenience initializers and mutators
 
-extension Unsigned {
+extension Unsafe {
     init(data: Data) throws {
-        self = try newJSONDecoder().decode(Unsigned.self, from: data)
+        self = try newJSONDecoder().decode(Unsafe.self, from: data)
     }
 
     init(_ json: String, using encoding: String.Encoding = .utf8) throws {
@@ -15554,10 +15694,10 @@ extension Unsigned {
     }
 
     func with(
-        unsigned: Int? = nil
-    ) -> Unsigned {
-        return Unsigned(
-            unsigned: unsigned ?? self.unsigned
+        unsafe: Int? = nil
+    ) -> Unsafe {
+        return Unsafe(
+            unsafe: unsafe ?? self.unsafe
         )
     }
 
@@ -15614,50 +15754,6 @@ extension UseSerializers {
     }
 }
 
-// MARK: - Ushort
-struct Ushort: Codable, Sendable {
-    let ushort: Int
-
-    enum CodingKeys: String, CodingKey {
-        case ushort = "ushort"
-    }
-}
-
-// MARK: Ushort convenience initializers and mutators
-
-extension Ushort {
-    init(data: Data) throws {
-        self = try newJSONDecoder().decode(Ushort.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(
-        ushort: Int? = nil
-    ) -> Ushort {
-        return Ushort(
-            ushort: ushort ?? self.ushort
-        )
-    }
-
-    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: - Obj6
 struct Obj6: Codable, Sendable {
     let dummy: Int
@@ -15666,6 +15762,8 @@ struct Obj6: Codable, Sendable {
     let obj6Where: Where
     let obj6While: While
     let obj6WillSet: WillSet
+    let unsigned: Unsigned
+    let ushort: Ushort
     let using: Using
     let utf8JSONReader: Utf8JSONReader
     let utf8JSONWriter: Utf8JSONWriter
@@ -15687,6 +15785,8 @@ struct Obj6: Codable, Sendable {
         case obj6Where = "where"
         case obj6While = "while"
         case obj6WillSet = "willSet"
+        case unsigned = "unsigned"
+        case ushort = "ushort"
         case using = "using"
         case utf8JSONReader = "Utf8JsonReader"
         case utf8JSONWriter = "Utf8JsonWriter"
@@ -15728,6 +15828,8 @@ extension Obj6 {
         obj6Where: Where? = nil,
         obj6While: While? = nil,
         obj6WillSet: WillSet? = nil,
+        unsigned: Unsigned? = nil,
+        ushort: Ushort? = nil,
         using: Using? = nil,
         utf8JSONReader: Utf8JSONReader? = nil,
         utf8JSONWriter: Utf8JSONWriter? = nil,
@@ -15749,6 +15851,8 @@ extension Obj6 {
             obj6Where: obj6Where ?? self.obj6Where,
             obj6While: obj6While ?? self.obj6While,
             obj6WillSet: obj6WillSet ?? self.obj6WillSet,
+            unsigned: unsigned ?? self.unsigned,
+            ushort: ushort ?? self.ushort,
             using: using ?? self.using,
             utf8JSONReader: utf8JSONReader ?? self.utf8JSONReader,
             utf8JSONWriter: utf8JSONWriter ?? self.utf8JSONWriter,
@@ -15994,6 +16098,94 @@ extension WillSet {
     }
 }
 
+// MARK: - Unsigned
+struct Unsigned: Codable, Sendable {
+    let unsigned: Int
+
+    enum CodingKeys: String, CodingKey {
+        case unsigned = "unsigned"
+    }
+}
+
+// MARK: Unsigned convenience initializers and mutators
+
+extension Unsigned {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Unsigned.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(
+        unsigned: Int? = nil
+    ) -> Unsigned {
+        return Unsigned(
+            unsigned: unsigned ?? self.unsigned
+        )
+    }
+
+    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: - Ushort
+struct Ushort: Codable, Sendable {
+    let ushort: Int
+
+    enum CodingKeys: String, CodingKey {
+        case ushort = "ushort"
+    }
+}
+
+// MARK: Ushort convenience initializers and mutators
+
+extension Ushort {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Ushort.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(
+        ushort: Int? = nil
+    ) -> Ushort {
+        return Ushort(
+            ushort: ushort ?? self.ushort
+        )
+    }
+
+    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: - Using
 struct Using: Codable, Sendable {
     let using: Int
diff --git a/base/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
index a983213..fc1c2ce 100644
--- a/base/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
index 5ec761b..4772f4d 100644
--- a/base/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
@@ -173,7 +173,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -184,7 +184,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
index 16de21f..a0818b3 100644
--- a/base/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
index 5bb27b2..8b10a25 100644
--- a/base/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
index 6e06286..4fb6644 100644
--- a/base/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
index 943765c..bd97756 100644
--- a/base/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
index 38eedf1..eed9604 100644
--- a/base/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
index 4cb922c..2746414 100644
--- a/base/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
index 22b91e1..e71c14e 100644
--- a/base/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
@@ -322,7 +322,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -333,7 +333,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
index 507c416..7788252 100644
--- a/base/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
index 49be2bd..526bc9a 100644
--- a/base/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
index 7ad0a89..93dba41 100644
--- a/base/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
@@ -178,7 +178,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
index fc2446d..d437cfe 100644
--- a/base/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
index 40b751e..0b166b9 100644
--- a/base/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
index 9a20499..b87f838 100644
--- a/base/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
index 649aa7f..66dc563 100644
--- a/base/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
index 493d608..22f1c0e 100644
--- a/base/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
index 4325fc0..59c74eb 100644
--- a/base/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
index ecd58f0..1b5849d 100644
--- a/base/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
index d0d2ad2..445362c 100644
--- a/base/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
@@ -181,7 +181,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -192,7 +192,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
index 4c9b561..819aa4a 100644
--- a/base/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
@@ -180,7 +180,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
index 2f6399a..3ba7024 100644
--- a/base/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
index 154183a..c8629b5 100644
--- a/base/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
@@ -214,7 +214,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -225,7 +225,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
index b55faf6..28bc712 100644
--- a/base/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
@@ -294,7 +294,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -305,7 +305,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
index 35fbe5d..742e2ab 100644
--- a/base/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
@@ -246,7 +246,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -257,7 +257,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
index c976ff4..1c8aed7 100644
--- a/base/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
index a7e2dd6..b0e2f56 100644
--- a/base/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -202,7 +202,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
index 450439c..07efe7a 100644
--- a/base/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
index d4aaa45..dee8570 100644
--- a/base/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
index d47172c..a4285a7 100644
--- a/base/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -181,7 +181,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
index 9774154..ec5f7af 100644
--- a/base/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
index bfe127f..afb9141 100644
--- a/base/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
@@ -165,7 +165,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -176,7 +176,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
index b2bf5c1..f359b5f 100644
--- a/base/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
index 695cfe1..aa62f14 100644
--- a/base/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -173,7 +173,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
index dd27fff..b6a7110 100644
--- a/base/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
index ecd58f0..1b5849d 100644
--- a/base/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
@@ -132,7 +132,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
index c8671c7..447f016 100644
--- a/base/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
index 81973fb..5b670fd 100644
--- a/base/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -229,7 +229,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
index 3093256..654c135 100644
--- a/base/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
@@ -211,7 +211,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -222,7 +222,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
index a719de8..bd2f320 100644
--- a/base/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
index 5f89b91..3d70614 100644
--- a/base/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
index 563ca2d..5003aff 100644
--- a/base/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
index f0215d0..43f9ecf 100644
--- a/base/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
@@ -245,7 +245,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -256,7 +256,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
index 021ff27..5c52d0e 100644
--- a/base/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
index 38f7422..42cb5de 100644
--- a/base/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
index 4d6318e..63801fc 100644
--- a/base/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
index 1ec275a..0d67487 100644
--- a/base/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
index c0a3d03..be1947e 100644
--- a/base/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
@@ -292,7 +292,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -303,7 +303,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
index 2c1281b..a72fee2 100644
--- a/base/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
@@ -291,7 +291,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -302,7 +302,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
index 9324220..d2b5ef3 100644
--- a/base/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -181,7 +181,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
index 9830cd5..3226328 100644
--- a/base/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
index 01ea72d..62d2159 100644
--- a/base/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
index 078e091..5b5522e 100644
--- a/base/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
index 821bced..3b9320f 100644
--- a/base/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
index fb256a3..8d20b95 100644
--- a/base/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -171,7 +171,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
index d66b8fa..de60593 100644
--- a/base/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
@@ -250,7 +250,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -261,7 +261,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
index 6e2745b..82b8a2e 100644
--- a/base/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
index 63835a1..83ec7fb 100644
--- a/base/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
index 7f98792..0be79a0 100644
--- a/base/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
@@ -176,7 +176,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -187,7 +187,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
index 2c8c3d5..cf1c9b7 100644
--- a/base/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
index 1ff30e6..7037d82 100644
--- a/base/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
@@ -288,7 +288,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -299,7 +299,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
index bd1d90f..04ac300 100644
--- a/base/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
index cca1a7e..adb4d79 100644
--- a/base/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
@@ -180,7 +180,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
index 8bb0df8..1b89077 100644
--- a/base/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
index a522f6b..f598add 100644
--- a/base/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -155,7 +155,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
index 908a330..8371870 100644
--- a/base/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
index 6884826..61ab7ed 100644
--- a/base/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
index 7393e16..c261cf7 100644
--- a/base/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
index 3b002b1..d2b496d 100644
--- a/base/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
index b0907a4..a71a770 100644
--- a/base/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -230,7 +230,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
index 071e0d8..725b46a 100644
--- a/base/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
index 900a451..86c55b2 100644
--- a/base/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
index b1f7df7..80f0c60 100644
--- a/base/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
index d940071..d4795e4 100644
--- a/base/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
index a7ce96f..81c828d 100644
--- a/base/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
index 9f4c57f..f8004a8 100644
--- a/base/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
index f2587f8..5d5ab31 100644
--- a/base/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
@@ -134,7 +134,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
index b1b15e4..1fe25c5 100644
--- a/base/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
index e16a8f2..1131945 100644
--- a/base/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
@@ -217,7 +217,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -228,7 +228,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
index 40b751e..0b166b9 100644
--- a/base/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
index faecb0c..7bef174 100644
--- a/base/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
@@ -195,7 +195,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
index 697ca29..056f190 100644
--- a/base/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -154,7 +154,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
index 9bb1083..8c660cf 100644
--- a/base/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
@@ -193,7 +193,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -204,7 +204,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
index 62b85c8..d7ac155 100644
--- a/base/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
index cc93842..678d2fe 100644
--- a/base/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
index bff8ceb..94bd27e 100644
--- a/base/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
index 62b7427..e56c5fc 100644
--- a/base/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
@@ -256,7 +256,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -267,7 +267,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
index 5489e4d..7753930 100644
--- a/base/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
index afcc259..7bf5c8c 100644
--- a/base/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
@@ -214,7 +214,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -225,7 +225,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
index 766e801..5bacf4a 100644
--- a/base/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
index 6cc0632..95f6cfc 100644
--- a/base/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
index 185febd..8268b4a 100644
--- a/base/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
index 30b8696..c32a5c5 100644
--- a/base/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
index 05276b1..0bd5a14 100644
--- a/base/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
index 02abac0..57ea7c3 100644
--- a/base/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
index 51c34f0..7f5763c 100644
--- a/base/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
index 824027c..d3377c9 100644
--- a/base/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
index 20b6f90..6f46884 100644
--- a/base/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
index b728093..c6e0493 100644
--- a/base/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
index 700fadf..4d9b0f2 100644
--- a/base/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -186,7 +186,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
index 700fadf..4d9b0f2 100644
--- a/base/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -186,7 +186,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
index 1d071df..a8a4006 100644
--- a/base/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
index 5e66d83..7d69fbe 100644
--- a/base/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -216,7 +216,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
index 5f4da6f..51f31c1 100644
--- a/base/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
@@ -213,7 +213,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -224,7 +224,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
index e19dd6e..580d429 100644
--- a/base/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -218,7 +218,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
index 88ed88f..a3179cd 100644
--- a/base/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
index b2a72cd..1718052 100644
--- a/base/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
@@ -178,7 +178,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
index 0216fc7..7a3ba92 100644
--- a/base/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
index 9a20499..b87f838 100644
--- a/base/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
index 3bc4f02..566cd11 100644
--- a/base/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
@@ -338,7 +338,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -349,7 +349,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
index 281babf..7ba3d18 100644
--- a/base/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
index 9c3cfa0..4740e51 100644
--- a/base/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
@@ -193,7 +193,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -204,7 +204,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
index b1f7df7..80f0c60 100644
--- a/base/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
@@ -110,7 +110,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -121,7 +121,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
index d624211..39e8567 100644
--- a/base/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -127,7 +127,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
index 0388eb4..8551417 100644
--- a/base/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
@@ -215,7 +215,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
index e74ebdb..21545df 100644
--- a/base/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
@@ -217,7 +217,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -228,7 +228,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
index e8bc876..14a8b89 100644
--- a/base/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -202,7 +202,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
index f045824..1b8ecff 100644
--- a/base/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
index 41f69ac..c84fabf 100644
--- a/base/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
index a9e8711..db1ad59 100644
--- a/base/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
@@ -317,7 +317,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -328,7 +328,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
index 38eedf1..eed9604 100644
--- a/base/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
index 75c36fd..92fe20e 100644
--- a/base/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
@@ -702,7 +702,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -713,7 +713,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
index b7774e3..992c586 100644
--- a/base/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
index 71bdb20..291c523 100644
--- a/base/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
index 6f1b3c3..83e84b5 100644
--- a/base/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
index 551b34c..7a0e0f8 100644
--- a/base/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
index 21337ab..4a006ba 100644
--- a/base/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
index ce49d3d..fb9e93a 100644
--- a/base/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
@@ -664,7 +664,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -675,7 +675,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
index 72f464b..e09d78b 100644
--- a/base/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
index 3d18c2a..8798125 100644
--- a/base/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
index 1d678fc..6343730 100644
--- a/base/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
@@ -177,7 +177,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -188,7 +188,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
index 48962b7..ab2e455 100644
--- a/base/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -130,7 +130,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index 542710c..310e997 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 405bb56..cf7f99e 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -603,7 +603,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -614,7 +614,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
index 542710c..310e997 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index fd0686c..a0f3a59 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
index 542710c..310e997 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts
index c459d41..d587da0 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index 542710c..310e997 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index 542710c..310e997 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.ts
index 9fa0df5..92db44f 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/raw-type-any--474b307c39db/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
index 77a2ff0..b9639ae 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -39,7 +39,7 @@ export interface TopLevel {
     readonly fuzzy:              Fuzzy[];
     readonly gardenwards:        Gardenward[];
     readonly generalissimo:      Generalissimo[];
-    readonly habeas:             ({ [key: string]: number } | null)[];
+    readonly habeas:             ({ readonly [key: string]: number } | null)[];
     readonly hemicrystalline:    Hemicrystalline[];
     readonly hemocoele:          HemocoeleElement[];
     readonly hoister:            Hoister[];
@@ -150,11 +150,11 @@ export interface CoadjustClass {
     readonly unchargeable?:     null;
 }
 
-export type Consilience = number | { [key: string]: number };
+export type Consilience = number | { readonly [key: string]: number };
 
-export type Constructor = boolean | { [key: string]: number | null };
+export type Constructor = boolean | { readonly [key: string]: number | null };
 
-export type Continuative = { [key: string]: number } | string;
+export type Continuative = { readonly [key: string]: number } | string;
 
 export type CredulityElement = CredulityClass | number | string;
 
@@ -181,7 +181,7 @@ export interface CredulityClass {
     readonly wharp:                null;
 }
 
-export type Creviced = boolean | { [key: string]: number } | string;
+export type Creviced = boolean | { readonly [key: string]: number } | string;
 
 export type DeruralizeElement = null[] | boolean | DeruralizeClass;
 
@@ -235,7 +235,7 @@ export interface DiaereseClass {
 
 export type Downstroke = null[] | boolean | string;
 
-export type Eleutheromania = number | { [key: string]: number } | string;
+export type Eleutheromania = number | { readonly [key: string]: number } | string;
 
 export interface Encrust {
     readonly Hibernia:        null;
@@ -343,11 +343,11 @@ export interface FlagmakingClass {
 
 export type Fluorometer = number | null | string;
 
-export type Fuzzy = number | { [key: string]: number | null };
+export type Fuzzy = number | { readonly [key: string]: number | null };
 
 export type Gardenward = number[] | boolean | string;
 
-export type Generalissimo = boolean | { [key: string]: number } | null;
+export type Generalissimo = boolean | { readonly [key: string]: number } | null;
 
 export type Hemicrystalline = CimeliaClass | string;
 
@@ -401,7 +401,7 @@ export interface Interacinar {
     readonly untrimmed:      null;
 }
 
-export type Jacutinga = number[] | { [key: string]: number | null };
+export type Jacutinga = number[] | { readonly [key: string]: number | null };
 
 // Converts JSON strings to/from your types
 // and asserts the results of JSON.parse at runtime
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index baa7c41..d7e70b1 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -499,7 +499,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -510,7 +510,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index 0cf2c61..87fafd1 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 7af1f47..8c6b1ba 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -531,7 +531,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -542,7 +542,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
index 0cf2c61..87fafd1 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index a998694..0152e2d 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
index 0cf2c61..87fafd1 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts
index dd1c517..3176c3d 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index 0cf2c61..87fafd1 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index 0cf2c61..87fafd1 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.ts
index 9b327ea..4823672 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/raw-type-any--474b307c39db/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
index 0add202..bdb0c86 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -27,7 +27,7 @@ export interface TopLevel {
     readonly School:           School[];
     readonly Shakespearolater: Shakespearolater[];
     readonly Svan:             number[];
-    readonly Wayao:            { [key: string]: number };
+    readonly Wayao:            { readonly [key: string]: number };
     readonly academe:          Academe[];
     readonly acquirable:       Acquirable[];
     readonly aerometry:        Aerometry[];
@@ -37,12 +37,12 @@ export interface TopLevel {
     readonly ambassage:        Ambassage[];
     readonly amphithyron:      (Amphithyron | null)[];
     readonly ankee:            AnkeeElement[];
-    readonly annihilator:      ({ [key: string]: number | null } | null)[];
+    readonly annihilator:      ({ readonly [key: string]: number | null } | null)[];
     readonly annulose:         null;
     readonly aphasia:          Aphasia[];
     readonly asprawl:          Asprawl[];
     readonly attractive:       (boolean | null)[];
-    readonly barksome:         { [key: string]: number };
+    readonly barksome:         { readonly [key: string]: number };
     readonly bedesman:         Bedesman[];
     readonly belard:           Belard[];
     readonly bocking:          Bocking[];
@@ -141,7 +141,7 @@ export type Endomyce = number | string;
 
 export type Epinephelidae = boolean | number | string;
 
-export type Eupatorium = null[] | { [key: string]: number };
+export type Eupatorium = null[] | { readonly [key: string]: number };
 
 export type GryphosaurusElement = number[] | GryphosaurusClass | string;
 
@@ -168,7 +168,7 @@ export interface GryphosaurusClass {
     readonly underntime:      null;
 }
 
-export type Koryak = { [key: string]: number | null } | string;
+export type Koryak = { readonly [key: string]: number | null } | string;
 
 export type LaviniaElement = LaviniaClass | string;
 
@@ -239,13 +239,13 @@ export type Rhomboganoidei = number[] | Rebecca | string;
 
 export type Ruellia = boolean | Rebecca | string;
 
-export type School = number | { [key: string]: number } | null;
+export type School = number | { readonly [key: string]: number } | null;
 
 export type Shakespearolater = number[] | number | string;
 
-export type Academe = number[] | number | { [key: string]: number };
+export type Academe = number[] | number | { readonly [key: string]: number };
 
-export type Acquirable = (number | null)[] | { [key: string]: number };
+export type Acquirable = (number | null)[] | { readonly [key: string]: number };
 
 export type Aerometry = boolean | number;
 
@@ -341,9 +341,9 @@ export type Bedesman = boolean | number | string;
 
 export type Belard = number[] | Rebecca | number;
 
-export type Bocking = number[] | boolean | { [key: string]: number };
+export type Bocking = number[] | boolean | { readonly [key: string]: number };
 
-export type Brawlingly = null[] | { [key: string]: number | null };
+export type Brawlingly = null[] | { readonly [key: string]: number | null };
 
 export type Brookie = number[] | Rebecca;
 
@@ -351,9 +351,9 @@ export type Bumboatman = null[] | null | string;
 
 export type Calaverite = number[] | string;
 
-export type Catallactic = null[] | boolean | { [key: string]: number };
+export type Catallactic = null[] | boolean | { readonly [key: string]: number };
 
-export type Cemental = number[] | number | { [key: string]: number };
+export type Cemental = number[] | number | { readonly [key: string]: number };
 
 // Converts JSON strings to/from your types
 // and asserts the results of JSON.parse at runtime
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index 9ee5cc8..da25293 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -451,7 +451,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -462,7 +462,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index deeb945..d845dec 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index dca1901..953086c 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -667,7 +667,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -678,7 +678,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
index deeb945..d845dec 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index c4ee62d..9368a95 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
index deeb945..d845dec 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts
index bab6e2e..139edc8 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index deeb945..d845dec 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index deeb945..d845dec 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.ts
index 66a975d..056e4a2 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/raw-type-any--474b307c39db/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
index 9ddb448..701adbe 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -48,7 +48,7 @@ export interface TopLevel {
     readonly prefreshman:      PrefreshmanElement[];
     readonly prehensility:     Prehensility[];
     readonly prevoidance:      Prevoidance[];
-    readonly probant:          { [key: string]: number | null }[];
+    readonly probant:          { readonly [key: string]: number | null }[];
     readonly protext:          Protext[];
 }
 
@@ -77,7 +77,7 @@ export interface JurorClass {
     readonly uninhabitedness: null;
 }
 
-export type Kongoni = number[] | { [key: string]: number };
+export type Kongoni = number[] | { readonly [key: string]: number };
 
 export type LadronismElement = LadronismClass | number | string;
 
@@ -323,9 +323,9 @@ export interface OutrivalClass {
     readonly unpaced:         null;
 }
 
-export type Paleographically = number | { [key: string]: number | null };
+export type Paleographically = number | { readonly [key: string]: number | null };
 
-export type Pamphletwise = number | { [key: string]: number } | string;
+export type Pamphletwise = number | { readonly [key: string]: number } | string;
 
 export type Pediatric = boolean | number | null;
 
@@ -365,9 +365,9 @@ export type Piffler = null[] | MonaziteClass;
 
 export type Pithful = boolean | number | null;
 
-export type Placuntiti = number | { [key: string]: number };
+export type Placuntiti = number | { readonly [key: string]: number };
 
-export type Plectopterous = number | { [key: string]: number };
+export type Plectopterous = number | { readonly [key: string]: number };
 
 export interface Pneumocele {
     readonly Carbonarism?:     null;
@@ -399,7 +399,7 @@ export interface Pneumocele {
 
 export type Poliorcetic = boolean | MonaziteClass;
 
-export type Poormaster = number[] | { [key: string]: number } | null;
+export type Poormaster = number[] | { readonly [key: string]: number } | null;
 
 export type PotwhiskyElement = PotwhiskyClass | number | null;
 
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index ce3c4d5..3747002 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -555,7 +555,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -566,7 +566,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index c743e3a..29dd5fd 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 32879ba..717d838 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -753,7 +753,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -764,7 +764,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
index c743e3a..29dd5fd 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index a531c43..c7fc1ff 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
index c743e3a..29dd5fd 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts
index 33bfc62..df03c4c 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index c743e3a..29dd5fd 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index c743e3a..29dd5fd 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.ts
index db8aa65..83ea606 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/raw-type-any--474b307c39db/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
index 095a16c..b8523f1 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -57,7 +57,7 @@ export interface TopLevel {
     readonly untasked:           Untasked[];
     readonly unvarying:          Unvarying[];
     readonly vehemently:         Vehemently[];
-    readonly warriorship:        { [key: string]: boolean };
+    readonly warriorship:        { readonly [key: string]: boolean };
     readonly whitepot:           Whitepot[];
     readonly wrothy:             WrothyElement[];
 }
@@ -124,7 +124,7 @@ export interface QuebrachineClass {
     readonly nonbookish:      null;
 }
 
-export type Querier = boolean | { [key: string]: number };
+export type Querier = boolean | { readonly [key: string]: number };
 
 export type Rebarbative = number[] | boolean | number;
 
@@ -235,7 +235,7 @@ export interface SantirClass {
     readonly vorticular:      null;
 }
 
-export type Saprophilous = { [key: string]: number } | null | string;
+export type Saprophilous = { readonly [key: string]: number } | null | string;
 
 export type SaxtenElement = SaxtenClass | string;
 
@@ -290,7 +290,7 @@ export interface Scatty {
     readonly uncombated:         null;
 }
 
-export type Scoffer = null[] | { [key: string]: number } | null;
+export type Scoffer = null[] | { readonly [key: string]: number } | null;
 
 export type Scrampum = number[] | boolean | null;
 
@@ -353,7 +353,7 @@ export interface Staghunting {
 
 export type Stagmometer = (number | null)[] | string;
 
-export type Stimulability = boolean | number | { [key: string]: number };
+export type Stimulability = boolean | number | { readonly [key: string]: number };
 
 export type Strangleable = null[] | number;
 
@@ -425,11 +425,11 @@ export interface TruantcyClass {
     readonly windwaywardly?:   null;
 }
 
-export type Unbeginning = null[] | { [key: string]: number } | string;
+export type Unbeginning = null[] | { readonly [key: string]: number } | string;
 
-export type Undesirability = number[] | { [key: string]: number } | string;
+export type Undesirability = number[] | { readonly [key: string]: number } | string;
 
-export type Unerasing = null[] | number | { [key: string]: number };
+export type Unerasing = null[] | number | { readonly [key: string]: number };
 
 export type Unguentarium = null[] | number | null;
 
@@ -463,7 +463,7 @@ export interface UnimpeachablyClass {
     readonly unsuggestedness?:    number;
 }
 
-export type Unmortgaged = number | { [key: string]: number } | null;
+export type Unmortgaged = number | { readonly [key: string]: number } | null;
 
 export type Unobstructed = QuebrachineClass | number | null;
 
@@ -496,9 +496,9 @@ export interface UnstressedClass {
     readonly vowellessness:   null;
 }
 
-export type Untasked = null[] | number | { [key: string]: number };
+export type Untasked = null[] | number | { readonly [key: string]: number };
 
-export type Unvarying = boolean | number | { [key: string]: number };
+export type Unvarying = boolean | number | { readonly [key: string]: number };
 
 export type Vehemently = null[] | boolean | null;
 
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index 95b3291..45f4e17 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -625,7 +625,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -636,7 +636,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = val[key];
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
index 37bdf50..8611daa 100644
--- a/base/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
index 2d5cdbd..0db3830 100644
--- a/base/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
index 7dfc6b7..c0d1e77 100644
--- a/base/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
index de42c53..2013d29 100644
--- a/base/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
index c8e46d4..5531920 100644
--- a/base/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
index 9f9b3d6..70ad9d6 100644
--- a/base/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 a7d34bb..41e0350 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
@@ -400,13 +400,13 @@ export interface Obj2 {
     foreach:             Foreach;
     friend:              Friend;
     from:                From;
+    from_dict:           FromDict;
     from_json:           FromJSON;
     func:                Func;
     function:            Function;
     get:                 Get;
     global:              Global;
     go:                  Go;
-    goto:                Goto;
 }
 
 export interface DateFormatter {
@@ -639,6 +639,10 @@ export interface From {
     from: number;
 }
 
+export interface FromDict {
+    from_dict: number;
+}
+
 export interface FromJSON {
     from_json: number;
 }
@@ -663,10 +667,6 @@ export interface Go {
     go: number;
 }
 
-export interface Goto {
-    goto: number;
-}
-
 export interface Obj3 {
     Hashable:                   Hashable;
     Hasher:                     Hasher;
@@ -685,8 +685,10 @@ export interface Obj3 {
     JsonTokenType:              JSONTokenType;
     Locale:                     Locale;
     MapEntry:                   MapEntry;
+    MarshalJSON:                MarshalJSON;
     NO:                         No;
     dummy:                      number;
+    goto:                       Goto;
     guard:                      Guard;
     hasOwnProperty:             HasOwnProperty;
     hashCode:                   HashCode;
@@ -732,7 +734,6 @@ export interface Obj3 {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
-    noexcept:                   Noexcept;
 }
 
 export interface Hashable {
@@ -803,10 +804,18 @@ export interface MapEntry {
     MapEntry: number;
 }
 
+export interface MarshalJSON {
+    MarshalJSON: number;
+}
+
 export interface No {
     NO: number;
 }
 
+export interface Goto {
+    goto: number;
+}
+
 export interface Guard {
     guard: number;
 }
@@ -987,10 +996,6 @@ export interface Nil {
     nil: number;
 }
 
-export interface Noexcept {
-    noexcept: number;
-}
-
 export interface Obj4 {
     NSError:          NSError;
     NSObject:         NSObject;
@@ -1003,6 +1008,7 @@ export interface Obj4 {
     SEL:              Sel;
     dummy:            number;
     noSuchMethod:     NoSuchMethod;
+    noexcept:         Noexcept;
     nonatomic:        Nonatomic;
     none:             NoneClass;
     nonlocal:         Nonlocal;
@@ -1056,7 +1062,6 @@ export interface Obj4 {
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
-    select:           Select;
 }
 
 export interface NSError {
@@ -1099,6 +1104,10 @@ export interface NoSuchMethod {
     noSuchMethod: number;
 }
 
+export interface Noexcept {
+    noexcept: number;
+}
+
 export interface Nonatomic {
     nonatomic: number;
 }
@@ -1311,10 +1320,6 @@ export interface Sealed {
     sealed: number;
 }
 
-export interface Select {
-    select: number;
-}
-
 export interface Obj5 {
     KSerializer:        KSerializer;
     PrimitiveKind:      PrimitiveKind;
@@ -1333,8 +1338,10 @@ export interface Obj5 {
     TimeZone:           TimeZone;
     True:               True;
     Type:               Type;
+    UnmarshalJSON:      UnmarshalJSON;
     UseSerializers:     UseSerializers;
     dummy:              number;
+    select:             Select;
     self:               SelfClass;
     serialize:          Serialize;
     set:                Set;
@@ -1361,6 +1368,7 @@ export interface Obj5 {
     throw:              Throw;
     throws:             Throws;
     toString:           ToString;
+    to_dict:            ToDict;
     to_json:            ToJSON;
     top_level:          TopLevelClass;
     transient:          Transient;
@@ -1379,8 +1387,6 @@ export interface Obj5 {
     union:              Union;
     unowned:            Unowned;
     unsafe:             Unsafe;
-    unsigned:           Unsigned;
-    ushort:             Ushort;
 }
 
 export interface KSerializer {
@@ -1451,10 +1457,18 @@ export interface Type {
     Type: number;
 }
 
+export interface UnmarshalJSON {
+    UnmarshalJSON: number;
+}
+
 export interface UseSerializers {
     UseSerializers: number;
 }
 
+export interface Select {
+    select: number;
+}
+
 export interface SelfClass {
     self: number;
 }
@@ -1559,6 +1573,10 @@ export interface ToString {
     toString: number;
 }
 
+export interface ToDict {
+    to_dict: number;
+}
+
 export interface ToJSON {
     to_json: number;
 }
@@ -1631,20 +1649,14 @@ export interface Unsafe {
     unsafe: number;
 }
 
-export interface Unsigned {
-    unsigned: number;
-}
-
-export interface Ushort {
-    ushort: number;
-}
-
 export interface Obj6 {
     UUID:           UUID;
     Utf8JsonReader: Utf8JSONReader;
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    unsigned:       Unsigned;
+    ushort:         Ushort;
     using:          Using;
     var:            Var;
     virtual:        Virtual;
@@ -1677,6 +1689,14 @@ export interface Yes {
     YES: number;
 }
 
+export interface Unsigned {
+    unsigned: number;
+}
+
+export interface Ushort {
+    ushort: number;
+}
+
 export interface Using {
     using: number;
 }
@@ -1829,7 +1849,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -1840,7 +1860,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -2248,13 +2268,13 @@ const typeMap: any = {
         { json: "foreach", js: "foreach", typ: r("Foreach") },
         { json: "friend", js: "friend", typ: r("Friend") },
         { json: "from", js: "from", typ: r("From") },
+        { json: "from_dict", js: "from_dict", typ: r("FromDict") },
         { json: "from_json", js: "from_json", typ: r("FromJSON") },
         { json: "func", js: "func", typ: r("Func") },
         { json: "function", js: "function", typ: r("Function") },
         { json: "get", js: "get", typ: r("Get") },
         { json: "global", js: "global", typ: r("Global") },
         { json: "go", js: "go", typ: r("Go") },
-        { json: "goto", js: "goto", typ: r("Goto") },
     ], false),
     "DateFormatter": o([
         { json: "DateFormatter", js: "DateFormatter", typ: i(0) },
@@ -2427,6 +2447,9 @@ const typeMap: any = {
     "From": o([
         { json: "from", js: "from", typ: i(0) },
     ], false),
+    "FromDict": o([
+        { json: "from_dict", js: "from_dict", typ: i(0) },
+    ], false),
     "FromJSON": o([
         { json: "from_json", js: "from_json", typ: i(0) },
     ], false),
@@ -2445,9 +2468,6 @@ const typeMap: any = {
     "Go": o([
         { json: "go", js: "go", typ: i(0) },
     ], false),
-    "Goto": o([
-        { json: "goto", js: "goto", typ: i(0) },
-    ], false),
     "Obj3": o([
         { json: "Hashable", js: "Hashable", typ: r("Hashable") },
         { json: "Hasher", js: "Hasher", typ: r("Hasher") },
@@ -2466,8 +2486,10 @@ const typeMap: any = {
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: r("MarshalJSON") },
         { json: "NO", js: "NO", typ: r("No") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { 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") },
@@ -2513,7 +2535,6 @@ 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: "noexcept", js: "noexcept", typ: r("Noexcept") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2566,9 +2587,15 @@ const typeMap: any = {
     "MapEntry": o([
         { json: "MapEntry", js: "MapEntry", typ: i(0) },
     ], false),
+    "MarshalJSON": o([
+        { json: "MarshalJSON", js: "MarshalJSON", typ: i(0) },
+    ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
     ], false),
+    "Goto": o([
+        { json: "goto", js: "goto", typ: i(0) },
+    ], false),
     "Guard": o([
         { json: "guard", js: "guard", typ: i(0) },
     ], false),
@@ -2704,9 +2731,6 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
-    "Noexcept": o([
-        { json: "noexcept", js: "noexcept", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NSError", js: "NSError", typ: r("NSError") },
         { json: "NSObject", js: "NSObject", typ: r("NSObject") },
@@ -2719,6 +2743,7 @@ const typeMap: any = {
         { json: "SEL", js: "SEL", typ: r("Sel") },
         { json: "dummy", js: "dummy", typ: i(0) },
         { 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") },
         { json: "nonlocal", js: "nonlocal", typ: r("Nonlocal") },
@@ -2772,7 +2797,6 @@ const typeMap: any = {
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
-        { json: "select", js: "select", typ: r("Select") },
     ], false),
     "NSError": o([
         { json: "NSError", js: "NSError", typ: i(0) },
@@ -2804,6 +2828,9 @@ const typeMap: any = {
     "NoSuchMethod": o([
         { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
     ], false),
+    "Noexcept": o([
+        { json: "noexcept", js: "noexcept", typ: i(0) },
+    ], false),
     "Nonatomic": o([
         { json: "nonatomic", js: "nonatomic", typ: i(0) },
     ], false),
@@ -2963,9 +2990,6 @@ const typeMap: any = {
     "Sealed": o([
         { json: "sealed", js: "sealed", typ: i(0) },
     ], false),
-    "Select": o([
-        { json: "select", js: "select", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -2984,8 +3008,10 @@ const typeMap: any = {
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
         { json: "Type", js: "Type", typ: r("Type") },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "select", js: "select", typ: r("Select") },
         { json: "self", js: "self", typ: r("SelfClass") },
         { json: "serialize", js: "serialize", typ: r("Serialize") },
         { json: "set", js: "set", typ: r("Set") },
@@ -3012,6 +3038,7 @@ const typeMap: any = {
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
         { json: "toString", js: "toString", typ: r("ToString") },
+        { json: "to_dict", js: "to_dict", typ: r("ToDict") },
         { 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") },
@@ -3030,8 +3057,6 @@ const typeMap: any = {
         { json: "union", js: "union", typ: r("Union") },
         { json: "unowned", js: "unowned", typ: r("Unowned") },
         { json: "unsafe", js: "unsafe", typ: r("Unsafe") },
-        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
-        { json: "ushort", js: "ushort", typ: r("Ushort") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3084,9 +3109,15 @@ const typeMap: any = {
     "Type": o([
         { json: "Type", js: "Type", typ: i(0) },
     ], false),
+    "UnmarshalJSON": o([
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: i(0) },
+    ], false),
     "UseSerializers": o([
         { json: "UseSerializers", js: "UseSerializers", typ: i(0) },
     ], false),
+    "Select": o([
+        { json: "select", js: "select", typ: i(0) },
+    ], false),
     "SelfClass": o([
         { json: "self", js: "self", typ: i(0) },
     ], false),
@@ -3165,6 +3196,9 @@ const typeMap: any = {
     "ToString": o([
         { json: "toString", js: "toString", typ: i(0) },
     ], false),
+    "ToDict": o([
+        { json: "to_dict", js: "to_dict", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
@@ -3219,18 +3253,14 @@ const typeMap: any = {
     "Unsafe": o([
         { json: "unsafe", js: "unsafe", typ: i(0) },
     ], false),
-    "Unsigned": o([
-        { json: "unsigned", js: "unsigned", typ: i(0) },
-    ], false),
-    "Ushort": o([
-        { json: "ushort", js: "ushort", typ: i(0) },
-    ], false),
     "Obj6": o([
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "Utf8JsonReader", js: "Utf8JsonReader", typ: r("Utf8JSONReader") },
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
+        { json: "ushort", js: "ushort", typ: r("Ushort") },
         { json: "using", js: "using", typ: r("Using") },
         { json: "var", js: "var", typ: r("Var") },
         { json: "virtual", js: "virtual", typ: r("Virtual") },
@@ -3258,6 +3288,12 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Unsigned": o([
+        { json: "unsigned", js: "unsigned", typ: i(0) },
+    ], false),
+    "Ushort": o([
+        { json: "ushort", js: "ushort", typ: i(0) },
+    ], false),
     "Using": o([
         { json: "using", js: "using", 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 abeb673..021b5c7 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
@@ -400,13 +400,13 @@ export type Obj2 = {
     foreach:             Foreach;
     friend:              Friend;
     from:                From;
+    from_dict:           FromDict;
     from_json:           FromJSON;
     func:                Func;
     function:            Function;
     get:                 Get;
     global:              Global;
     go:                  Go;
-    goto:                Goto;
 }
 
 export type DateFormatter = {
@@ -639,6 +639,10 @@ export type From = {
     from: number;
 }
 
+export type FromDict = {
+    from_dict: number;
+}
+
 export type FromJSON = {
     from_json: number;
 }
@@ -663,10 +667,6 @@ export type Go = {
     go: number;
 }
 
-export type Goto = {
-    goto: number;
-}
-
 export type Obj3 = {
     Hashable:                   Hashable;
     Hasher:                     Hasher;
@@ -685,8 +685,10 @@ export type Obj3 = {
     JsonTokenType:              JSONTokenType;
     Locale:                     Locale;
     MapEntry:                   MapEntry;
+    MarshalJSON:                MarshalJSON;
     NO:                         No;
     dummy:                      number;
+    goto:                       Goto;
     guard:                      Guard;
     hasOwnProperty:             HasOwnProperty;
     hashCode:                   HashCode;
@@ -732,7 +734,6 @@ export type Obj3 = {
     new:                        New;
     newtonsoft:                 Newtonsoft;
     nil:                        Nil;
-    noexcept:                   Noexcept;
 }
 
 export type Hashable = {
@@ -803,10 +804,18 @@ export type MapEntry = {
     MapEntry: number;
 }
 
+export type MarshalJSON = {
+    MarshalJSON: number;
+}
+
 export type No = {
     NO: number;
 }
 
+export type Goto = {
+    goto: number;
+}
+
 export type Guard = {
     guard: number;
 }
@@ -987,10 +996,6 @@ export type Nil = {
     nil: number;
 }
 
-export type Noexcept = {
-    noexcept: number;
-}
-
 export type Obj4 = {
     NSError:          NSError;
     NSObject:         NSObject;
@@ -1003,6 +1008,7 @@ export type Obj4 = {
     SEL:              Sel;
     dummy:            number;
     noSuchMethod:     NoSuchMethod;
+    noexcept:         Noexcept;
     nonatomic:        Nonatomic;
     none:             NoneClass;
     nonlocal:         Nonlocal;
@@ -1056,7 +1062,6 @@ export type Obj4 = {
     s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
-    select:           Select;
 }
 
 export type NSError = {
@@ -1099,6 +1104,10 @@ export type NoSuchMethod = {
     noSuchMethod: number;
 }
 
+export type Noexcept = {
+    noexcept: number;
+}
+
 export type Nonatomic = {
     nonatomic: number;
 }
@@ -1311,10 +1320,6 @@ export type Sealed = {
     sealed: number;
 }
 
-export type Select = {
-    select: number;
-}
-
 export type Obj5 = {
     KSerializer:        KSerializer;
     PrimitiveKind:      PrimitiveKind;
@@ -1333,8 +1338,10 @@ export type Obj5 = {
     TimeZone:           TimeZone;
     True:               True;
     Type:               Type;
+    UnmarshalJSON:      UnmarshalJSON;
     UseSerializers:     UseSerializers;
     dummy:              number;
+    select:             Select;
     self:               SelfClass;
     serialize:          Serialize;
     set:                Set;
@@ -1361,6 +1368,7 @@ export type Obj5 = {
     throw:              Throw;
     throws:             Throws;
     toString:           ToString;
+    to_dict:            ToDict;
     to_json:            ToJSON;
     top_level:          TopLevelClass;
     transient:          Transient;
@@ -1379,8 +1387,6 @@ export type Obj5 = {
     union:              Union;
     unowned:            Unowned;
     unsafe:             Unsafe;
-    unsigned:           Unsigned;
-    ushort:             Ushort;
 }
 
 export type KSerializer = {
@@ -1451,10 +1457,18 @@ export type Type = {
     Type: number;
 }
 
+export type UnmarshalJSON = {
+    UnmarshalJSON: number;
+}
+
 export type UseSerializers = {
     UseSerializers: number;
 }
 
+export type Select = {
+    select: number;
+}
+
 export type SelfClass = {
     self: number;
 }
@@ -1559,6 +1573,10 @@ export type ToString = {
     toString: number;
 }
 
+export type ToDict = {
+    to_dict: number;
+}
+
 export type ToJSON = {
     to_json: number;
 }
@@ -1631,20 +1649,14 @@ export type Unsafe = {
     unsafe: number;
 }
 
-export type Unsigned = {
-    unsigned: number;
-}
-
-export type Ushort = {
-    ushort: number;
-}
-
 export type Obj6 = {
     UUID:           UUID;
     Utf8JsonReader: Utf8JSONReader;
     Utf8JsonWriter: Utf8JSONWriter;
     YES:            Yes;
     dummy:          number;
+    unsigned:       Unsigned;
+    ushort:         Ushort;
     using:          Using;
     var:            Var;
     virtual:        Virtual;
@@ -1677,6 +1689,14 @@ export type Yes = {
     YES: number;
 }
 
+export type Unsigned = {
+    unsigned: number;
+}
+
+export type Ushort = {
+    ushort: number;
+}
+
 export type Using = {
     using: number;
 }
@@ -1829,7 +1849,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -1840,7 +1860,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
@@ -2248,13 +2268,13 @@ const typeMap: any = {
         { json: "foreach", js: "foreach", typ: r("Foreach") },
         { json: "friend", js: "friend", typ: r("Friend") },
         { json: "from", js: "from", typ: r("From") },
+        { json: "from_dict", js: "from_dict", typ: r("FromDict") },
         { json: "from_json", js: "from_json", typ: r("FromJSON") },
         { json: "func", js: "func", typ: r("Func") },
         { json: "function", js: "function", typ: r("Function") },
         { json: "get", js: "get", typ: r("Get") },
         { json: "global", js: "global", typ: r("Global") },
         { json: "go", js: "go", typ: r("Go") },
-        { json: "goto", js: "goto", typ: r("Goto") },
     ], false),
     "DateFormatter": o([
         { json: "DateFormatter", js: "DateFormatter", typ: i(0) },
@@ -2427,6 +2447,9 @@ const typeMap: any = {
     "From": o([
         { json: "from", js: "from", typ: i(0) },
     ], false),
+    "FromDict": o([
+        { json: "from_dict", js: "from_dict", typ: i(0) },
+    ], false),
     "FromJSON": o([
         { json: "from_json", js: "from_json", typ: i(0) },
     ], false),
@@ -2445,9 +2468,6 @@ const typeMap: any = {
     "Go": o([
         { json: "go", js: "go", typ: i(0) },
     ], false),
-    "Goto": o([
-        { json: "goto", js: "goto", typ: i(0) },
-    ], false),
     "Obj3": o([
         { json: "Hashable", js: "Hashable", typ: r("Hashable") },
         { json: "Hasher", js: "Hasher", typ: r("Hasher") },
@@ -2466,8 +2486,10 @@ const typeMap: any = {
         { json: "JsonTokenType", js: "JsonTokenType", typ: r("JSONTokenType") },
         { json: "Locale", js: "Locale", typ: r("Locale") },
         { json: "MapEntry", js: "MapEntry", typ: r("MapEntry") },
+        { json: "MarshalJSON", js: "MarshalJSON", typ: r("MarshalJSON") },
         { json: "NO", js: "NO", typ: r("No") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { 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") },
@@ -2513,7 +2535,6 @@ 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: "noexcept", js: "noexcept", typ: r("Noexcept") },
     ], false),
     "Hashable": o([
         { json: "Hashable", js: "Hashable", typ: i(0) },
@@ -2566,9 +2587,15 @@ const typeMap: any = {
     "MapEntry": o([
         { json: "MapEntry", js: "MapEntry", typ: i(0) },
     ], false),
+    "MarshalJSON": o([
+        { json: "MarshalJSON", js: "MarshalJSON", typ: i(0) },
+    ], false),
     "No": o([
         { json: "NO", js: "NO", typ: i(0) },
     ], false),
+    "Goto": o([
+        { json: "goto", js: "goto", typ: i(0) },
+    ], false),
     "Guard": o([
         { json: "guard", js: "guard", typ: i(0) },
     ], false),
@@ -2704,9 +2731,6 @@ const typeMap: any = {
     "Nil": o([
         { json: "nil", js: "nil", typ: i(0) },
     ], false),
-    "Noexcept": o([
-        { json: "noexcept", js: "noexcept", typ: i(0) },
-    ], false),
     "Obj4": o([
         { json: "NSError", js: "NSError", typ: r("NSError") },
         { json: "NSObject", js: "NSObject", typ: r("NSObject") },
@@ -2719,6 +2743,7 @@ const typeMap: any = {
         { json: "SEL", js: "SEL", typ: r("Sel") },
         { json: "dummy", js: "dummy", typ: i(0) },
         { 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") },
         { json: "nonlocal", js: "nonlocal", typ: r("Nonlocal") },
@@ -2772,7 +2797,6 @@ const typeMap: any = {
         { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
-        { json: "select", js: "select", typ: r("Select") },
     ], false),
     "NSError": o([
         { json: "NSError", js: "NSError", typ: i(0) },
@@ -2804,6 +2828,9 @@ const typeMap: any = {
     "NoSuchMethod": o([
         { json: "noSuchMethod", js: "noSuchMethod", typ: i(0) },
     ], false),
+    "Noexcept": o([
+        { json: "noexcept", js: "noexcept", typ: i(0) },
+    ], false),
     "Nonatomic": o([
         { json: "nonatomic", js: "nonatomic", typ: i(0) },
     ], false),
@@ -2963,9 +2990,6 @@ const typeMap: any = {
     "Sealed": o([
         { json: "sealed", js: "sealed", typ: i(0) },
     ], false),
-    "Select": o([
-        { json: "select", js: "select", typ: i(0) },
-    ], false),
     "Obj5": o([
         { json: "KSerializer", js: "KSerializer", typ: r("KSerializer") },
         { json: "PrimitiveKind", js: "PrimitiveKind", typ: r("PrimitiveKind") },
@@ -2984,8 +3008,10 @@ const typeMap: any = {
         { json: "TimeZone", js: "TimeZone", typ: r("TimeZone") },
         { json: "True", js: "True", typ: r("True") },
         { json: "Type", js: "Type", typ: r("Type") },
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: r("UnmarshalJSON") },
         { json: "UseSerializers", js: "UseSerializers", typ: r("UseSerializers") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "select", js: "select", typ: r("Select") },
         { json: "self", js: "self", typ: r("SelfClass") },
         { json: "serialize", js: "serialize", typ: r("Serialize") },
         { json: "set", js: "set", typ: r("Set") },
@@ -3012,6 +3038,7 @@ const typeMap: any = {
         { json: "throw", js: "throw", typ: r("Throw") },
         { json: "throws", js: "throws", typ: r("Throws") },
         { json: "toString", js: "toString", typ: r("ToString") },
+        { json: "to_dict", js: "to_dict", typ: r("ToDict") },
         { 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") },
@@ -3030,8 +3057,6 @@ const typeMap: any = {
         { json: "union", js: "union", typ: r("Union") },
         { json: "unowned", js: "unowned", typ: r("Unowned") },
         { json: "unsafe", js: "unsafe", typ: r("Unsafe") },
-        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
-        { json: "ushort", js: "ushort", typ: r("Ushort") },
     ], false),
     "KSerializer": o([
         { json: "KSerializer", js: "KSerializer", typ: i(0) },
@@ -3084,9 +3109,15 @@ const typeMap: any = {
     "Type": o([
         { json: "Type", js: "Type", typ: i(0) },
     ], false),
+    "UnmarshalJSON": o([
+        { json: "UnmarshalJSON", js: "UnmarshalJSON", typ: i(0) },
+    ], false),
     "UseSerializers": o([
         { json: "UseSerializers", js: "UseSerializers", typ: i(0) },
     ], false),
+    "Select": o([
+        { json: "select", js: "select", typ: i(0) },
+    ], false),
     "SelfClass": o([
         { json: "self", js: "self", typ: i(0) },
     ], false),
@@ -3165,6 +3196,9 @@ const typeMap: any = {
     "ToString": o([
         { json: "toString", js: "toString", typ: i(0) },
     ], false),
+    "ToDict": o([
+        { json: "to_dict", js: "to_dict", typ: i(0) },
+    ], false),
     "ToJSON": o([
         { json: "to_json", js: "to_json", typ: i(0) },
     ], false),
@@ -3219,18 +3253,14 @@ const typeMap: any = {
     "Unsafe": o([
         { json: "unsafe", js: "unsafe", typ: i(0) },
     ], false),
-    "Unsigned": o([
-        { json: "unsigned", js: "unsigned", typ: i(0) },
-    ], false),
-    "Ushort": o([
-        { json: "ushort", js: "ushort", typ: i(0) },
-    ], false),
     "Obj6": o([
         { json: "UUID", js: "UUID", typ: r("UUID") },
         { json: "Utf8JsonReader", js: "Utf8JsonReader", typ: r("Utf8JSONReader") },
         { json: "Utf8JsonWriter", js: "Utf8JsonWriter", typ: r("Utf8JSONWriter") },
         { json: "YES", js: "YES", typ: r("Yes") },
         { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
+        { json: "ushort", js: "ushort", typ: r("Ushort") },
         { json: "using", js: "using", typ: r("Using") },
         { json: "var", js: "var", typ: r("Var") },
         { json: "virtual", js: "virtual", typ: r("Virtual") },
@@ -3258,6 +3288,12 @@ const typeMap: any = {
     "Yes": o([
         { json: "YES", js: "YES", typ: i(0) },
     ], false),
+    "Unsigned": o([
+        { json: "unsigned", js: "unsigned", typ: i(0) },
+    ], false),
+    "Ushort": o([
+        { json: "ushort", js: "ushort", typ: i(0) },
+    ], false),
     "Using": o([
         { json: "using", js: "using", typ: i(0) },
     ], false),
diff --git a/base/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
index eeab77a..c089428 100644
--- a/base/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
index 550a950..6256d22 100644
--- a/base/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
index 2bcc4e2..29495b7 100644
--- a/base/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
index 26d8381..6eec1bc 100644
--- a/base/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
@@ -384,7 +384,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -395,7 +395,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
index a1b089d..64b4ccb 100644
--- a/base/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
index 111e281..500130f 100644
--- a/base/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
@@ -105,7 +105,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -116,7 +116,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
index 53012a2..5875700 100644
--- a/base/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -255,7 +255,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
index 5acf2f5..64d931a 100644
--- a/base/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
@@ -107,7 +107,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -118,7 +118,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/head/typescript/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.ts
new file mode 100644
index 0000000..cf9f14e
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/number-map.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -0,0 +1,204 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    readonly foo: { readonly [key: string]: number };
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = Object.create(null);
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return Object.setPrototypeOf(result, Object.prototype);
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && (typeof val === "string" || val instanceof Date)) return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "foo", js: "foo", typ: m(3.14) },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
index 4629d9d..7700cc4 100644
--- a/base/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
index ed9914b..7129831 100644
--- a/base/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
index 14ba2bd..6c79144 100644
--- a/base/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
@@ -113,7 +113,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -124,7 +124,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
index ffabdda..2bab583 100644
--- a/base/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
index 2c52978..7c6b8b7 100644
--- a/base/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -237,7 +237,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
index 61d8ad3..412ebc2 100644
--- a/base/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
@@ -115,7 +115,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -126,7 +126,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
index 9bf4778..e02d007 100644
--- a/base/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
@@ -114,7 +114,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -125,7 +125,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
index 3f729e7..613ee28 100644
--- a/base/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
@@ -117,7 +117,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -128,7 +128,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
index 56df2ba..f2d8eba 100644
--- a/base/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
index 450efa7..4d6119e 100644
--- a/base/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
@@ -112,7 +112,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -123,7 +123,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
index f045824..1b8ecff 100644
--- a/base/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
index 2c5c49a..42c7f9f 100644
--- a/base/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
index 68047d4..28e8952 100644
--- a/base/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
@@ -108,7 +108,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -119,7 +119,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
index f9be8e3..fd0f6ca 100644
--- a/base/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
@@ -393,7 +393,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -404,7 +404,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
index e3ddd80..44e54d1 100644
--- a/base/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
index acb9d31..267ba8b 100644
--- a/base/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
index 1cfdd69..b26c2a4 100644
--- a/base/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
@@ -111,7 +111,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -122,7 +122,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
index f442069..64a96cd 100644
--- a/base/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
index 871aee4..ca4c83e 100644
--- a/base/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
index 49a90d6..ab3a9d9 100644
--- a/base/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
index 73b065e..5b4b68c 100644
--- a/base/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
@@ -109,7 +109,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
index e1ac35d..92ce930 100644
--- a/base/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
@@ -177,7 +177,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -188,7 +188,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
index 38eedf1..eed9604 100644
--- a/base/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
@@ -120,7 +120,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -131,7 +131,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
diff --git a/base/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
index dd9e267..13747bf 100644
--- a/base/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
         if (val === null || typeof val !== "object" || Array.isArray(val)) {
             return invalidValue(l(ref || "object"), val, key, parent);
         }
-        const result: any = {};
+        const result: any = Object.create(null);
         Object.getOwnPropertyNames(props).forEach(key => {
             const prop = props[key];
             const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
@@ -200,7 +200,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
                 result[key] = transform(val[key], additional, getProps, key, ref);
             }
         });
-        return result;
+        return Object.setPrototypeOf(result, Object.prototype);
     }
 
     if (typ === "any") return val;
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 cd9445d..8409029 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
@@ -79,8 +79,18 @@ export class Using extends S.Class<Using>("Using")({
     "using": S.Int,
 }) {}
 
+export class Ushort extends S.Class<Ushort>("Ushort")({
+    "ushort": S.Int,
+}) {}
+
+export class Unsigned extends S.Class<Unsigned>("Unsigned")({
+    "unsigned": S.Int,
+}) {}
+
 export class Obj6 extends S.Class<Obj6>("Obj6")({
     "dummy": S.Int,
+    "unsigned": Unsigned,
+    "ushort": Ushort,
     "using": Using,
     "Utf8JsonReader": Utf8JsonReader,
     "Utf8JsonWriter": Utf8JsonWriter,
@@ -101,18 +111,10 @@ export class Obj6 extends S.Class<Obj6>("Obj6")({
     "yield": Yield,
 }) {}
 
-export class Ushort extends S.Class<Ushort>("Ushort")({
-    "ushort": S.Int,
-}) {}
-
 export class UseSerializers extends S.Class<UseSerializers>("UseSerializers")({
     "UseSerializers": S.Int,
 }) {}
 
-export class Unsigned extends S.Class<Unsigned>("Unsigned")({
-    "unsigned": S.Int,
-}) {}
-
 export class Unsafe extends S.Class<Unsafe>("Unsafe")({
     "unsafe": S.Int,
 }) {}
@@ -121,6 +123,10 @@ export class Unowned extends S.Class<Unowned>("Unowned")({
     "unowned": S.Int,
 }) {}
 
+export class UnmarshalJson extends S.Class<UnmarshalJson>("UnmarshalJson")({
+    "UnmarshalJSON": S.Int,
+}) {}
+
 export class Union extends S.Class<Union>("Union")({
     "union": S.Int,
 }) {}
@@ -190,6 +196,10 @@ export class ToJson extends S.Class<ToJson>("ToJson")({
     "to_json": S.Int,
 }) {}
 
+export class ToDict extends S.Class<ToDict>("ToDict")({
+    "to_dict": S.Int,
+}) {}
+
 export class TimeZone extends S.Class<TimeZone>("TimeZone")({
     "TimeZone": S.Int,
 }) {}
@@ -338,6 +348,10 @@ export class Self extends S.Class<Self>("Self")({
     "Self": S.Int,
 }) {}
 
+export class Select extends S.Class<Select>("Select")({
+    "select": S.Int,
+}) {}
+
 export class PrimitiveKind extends S.Class<PrimitiveKind>("PrimitiveKind")({
     "PrimitiveKind": S.Int,
 }) {}
@@ -365,6 +379,7 @@ export class Obj5 extends S.Class<Obj5>("Obj5")({
     "true": TrueClass,
     "type": TypeClass,
     "PrimitiveKind": PrimitiveKind,
+    "select": Select,
     "Self": Self,
     "Sendable": Sendable,
     "SerialDescriptor": SerialDescriptor,
@@ -402,6 +417,7 @@ export class Obj5 extends S.Class<Obj5>("Obj5")({
     "TimeOnly": TimeOnly,
     "TimeOnlyConverter": TimeOnlyConverter,
     "TimeZone": TimeZone,
+    "to_dict": ToDict,
     "to_json": ToJson,
     "toString": ToString,
     "top_level": TopLevelClass,
@@ -419,18 +435,13 @@ export class Obj5 extends S.Class<Obj5>("Obj5")({
     "unchecked": Unchecked,
     "undefined": Undefined,
     "union": Union,
+    "UnmarshalJSON": UnmarshalJson,
     "unowned": Unowned,
     "unsafe": Unsafe,
-    "unsigned": Unsigned,
     "UseSerializers": UseSerializers,
-    "ushort": Ushort,
 }) {}
 Object.defineProperty(Obj5.prototype, "toString", { writable: true });
 
-export class Select extends S.Class<Select>("Select")({
-    "select": S.Int,
-}) {}
-
 export class Sel extends S.Class<Sel>("Sel")({
     "SEL": S.Int,
 }) {}
@@ -679,6 +690,10 @@ export class Nonatomic extends S.Class<Nonatomic>("Nonatomic")({
     "nonatomic": S.Int,
 }) {}
 
+export class Noexcept extends S.Class<Noexcept>("Noexcept")({
+    "noexcept": S.Int,
+}) {}
+
 export class NoSuchMethod extends S.Class<NoSuchMethod>("NoSuchMethod")({
     "noSuchMethod": S.Int,
 }) {}
@@ -686,6 +701,7 @@ export class NoSuchMethod extends S.Class<NoSuchMethod>("NoSuchMethod")({
 export class Obj4 extends S.Class<Obj4>("Obj4")({
     "dummy": S.Int,
     "noSuchMethod": NoSuchMethod,
+    "noexcept": Noexcept,
     "nonatomic": Nonatomic,
     "None": None,
     "nonlocal": Nonlocal,
@@ -748,11 +764,6 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "sbyte": Sbyte,
     "sealed": Sealed,
     "SEL": Sel,
-    "select": Select,
-}) {}
-
-export class Noexcept extends S.Class<Noexcept>("Noexcept")({
-    "noexcept": S.Int,
 }) {}
 
 export class No extends S.Class<No>("No")({
@@ -795,6 +806,10 @@ export class MetadataPropertyHandling extends S.Class<MetadataPropertyHandling>(
     "metadata_property_handling": S.Int,
 }) {}
 
+export class MarshalJson extends S.Class<MarshalJson>("MarshalJson")({
+    "MarshalJSON": S.Int,
+}) {}
+
 export class MapEntry extends S.Class<MapEntry>("MapEntry")({
     "MapEntry": S.Int,
 }) {}
@@ -1007,8 +1022,13 @@ export class Guard extends S.Class<Guard>("Guard")({
     "guard": S.Int,
 }) {}
 
+export class Goto extends S.Class<Goto>("Goto")({
+    "goto": S.Int,
+}) {}
+
 export class Obj3 extends S.Class<Obj3>("Obj3")({
     "dummy": S.Int,
+    "goto": Goto,
     "guard": Guard,
     "hasOwnProperty": HasOwnProperty,
     "hashCode": HashCode,
@@ -1062,6 +1082,7 @@ export class Obj3 extends S.Class<Obj3>("Obj3")({
     "long": Long,
     "map": Map,
     "MapEntry": MapEntry,
+    "MarshalJSON": MarshalJson,
     "metadata_property_handling": MetadataPropertyHandling,
     "module": Module,
     "mutable": Mutable,
@@ -1072,17 +1093,12 @@ export class Obj3 extends S.Class<Obj3>("Obj3")({
     "newtonsoft": Newtonsoft,
     "nil": Nil,
     "NO": No,
-    "noexcept": Noexcept,
 }) {}
 
 export class FalseClass extends S.Class<FalseClass>("FalseClass")({
     "false": S.Int,
 }) {}
 
-export class Goto extends S.Class<Goto>("Goto")({
-    "goto": S.Int,
-}) {}
-
 export class Go extends S.Class<Go>("Go")({
     "go": S.Int,
 }) {}
@@ -1107,6 +1123,10 @@ export class FromJson extends S.Class<FromJson>("FromJson")({
     "from_json": S.Int,
 }) {}
 
+export class FromDict extends S.Class<FromDict>("FromDict")({
+    "from_dict": S.Int,
+}) {}
+
 export class From extends S.Class<From>("From")({
     "from": S.Int,
 }) {}
@@ -1389,13 +1409,13 @@ export class Obj2 extends S.Class<Obj2>("Obj2")({
     "FormatException": FormatException,
     "friend": Friend,
     "from": From,
+    "from_dict": FromDict,
     "from_json": FromJson,
     "func": Func,
     "function": Function,
     "get": Get,
     "global": Global,
     "go": Go,
-    "goto": Goto,
     "false": FalseClass,
 }) {}
 
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 2c30235..2d6b0aa 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
@@ -607,6 +607,11 @@ export const FromSchema = z.object({
 });
 export type From = z.infer<typeof FromSchema>;
 
+export const FromDictSchema = z.object({
+    "from_dict": z.number().int(),
+});
+export type FromDict = z.infer<typeof FromDictSchema>;
+
 export const FromJsonSchema = z.object({
     "from_json": z.number().int(),
 });
@@ -637,16 +642,16 @@ export const GoSchema = z.object({
 });
 export type Go = z.infer<typeof GoSchema>;
 
-export const GotoSchema = z.object({
-    "goto": z.number().int(),
-});
-export type Goto = z.infer<typeof GotoSchema>;
-
 export const FalseClassSchema = z.object({
     "false": z.number().int(),
 });
 export type FalseClass = z.infer<typeof FalseClassSchema>;
 
+export const GotoSchema = z.object({
+    "goto": z.number().int(),
+});
+export type Goto = z.infer<typeof GotoSchema>;
+
 export const GuardSchema = z.object({
     "guard": z.number().int(),
 });
@@ -912,6 +917,11 @@ export const MapEntrySchema = z.object({
 });
 export type MapEntry = z.infer<typeof MapEntrySchema>;
 
+export const MarshalJsonSchema = z.object({
+    "MarshalJSON": z.number().int(),
+});
+export type MarshalJson = z.infer<typeof MarshalJsonSchema>;
+
 export const MetadataPropertyHandlingSchema = z.object({
     "metadata_property_handling": z.number().int(),
 });
@@ -962,16 +972,16 @@ export const NoSchema = z.object({
 });
 export type No = z.infer<typeof NoSchema>;
 
-export const NoexceptSchema = z.object({
-    "noexcept": z.number().int(),
-});
-export type Noexcept = z.infer<typeof NoexceptSchema>;
-
 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(),
+});
+export type Noexcept = z.infer<typeof NoexceptSchema>;
+
 export const NonatomicSchema = z.object({
     "nonatomic": z.number().int(),
 });
@@ -1282,11 +1292,6 @@ export const SelSchema = z.object({
 });
 export type Sel = z.infer<typeof SelSchema>;
 
-export const SelectSchema = z.object({
-    "select": z.number().int(),
-});
-export type Select = z.infer<typeof SelectSchema>;
-
 export const KSerializerSchema = z.object({
     "KSerializer": z.number().int(),
 });
@@ -1312,6 +1317,11 @@ export const PrimitiveKindSchema = z.object({
 });
 export type PrimitiveKind = z.infer<typeof PrimitiveKindSchema>;
 
+export const SelectSchema = z.object({
+    "select": z.number().int(),
+});
+export type Select = z.infer<typeof SelectSchema>;
+
 export const SelfSchema = z.object({
     "Self": z.number().int(),
 });
@@ -1497,6 +1507,11 @@ export const TimeZoneSchema = z.object({
 });
 export type TimeZone = z.infer<typeof TimeZoneSchema>;
 
+export const ToDictSchema = z.object({
+    "to_dict": z.number().int(),
+});
+export type ToDict = z.infer<typeof ToDictSchema>;
+
 export const ToJsonSchema = z.object({
     "to_json": z.number().int(),
 });
@@ -1582,6 +1597,11 @@ export const UnionSchema = z.object({
 });
 export type Union = z.infer<typeof UnionSchema>;
 
+export const UnmarshalJsonSchema = z.object({
+    "UnmarshalJSON": z.number().int(),
+});
+export type UnmarshalJson = z.infer<typeof UnmarshalJsonSchema>;
+
 export const UnownedSchema = z.object({
     "unowned": z.number().int(),
 });
@@ -1592,16 +1612,16 @@ export const UnsafeSchema = z.object({
 });
 export type Unsafe = z.infer<typeof UnsafeSchema>;
 
-export const UnsignedSchema = z.object({
-    "unsigned": z.number().int(),
-});
-export type Unsigned = z.infer<typeof UnsignedSchema>;
-
 export const UseSerializersSchema = z.object({
     "UseSerializers": z.number().int(),
 });
 export type UseSerializers = z.infer<typeof UseSerializersSchema>;
 
+export const UnsignedSchema = z.object({
+    "unsigned": z.number().int(),
+});
+export type Unsigned = z.infer<typeof UnsignedSchema>;
+
 export const UshortSchema = z.object({
     "ushort": z.number().int(),
 });
@@ -1824,19 +1844,20 @@ export const Obj2Schema = z.object({
     "FormatException": FormatExceptionSchema,
     "friend": FriendSchema,
     "from": FromSchema,
+    "from_dict": FromDictSchema,
     "from_json": FromJsonSchema,
     "func": FuncSchema,
     "function": FunctionSchema,
     "get": GetSchema,
     "global": GlobalSchema,
     "go": GoSchema,
-    "goto": GotoSchema,
     "false": FalseClassSchema,
 });
 export type Obj2 = z.infer<typeof Obj2Schema>;
 
 export const Obj3Schema = z.object({
     "dummy": z.number().int(),
+    "goto": GotoSchema,
     "guard": GuardSchema,
     "hasOwnProperty": HasOwnPropertySchema,
     "hashCode": HashCodeSchema,
@@ -1890,6 +1911,7 @@ export const Obj3Schema = z.object({
     "long": LongSchema,
     "map": MapSchema,
     "MapEntry": MapEntrySchema,
+    "MarshalJSON": MarshalJsonSchema,
     "metadata_property_handling": MetadataPropertyHandlingSchema,
     "module": ModuleSchema,
     "mutable": MutableSchema,
@@ -1900,13 +1922,13 @@ export const Obj3Schema = z.object({
     "newtonsoft": NewtonsoftSchema,
     "nil": NilSchema,
     "NO": NoSchema,
-    "noexcept": NoexceptSchema,
 });
 export type Obj3 = z.infer<typeof Obj3Schema>;
 
 export const Obj4Schema = z.object({
     "dummy": z.number().int(),
     "noSuchMethod": NoSuchMethodSchema,
+    "noexcept": NoexceptSchema,
     "nonatomic": NonatomicSchema,
     "None": NoneSchema,
     "nonlocal": NonlocalSchema,
@@ -1969,7 +1991,6 @@ export const Obj4Schema = z.object({
     "sbyte": SbyteSchema,
     "sealed": SealedSchema,
     "SEL": SelSchema,
-    "select": SelectSchema,
 });
 export type Obj4 = z.infer<typeof Obj4Schema>;
 
@@ -1980,6 +2001,7 @@ export const Obj5Schema = z.object({
     "true": TrueClassSchema,
     "type": TypeClassSchema,
     "PrimitiveKind": PrimitiveKindSchema,
+    "select": SelectSchema,
     "Self": SelfSchema,
     "Sendable": SendableSchema,
     "SerialDescriptor": SerialDescriptorSchema,
@@ -2017,6 +2039,7 @@ export const Obj5Schema = z.object({
     "TimeOnly": TimeOnlySchema,
     "TimeOnlyConverter": TimeOnlyConverterSchema,
     "TimeZone": TimeZoneSchema,
+    "to_dict": ToDictSchema,
     "to_json": ToJsonSchema,
     "toString": ToStringSchema,
     "top_level": TopLevelClassSchema,
@@ -2034,16 +2057,17 @@ export const Obj5Schema = z.object({
     "unchecked": UncheckedSchema,
     "undefined": UndefinedSchema,
     "union": UnionSchema,
+    "UnmarshalJSON": UnmarshalJsonSchema,
     "unowned": UnownedSchema,
     "unsafe": UnsafeSchema,
-    "unsigned": UnsignedSchema,
     "UseSerializers": UseSerializersSchema,
-    "ushort": UshortSchema,
 });
 export type Obj5 = z.infer<typeof Obj5Schema>;
 
 export const Obj6Schema = z.object({
     "dummy": z.number().int(),
+    "unsigned": UnsignedSchema,
+    "ushort": UshortSchema,
     "using": UsingSchema,
     "Utf8JsonReader": Utf8JsonReaderSchema,
     "Utf8JsonWriter": Utf8JsonWriterSchema,
